]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
igb: set max size RX buffer when store bad packet is enabled
authorRadoslaw Tyl <radoslawx.tyl@intel.com>
Thu, 24 Aug 2023 20:46:19 +0000 (13:46 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 19 Sep 2023 10:22:50 +0000 (12:22 +0200)
commit bb5ed01cd2428cd25b1c88a3a9cba87055eb289f upstream.

Increase the RX buffer size to 3K when the SBP bit is on. The size of
the RX buffer determines the number of pages allocated which may not
be sufficient for receive frames larger than the set MTU size.

Cc: stable@vger.kernel.org
Fixes: 89eaefb61dc9 ("igb: Support RX-ALL feature flag.")
Reported-by: Manfred Rudigier <manfred.rudigier@omicronenergy.com>
Signed-off-by: Radoslaw Tyl <radoslawx.tyl@intel.com>
Tested-by: Arpana Arland <arpanax.arland@intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/ethernet/intel/igb/igb_main.c

index bff9649d8abd0d587533bf76681700aff6de8074..83daf86c1674b07ea654007981545cdcb0e21abd 100644 (file)
@@ -4737,6 +4737,10 @@ void igb_configure_rx_ring(struct igb_adapter *adapter,
 static void igb_set_rx_buffer_len(struct igb_adapter *adapter,
                                  struct igb_ring *rx_ring)
 {
+#if (PAGE_SIZE < 8192)
+       struct e1000_hw *hw = &adapter->hw;
+#endif
+
        /* set build_skb and buffer size flags */
        clear_ring_build_skb_enabled(rx_ring);
        clear_ring_uses_large_buffer(rx_ring);
@@ -4747,10 +4751,9 @@ static void igb_set_rx_buffer_len(struct igb_adapter *adapter,
        set_ring_build_skb_enabled(rx_ring);
 
 #if (PAGE_SIZE < 8192)
-       if (adapter->max_frame_size <= IGB_MAX_FRAME_BUILD_SKB)
-               return;
-
-       set_ring_uses_large_buffer(rx_ring);
+       if (adapter->max_frame_size > IGB_MAX_FRAME_BUILD_SKB ||
+           rd32(E1000_RCTL) & E1000_RCTL_SBP)
+               set_ring_uses_large_buffer(rx_ring);
 #endif
 }