From c464cfada15550d43ed8f933fb806c0183f5fc88 Mon Sep 17 00:00:00 2001 From: Ben Menchaca Date: Wed, 24 Mar 2010 05:05:02 +0000 Subject: [PATCH] --- yaml --- r: 189164 b: refs/heads/master c: a6d36d5689b1806a3365c909192e9f03a43a632b h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/net/gianfar.c | 5 +++-- trunk/drivers/net/gianfar.h | 6 ++++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index b363f0ca10e1..24adce553f90 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: af06393bbde6e8d474622a0517cffc662676e3fe +refs/heads/master: a6d36d5689b1806a3365c909192e9f03a43a632b diff --git a/trunk/drivers/net/gianfar.c b/trunk/drivers/net/gianfar.c index b6715553cf17..669de028d44f 100644 --- a/trunk/drivers/net/gianfar.c +++ b/trunk/drivers/net/gianfar.c @@ -2393,6 +2393,7 @@ struct sk_buff * gfar_new_skb(struct net_device *dev) * as many bytes as needed to align the data properly */ skb_reserve(skb, alignamount); + GFAR_CB(skb)->alignamount = alignamount; return skb; } @@ -2533,13 +2534,13 @@ int gfar_clean_rx_ring(struct gfar_priv_rx_q *rx_queue, int rx_work_limit) newskb = skb; else if (skb) { /* - * We need to reset ->data to what it + * We need to un-reserve() the skb to what it * was before gfar_new_skb() re-aligned * it to an RXBUF_ALIGNMENT boundary * before we put the skb back on the * recycle list. */ - skb->data = skb->head + NET_SKB_PAD; + skb_reserve(skb, -GFAR_CB(skb)->alignamount); __skb_queue_head(&priv->rx_recycle, skb); } } else { diff --git a/trunk/drivers/net/gianfar.h b/trunk/drivers/net/gianfar.h index 3d72dc43dca5..17d25e714236 100644 --- a/trunk/drivers/net/gianfar.h +++ b/trunk/drivers/net/gianfar.h @@ -566,6 +566,12 @@ struct rxfcb { u16 vlctl; /* VLAN control word */ }; +struct gianfar_skb_cb { + int alignamount; +}; + +#define GFAR_CB(skb) ((struct gianfar_skb_cb *)((skb)->cb)) + struct rmon_mib { u32 tr64; /* 0x.680 - Transmit and Receive 64-byte Frame Counter */