summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRadoslaw Tyl <radoslawx.tyl@intel.com>2023-08-24 13:46:19 -0700
committerLee Jones <joneslee@google.com>2023-10-24 12:01:01 +0100
commiteb0351cb180684617f6b727a28fc18dbf054eadc (patch)
tree19a61c350370c9383cc49683fded0aa03eeab19b
parent334c5696a48f0c9d11c5715ae55cfa4231553a5b (diff)
downloadcommon-eb0351cb180684617f6b727a28fc18dbf054eadc.tar.gz
UPSTREAM: igb: set max size RX buffer when store bad packet is enabled
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. Bug: 306483516 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> (cherry picked from commit be7353af5b35c8f4a11573a38b997f74f8c2ae4b) Signed-off-by: Lee Jones <joneslee@google.com> Change-Id: I3f05b369cd9ac24643af3e37e2ce1d099c63bc02
-rw-r--r--drivers/net/ethernet/intel/igb/igb_main.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index 446598210012..1143800c889a 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -4731,6 +4731,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);
@@ -4741,10 +4745,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
}