Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
Pull networking changes from David Miller: "Noteworthy changes this time around: 1) Multicast rejoin support for team driver, from Jiri Pirko. 2) Centralize and simplify TCP RTT measurement handling in order to reduce the impact of bad RTO seeding from SYN/ACKs. Also, when both timestamps and local RTT measurements are available prefer the later because there are broken middleware devices which scramble the timestamp. From Yuchung Cheng. 3) Add TCP_NOTSENT_LOWAT socket option to limit the amount of kernel memory consumed to queue up unsend user data. From Eric Dumazet. 4) Add a "physical port ID" abstraction for network devices, from Jiri Pirko. 5) Add a "suppress" operation to influence fib_rules lookups, from Stefan Tomanek. 6) Add a networking development FAQ, from Paul Gortmaker. 7) Extend the information provided by tcp_probe and add ipv6 support, from Daniel Borkmann. 8) Use RCU locking more extensively in openvswitch data paths, from Pravin B Shelar. 9) Add SCTP support to openvswitch, from Joe Stringer. 10) Add EF10 chip support to SFC driver, from Ben Hutchings. 11) Add new SYNPROXY netfilter target, from Patrick McHardy. 12) Compute a rate approximation for sending in TCP sockets, and use this to more intelligently coalesce TSO frames. Furthermore, add a new packet scheduler which takes advantage of this estimate when available. From Eric Dumazet. 13) Allow AF_PACKET fanouts with random selection, from Daniel Borkmann. 14) Add ipv6 support to vxlan driver, from Cong Wang" Resolved conflicts as per discussion. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1218 commits) openvswitch: Fix alignment of struct sw_flow_key. netfilter: Fix build errors with xt_socket.c tcp: Add missing braces to do_tcp_setsockopt caif: Add missing braces to multiline if in cfctrl_linkup_request bnx2x: Add missing braces in bnx2x:bnx2x_link_initialize vxlan: Fix kernel panic on device delete. net: mvneta: implement ->ndo_do_ioctl() to support PHY ioctls net: mvneta: properly disable HW PHY polling and ensure adjust_link() works icplus: Use netif_running to determine device state ethernet/arc/arc_emac: Fix huge delays in large file copies tuntap: orphan frags before trying to set tx timestamp tuntap: purge socket error queue on detach qlcnic: use standard NAPI weights ipv6:introduce function to find route for redirect bnx2x: VF RSS support - VF side bnx2x: VF RSS support - PF side vxlan: Notify drivers for listening UDP port changes net: usbnet: update addr_assign_type if appropriate driver/net: enic: update enic maintainers and driver driver/net: enic: Exposing symbols for Cisco's low latency driver ...
This commit is contained in:
@@ -59,15 +59,13 @@
|
||||
* For high speed, each frame comfortably fits almost 36 max size
|
||||
* Ethernet packets (so queues should be bigger).
|
||||
*
|
||||
* REVISIT qlens should be members of 'struct usbnet'; the goal is to
|
||||
* let the USB host controller be busy for 5msec or more before an irq
|
||||
* is required, under load. Jumbograms change the equation.
|
||||
* The goal is to let the USB host controller be busy for 5msec or
|
||||
* more before an irq is required, under load. Jumbograms change
|
||||
* the equation.
|
||||
*/
|
||||
#define RX_MAX_QUEUE_MEMORY (60 * 1518)
|
||||
#define RX_QLEN(dev) (((dev)->udev->speed == USB_SPEED_HIGH) ? \
|
||||
(RX_MAX_QUEUE_MEMORY/(dev)->rx_urb_size) : 4)
|
||||
#define TX_QLEN(dev) (((dev)->udev->speed == USB_SPEED_HIGH) ? \
|
||||
(RX_MAX_QUEUE_MEMORY/(dev)->hard_mtu) : 4)
|
||||
#define MAX_QUEUE_MEMORY (60 * 1518)
|
||||
#define RX_QLEN(dev) ((dev)->rx_qlen)
|
||||
#define TX_QLEN(dev) ((dev)->tx_qlen)
|
||||
|
||||
// reawaken network queue this soon after stopping; else watchdog barks
|
||||
#define TX_TIMEOUT_JIFFIES (5*HZ)
|
||||
@@ -347,6 +345,31 @@ void usbnet_skb_return (struct usbnet *dev, struct sk_buff *skb)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(usbnet_skb_return);
|
||||
|
||||
/* must be called if hard_mtu or rx_urb_size changed */
|
||||
void usbnet_update_max_qlen(struct usbnet *dev)
|
||||
{
|
||||
enum usb_device_speed speed = dev->udev->speed;
|
||||
|
||||
switch (speed) {
|
||||
case USB_SPEED_HIGH:
|
||||
dev->rx_qlen = MAX_QUEUE_MEMORY / dev->rx_urb_size;
|
||||
dev->tx_qlen = MAX_QUEUE_MEMORY / dev->hard_mtu;
|
||||
break;
|
||||
case USB_SPEED_SUPER:
|
||||
/*
|
||||
* Not take default 5ms qlen for super speed HC to
|
||||
* save memory, and iperf tests show 2.5ms qlen can
|
||||
* work well
|
||||
*/
|
||||
dev->rx_qlen = 5 * MAX_QUEUE_MEMORY / dev->rx_urb_size;
|
||||
dev->tx_qlen = 5 * MAX_QUEUE_MEMORY / dev->hard_mtu;
|
||||
break;
|
||||
default:
|
||||
dev->rx_qlen = dev->tx_qlen = 4;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(usbnet_update_max_qlen);
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
@@ -375,6 +398,9 @@ int usbnet_change_mtu (struct net_device *net, int new_mtu)
|
||||
usbnet_unlink_rx_urbs(dev);
|
||||
}
|
||||
|
||||
/* max qlen depend on hard_mtu and rx_urb_size */
|
||||
usbnet_update_max_qlen(dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(usbnet_change_mtu);
|
||||
@@ -843,6 +869,9 @@ int usbnet_open (struct net_device *net)
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* hard_mtu or rx_urb_size may change in reset() */
|
||||
usbnet_update_max_qlen(dev);
|
||||
|
||||
// insist peer be connected
|
||||
if (info->check_connect && (retval = info->check_connect (dev)) < 0) {
|
||||
netif_dbg(dev, ifup, dev->net, "can't open; %d\n", retval);
|
||||
@@ -927,6 +956,9 @@ int usbnet_set_settings (struct net_device *net, struct ethtool_cmd *cmd)
|
||||
if (dev->driver_info->link_reset)
|
||||
dev->driver_info->link_reset(dev);
|
||||
|
||||
/* hard_mtu or rx_urb_size may change in link_reset() */
|
||||
usbnet_update_max_qlen(dev);
|
||||
|
||||
return retval;
|
||||
|
||||
}
|
||||
@@ -1020,6 +1052,9 @@ static void __handle_link_change(struct usbnet *dev)
|
||||
tasklet_schedule(&dev->bh);
|
||||
}
|
||||
|
||||
/* hard_mtu or rx_urb_size may change during link change */
|
||||
usbnet_update_max_qlen(dev);
|
||||
|
||||
clear_bit(EVENT_LINK_CHANGE, &dev->flags);
|
||||
}
|
||||
|
||||
@@ -1632,11 +1667,18 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
|
||||
dev->rx_urb_size = dev->hard_mtu;
|
||||
dev->maxpacket = usb_maxpacket (dev->udev, dev->out, 1);
|
||||
|
||||
/* let userspace know we have a random address */
|
||||
if (ether_addr_equal(net->dev_addr, node_id))
|
||||
net->addr_assign_type = NET_ADDR_RANDOM;
|
||||
|
||||
if ((dev->driver_info->flags & FLAG_WLAN) != 0)
|
||||
SET_NETDEV_DEVTYPE(net, &wlan_type);
|
||||
if ((dev->driver_info->flags & FLAG_WWAN) != 0)
|
||||
SET_NETDEV_DEVTYPE(net, &wwan_type);
|
||||
|
||||
/* initialize max rx_qlen and tx_qlen */
|
||||
usbnet_update_max_qlen(dev);
|
||||
|
||||
status = register_netdev (net);
|
||||
if (status)
|
||||
goto out4;
|
||||
|
Reference in New Issue
Block a user