From patchwork Wed Jul 13 13:52:04 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Fleming X-Patchwork-Id: 230028 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 937CE2C0100 for ; Sat, 23 Mar 2013 00:42:28 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933283Ab3CVNjh (ORCPT ); Fri, 22 Mar 2013 09:39:37 -0400 Received: from swissweb.swissdisk.com ([174.129.12.238]:52786 "EHLO swissweb.swissdisk.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753680Ab3CVNje (ORCPT ); Fri, 22 Mar 2013 09:39:34 -0400 X-Greylist: delayed 1382 seconds by postgrey-1.27 at vger.kernel.org; Fri, 22 Mar 2013 09:39:34 EDT Received: from root by swissweb.swissdisk.com with local (Exim 4.76) (envelope-from <4c0ed2877c7db6b260f2508d25272a1f45edd37d@swissweb.swissdisk.com>) id 1UJ1fR-0004hs-4l; Fri, 22 Mar 2013 13:05:57 +0000 From: Andy Fleming Date: Wed, 13 Jul 2011 08:52:04 -0500 Subject: [PATCH] net: Add support for handling queueing in hardware To: linux-kernel@vger.kernel.org Cc: netdev@vger.kernel.org Message-Id: Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The QDisc code does a bunch of locking which is unnecessary if you have hardware which handles all of the queueing. Add support for this, and skip over all of the queueing code if the feature is enabled on a given device, which breaks QDisc support on dpaa_eth, and also coopts the FCOE feature bit. Signed-off-by: Andy Fleming Signed-off-by: Ben Collins Cc: netdev@vger.kernel.org --- include/linux/netdev_features.h | 2 ++ net/core/dev.c | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/include/linux/netdev_features.h b/include/linux/netdev_features.h index 3dd3934..ffb4587 100644 --- a/include/linux/netdev_features.h +++ b/include/linux/netdev_features.h @@ -56,6 +56,7 @@ enum { NETIF_F_LOOPBACK_BIT, /* Enable loopback */ NETIF_F_RXFCS_BIT, /* Append FCS to skb pkt data */ NETIF_F_RXALL_BIT, /* Receive errored frames too */ + NETIF_F_HW_QDISC_BIT, /* Supports hardware Qdisc */ /* * Add your fresh new feature above and remember to update @@ -80,6 +81,7 @@ enum { #define NETIF_F_GSO_ROBUST __NETIF_F(GSO_ROBUST) #define NETIF_F_HIGHDMA __NETIF_F(HIGHDMA) #define NETIF_F_HW_CSUM __NETIF_F(HW_CSUM) +#define NETIF_F_HW_QDISC __NETIF_F(HW_QDISC) #define NETIF_F_HW_VLAN_FILTER __NETIF_F(HW_VLAN_FILTER) #define NETIF_F_HW_VLAN_RX __NETIF_F(HW_VLAN_RX) #define NETIF_F_HW_VLAN_TX __NETIF_F(HW_VLAN_TX) diff --git a/net/core/dev.c b/net/core/dev.c index dffbef7..6818b18 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -2743,6 +2743,12 @@ int dev_queue_xmit(struct sk_buff *skb) skb_update_prio(skb); + if (dev->features & NETIF_F_HW_QDISC) { + txq = netdev_pick_tx(dev, skb); + rc = dev_hard_start_xmit(skb, dev, txq); + goto out; + } + txq = netdev_pick_tx(dev, skb); q = rcu_dereference_bh(txq->qdisc);