gianfar: Maximize Rx buffer size
Until now the size of a Rx buffer was artificially limited to 1536B (which happens to be the default, after reset, hardware value for a Rx buffer). This approach however leaves unused memory space for Rx packets, since the driver uses a paged allocation scheme that reserves half a page for each Rx skb. There's also the inconvenience that frames around 1536 bytes can get scattered if the limit is slightly exceeded. This limit can be exceeded even for standard MTU of 1500B traffic, for common cases like stacked VLANs, or DSA tags. To address these issues, let's just compute the buffer size starting from the upper limit of 2KB (half a page) and subtract the skb overhead and alignment restrictions. Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
9439bb0f36
commit
a9b97286fe
|
@ -90,11 +90,11 @@ extern const char gfar_driver_version[];
|
|||
#define DEFAULT_RX_LFC_THR 16
|
||||
#define DEFAULT_LFC_PTVVAL 4
|
||||
|
||||
/* prevent fragmenation by HW in DSA environments */
|
||||
#define GFAR_RXB_SIZE roundup(1536 + 8, 64)
|
||||
#define GFAR_SKBFRAG_SIZE (RXBUF_ALIGNMENT + GFAR_RXB_SIZE \
|
||||
+ SKB_DATA_ALIGN(sizeof(struct skb_shared_info)))
|
||||
#define GFAR_RXB_TRUESIZE 2048
|
||||
#define GFAR_SKBFRAG_OVR (RXBUF_ALIGNMENT \
|
||||
+ SKB_DATA_ALIGN(sizeof(struct skb_shared_info)))
|
||||
#define GFAR_RXB_SIZE rounddown(GFAR_RXB_TRUESIZE - GFAR_SKBFRAG_OVR, 64)
|
||||
#define GFAR_SKBFRAG_SIZE (GFAR_RXB_SIZE + GFAR_SKBFRAG_OVR)
|
||||
|
||||
#define TX_RING_MOD_MASK(size) (size-1)
|
||||
#define RX_RING_MOD_MASK(size) (size-1)
|
||||
|
|
Loading…
Reference in New Issue