[PATCH net-next-2.6] be2net: add multiple RX queue support

Previous thread: [PATCH net-next] bnx2x: Moved enabling of MSI to the bnx2x_set_num_queues() by Dmitry Kravkov on Wednesday, September 29, 2010 - 4:05 am. (2 messages)

Next thread: Re: [RFC] Online firmware upgrade in non-embedded systems by Carl-Daniel Hailfinger on Wednesday, September 29, 2010 - 6:43 am. (1 message)
From: Sathya Perla
Date: Wednesday, September 29, 2010 - 5:01 am

This patch adds multiple RX queue support to be2net. There are
 4 extra rx-queues per port into which TCP/UDP traffic can be hashed into.
 Some of the ethtool stats are now displayed on a per queue basis.


Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
---
 drivers/net/benet/be.h         |   87 ++++---
 drivers/net/benet/be_cmds.c    |   40 +++-
 drivers/net/benet/be_cmds.h    |   32 ++-
 drivers/net/benet/be_ethtool.c |  174 ++++++++------
 drivers/net/benet/be_main.c    |  539 ++++++++++++++++++++++------------------
 5 files changed, 513 insertions(+), 359 deletions(-)

diff --git a/drivers/net/benet/be.h b/drivers/net/benet/be.h
index 4faf696..5a8aa19 100644
--- a/drivers/net/benet/be.h
+++ b/drivers/net/benet/be.h
@@ -78,6 +78,13 @@ static inline char *nic_name(struct pci_dev *pdev)
 #define MCC_Q_LEN		128	/* total size not to exceed 8 pages */
 #define MCC_CQ_LEN		256
 
+#ifdef CONFIG_PPC64			/* ppc platforms support only max of */
+#define NUM_RSS_QS		2	/* 4 msix vectors per pci function   */
+#else
+#define NUM_RSS_QS		4	/* BE limit is 4 queues/port	     */
+#endif
+
+#define BE_MAX_MSIX_VECTORS	(NUM_RSS_QS + 1 + 1)/* RSS qs + 1 def Rx + Tx */
 #define BE_NAPI_WEIGHT		64
 #define MAX_RX_POST 		BE_NAPI_WEIGHT /* Frags posted at a time */
 #define RX_FRAGS_REFILL_WM	(RX_Q_LEN - MAX_RX_POST)
@@ -157,10 +164,9 @@ struct be_mcc_obj {
 	bool rearm_cq;
 };
 
-struct be_drvr_stats {
+struct be_tx_stats {
 	u32 be_tx_reqs;		/* number of TX requests initiated */
 	u32 be_tx_stops;	/* number of times TX Q was stopped */
-	u32 be_fwd_reqs;	/* number of send reqs through forwarding i/f */
 	u32 be_tx_wrbs;		/* number of tx WRBs used */
 	u32 be_tx_events;	/* number of tx completion events  */
 	u32 be_tx_compl;	/* number of tx completion entries processed */
@@ -169,35 +175,6 @@ struct be_drvr_stats {
 	u64 be_tx_bytes_prev;
 	u64 be_tx_pkts;
 	u32 be_tx_rate;
-
-	u32 cache_barrier[16];
-
-	u32 be_ethrx_post_fail;/* number of ethrx buffer alloc failures ...
From: David Miller
Date: Thursday, September 30, 2010 - 5:39 pm

From: Sathya Perla <sathya.perla@emulex.com>

If the first hunk I see in a patch is something like this, it is
not a good sign.

This is something you need to discover dynamically, and the MSI-X
vector enable functions in the kernel allow you to do this just fine.

Look at what other drivers do, they have a specific number of vectora
they try to obtain using pci_enable_msix(), and if that fails they
decrease the vector count until they are able to succeed.
--

Previous thread: [PATCH net-next] bnx2x: Moved enabling of MSI to the bnx2x_set_num_queues() by Dmitry Kravkov on Wednesday, September 29, 2010 - 4:05 am. (2 messages)

Next thread: Re: [RFC] Online firmware upgrade in non-embedded systems by Carl-Daniel Hailfinger on Wednesday, September 29, 2010 - 6:43 am. (1 message)