Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
All three conflicts were cases of simple overlapping changes. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -2922,17 +2922,25 @@ static bool gfar_add_rx_frag(struct gfar_rx_buff *rxb, u32 lstatus,
|
||||
{
|
||||
unsigned int size = lstatus & BD_LENGTH_MASK;
|
||||
struct page *page = rxb->page;
|
||||
bool last = !!(lstatus & BD_LFLAG(RXBD_LAST));
|
||||
|
||||
/* Remove the FCS from the packet length */
|
||||
if (likely(lstatus & BD_LFLAG(RXBD_LAST)))
|
||||
if (last)
|
||||
size -= ETH_FCS_LEN;
|
||||
|
||||
if (likely(first))
|
||||
if (likely(first)) {
|
||||
skb_put(skb, size);
|
||||
else
|
||||
skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags, page,
|
||||
rxb->page_offset + RXBUF_ALIGNMENT,
|
||||
size, GFAR_RXB_TRUESIZE);
|
||||
} else {
|
||||
/* the last fragments' length contains the full frame length */
|
||||
if (last)
|
||||
size -= skb->len;
|
||||
|
||||
/* in case the last fragment consisted only of the FCS */
|
||||
if (size > 0)
|
||||
skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags, page,
|
||||
rxb->page_offset + RXBUF_ALIGNMENT,
|
||||
size, GFAR_RXB_TRUESIZE);
|
||||
}
|
||||
|
||||
/* try reuse page */
|
||||
if (unlikely(page_count(page) != 1))
|
||||
|
@@ -100,7 +100,8 @@ extern const char gfar_driver_version[];
|
||||
#define DEFAULT_RX_LFC_THR 16
|
||||
#define DEFAULT_LFC_PTVVAL 4
|
||||
|
||||
#define GFAR_RXB_SIZE 1536
|
||||
/* 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
|
||||
|
Reference in New Issue
Block a user