diff options
author | Amit Kumar Salecha <amit.salecha@qlogic.com> | 2010-09-16 15:14:39 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-09-17 14:26:09 -0400 |
commit | d57906633efd58ccd93f056ed436ffde5cb31aa8 (patch) | |
tree | 59a319066931683e8b9ed0feeef0c483fcb5b068 /drivers/net/qlcnic/qlcnic_main.c | |
parent | 0c796f91a518480fd6696ba2affed1167e840823 (diff) |
qlcnic: support vlan rx accleration
Implemented vlan rx accleration in driver.
This helps in increasing significant performance and
reduces cpu utilization with GRO and LRO.
Eric Dumazet:
"Its a bit strange you use dev_kfree_skb_any(skb) here."
"We run in NAPI mode, so you can use dev_kfree_skb()."
Amit:
Done. Using dev_kfree_skb();
Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com>
Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/qlcnic/qlcnic_main.c')
-rw-r--r-- | drivers/net/qlcnic/qlcnic_main.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/net/qlcnic/qlcnic_main.c b/drivers/net/qlcnic/qlcnic_main.c index 5fd2abd1eb6..9eb0ced1ffa 100644 --- a/drivers/net/qlcnic/qlcnic_main.c +++ b/drivers/net/qlcnic/qlcnic_main.c | |||
@@ -371,6 +371,13 @@ static int qlcnic_set_mac(struct net_device *netdev, void *p) | |||
371 | return 0; | 371 | return 0; |
372 | } | 372 | } |
373 | 373 | ||
374 | static void qlcnic_vlan_rx_register(struct net_device *netdev, | ||
375 | struct vlan_group *grp) | ||
376 | { | ||
377 | struct qlcnic_adapter *adapter = netdev_priv(netdev); | ||
378 | adapter->vlgrp = grp; | ||
379 | } | ||
380 | |||
374 | static const struct net_device_ops qlcnic_netdev_ops = { | 381 | static const struct net_device_ops qlcnic_netdev_ops = { |
375 | .ndo_open = qlcnic_open, | 382 | .ndo_open = qlcnic_open, |
376 | .ndo_stop = qlcnic_close, | 383 | .ndo_stop = qlcnic_close, |
@@ -381,6 +388,7 @@ static const struct net_device_ops qlcnic_netdev_ops = { | |||
381 | .ndo_set_mac_address = qlcnic_set_mac, | 388 | .ndo_set_mac_address = qlcnic_set_mac, |
382 | .ndo_change_mtu = qlcnic_change_mtu, | 389 | .ndo_change_mtu = qlcnic_change_mtu, |
383 | .ndo_tx_timeout = qlcnic_tx_timeout, | 390 | .ndo_tx_timeout = qlcnic_tx_timeout, |
391 | .ndo_vlan_rx_register = qlcnic_vlan_rx_register, | ||
384 | #ifdef CONFIG_NET_POLL_CONTROLLER | 392 | #ifdef CONFIG_NET_POLL_CONTROLLER |
385 | .ndo_poll_controller = qlcnic_poll_controller, | 393 | .ndo_poll_controller = qlcnic_poll_controller, |
386 | #endif | 394 | #endif |
@@ -1446,7 +1454,7 @@ qlcnic_setup_netdev(struct qlcnic_adapter *adapter, | |||
1446 | SET_ETHTOOL_OPS(netdev, &qlcnic_ethtool_ops); | 1454 | SET_ETHTOOL_OPS(netdev, &qlcnic_ethtool_ops); |
1447 | 1455 | ||
1448 | netdev->features |= (NETIF_F_SG | NETIF_F_IP_CSUM | | 1456 | netdev->features |= (NETIF_F_SG | NETIF_F_IP_CSUM | |
1449 | NETIF_F_IPV6_CSUM | NETIF_F_GRO); | 1457 | NETIF_F_IPV6_CSUM | NETIF_F_GRO | NETIF_F_HW_VLAN_RX); |
1450 | netdev->vlan_features |= (NETIF_F_SG | NETIF_F_IP_CSUM | | 1458 | netdev->vlan_features |= (NETIF_F_SG | NETIF_F_IP_CSUM | |
1451 | NETIF_F_IPV6_CSUM); | 1459 | NETIF_F_IPV6_CSUM); |
1452 | 1460 | ||