diff mbox

Dear Wired Lan Experts, kindly offer your guidance on customer's input please

Message ID 5D695A7F6F10504DBD9B9187395A21797E8F7782@ORSMSX112.amr.corp.intel.com
State Not Applicable
Headers show

Commit Message

Jayakumar, Muthurajan Sept. 7, 2016, 4:12 p.m. UTC
Dear Wired Lan Experts,
kindly offer your guidance on following customer's input below please
Much appreciated.

Best Regards,
M Jay



In the ixgbe driver (82599EB/X540/X550/X550EM_x), if RSS < 4 and we allocate VFs, the driver forces to use 2-queue (per VF) mode instead of 4-queue mode (see ixgbe_set_vmdq_queues function in ixgbe_lib.c)
Is there any fundamental reason to do so? Is it possible to still use 4-queue mode (per VF) even when RSS=1 (i.e., a physical function uses only 1 TX/RX queue but all VFs use 4 TX/RX queues)

The proposed change to use 4-queue mode is as follows (please double check if anything else needs to be changed):
diff mbox

Patch

diff -urN src/ixgbe_lib.c src_new/ixgbe_lib.c
--- src/ixgbe_lib.c     2016-07-12 13:11:56.976425563 -0700
+++ src_new/ixgbe_lib.c 2016-07-12 13:12:55.540425563 -0700
@@ -582,7 +582,7 @@ 
                vmdq_i = min_t(u16, IXGBE_MAX_VMDQ_INDICES, vmdq_i);

                /* 64 pool mode with 2 queues per pool */
-               if ((vmdq_i > 32) || (rss_i < 4)) {
+               if (vmdq_i > 32) {
                        vmdq_m = IXGBE_82599_VMDQ_2Q_MASK;
                        rss_m = IXGBE_RSS_2Q_MASK;
                        rss_i = min_t(u16, rss_i, 2);
@@ -590,7 +590,7 @@ 
                } else {
                        vmdq_m = IXGBE_82599_VMDQ_4Q_MASK;
                        rss_m = IXGBE_RSS_4Q_MASK;
-                       rss_i = 4;
+                       rss_i = min_t(u16, rss_i, 4);
                }

 #if IS_ENABLED(CONFIG_FCOE)
diff -urN src/ixgbe_main.c src_new/ixgbe_main.c
--- src/ixgbe_main.c    2016-07-12 13:11:56.980425563 -0700
+++ src_new/ixgbe_main.c        2016-07-12 13:12:55.544425563 -0700
@@ -2883,7 +2883,7 @@ 
                        mtqc |= IXGBE_MTQC_RT_ENA | IXGBE_MTQC_8TC_8TQ;
                else if (tcs > 1)
                        mtqc |= IXGBE_MTQC_RT_ENA | IXGBE_MTQC_4TC_4TQ;
-               else if (adapter->ring_feature[RING_F_RSS].indices == 4)
+               else if (adapter->ring_feature[RING_F_VMDQ].mask == IXGBE_82599_VMDQ_4Q_MASK)
                        mtqc |= IXGBE_MTQC_32VF;
                else
                        mtqc |= IXGBE_MTQC_64VF;
@@ -3186,13 +3186,12 @@ 
                        mrqc = IXGBE_MRQC_RSSEN;
        } else {
                u8 tcs = netdev_get_num_tc(adapter->netdev);
-
                if (adapter->flags & IXGBE_FLAG_VMDQ_ENABLED) {
                        if (tcs > 4)
                                mrqc = IXGBE_MRQC_VMDQRT8TCEN;  /* 8 TCs */
                        else if (tcs > 1)
                                mrqc = IXGBE_MRQC_VMDQRT4TCEN;  /* 4 TCs */
-                       else if (adapter->ring_feature[RING_F_RSS].indices == 4)
+                       else if (adapter->ring_feature[RING_F_VMDQ].mask == IXGBE_82599_VMDQ_4Q_MASK)
                                mrqc = IXGBE_MRQC_VMDQRSS32EN;
                        else
                                mrqc = IXGBE_MRQC_VMDQRSS64EN;