ethernet/atheros/alx: sanitize buffer sizing and padding
This is based on the work done by Przemek Rudy in bug 70761 at bugzilla.kernel.org, but with some work done to disentagle and clarify things a bit. Similar to Przemek's work and other drivers, we're adding a padding of 16 here, but we're also disentangling mtu size calculations from max buffer size calculations a bit, and adding ETH_HLEN to the value written into ALX_MTU. Hopefully, with a bit more consistency and clarity, things behave better here. Sadly, I can only test in my alx-driven E2200, which worked just fine before this patch. In comment #58 of bug 70761, Eugene A. Shatokhin reports that this patch does help considerably for a ROSA Linux user of his with an AR8162 network adapter when patched into a 4.1.x-based kernel, with several days of normal operation where wired network previously wasn't usable without setting MTU to 9000 as a work-around. Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=70761 CC: "Eugene A. Shatokhin" <eugene.shatokhin@rosalab.ru> CC: Przemek Rudy <prudy1@o2.pl> CC: Jay Cliburn <jcliburn@gmail.com> CC: Chris Snook <chris.snook@gmail.com> CC: netdev@vger.kernel.org Signed-off-by: Jarod Wilson <jarod@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
f637941b14
commit
c406700cdf
@@ -37,6 +37,7 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/mdio.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/if_vlan.h>
|
||||
#include "reg.h"
|
||||
|
||||
/* Transmit Packet Descriptor, contains 4 32-bit words.
|
||||
@@ -343,12 +344,14 @@ struct alx_rrd {
|
||||
ALX_RSS_HASH_TYPE_IPV4_TCP | \
|
||||
ALX_RSS_HASH_TYPE_IPV6 | \
|
||||
ALX_RSS_HASH_TYPE_IPV6_TCP)
|
||||
#define ALX_DEF_RXBUF_SIZE 1536
|
||||
#define ALX_FRAME_PAD 16
|
||||
#define ALX_RAW_MTU(_mtu) (_mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN)
|
||||
#define ALX_MAX_FRAME_LEN(_mtu) (ALIGN((ALX_RAW_MTU(_mtu) + ALX_FRAME_PAD), 8))
|
||||
#define ALX_DEF_RXBUF_SIZE ALX_MAX_FRAME_LEN(1500)
|
||||
#define ALX_MAX_JUMBO_PKT_SIZE (9*1024)
|
||||
#define ALX_MAX_TSO_PKT_SIZE (7*1024)
|
||||
#define ALX_MAX_FRAME_SIZE ALX_MAX_JUMBO_PKT_SIZE
|
||||
#define ALX_MIN_FRAME_SIZE 68
|
||||
#define ALX_RAW_MTU(_mtu) (_mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN)
|
||||
#define ALX_MIN_FRAME_SIZE (ETH_ZLEN + ETH_FCS_LEN + VLAN_HLEN)
|
||||
|
||||
#define ALX_MAX_RX_QUEUES 8
|
||||
#define ALX_MAX_TX_QUEUES 4
|
||||
|
Reference in New Issue
Block a user