From 646e84cc2c543d72fd584ea9544dbc28ba62977a Mon Sep 17 00:00:00 2001 From: Sonic Zhang Date: Mon, 10 May 2010 05:39:08 +0000 Subject: [PATCH] --- yaml --- r: 195151 b: refs/heads/master c: f6e1e4f3e511589dd0c47d42b870501659e7195f h: refs/heads/master i: 195149: e9cfb1f6ceb5ee1f5140be1a1d88e0c3c73816af 195147: f890f953abf4d68c6752b85dc08c43369dafe29f 195143: 8e43062ef964e9d0bdafddff69f04620e65beca8 195135: 2a1d4c3a66fcff28557323e19c30ec1ab86f9dd6 v: v3 --- [refs] | 2 +- trunk/drivers/net/bfin_mac.c | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 6a1c89e0291d..ea32b1384dfd 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ec497b32c311b1e1aac22a76d294d24285d06331 +refs/heads/master: f6e1e4f3e511589dd0c47d42b870501659e7195f diff --git a/trunk/drivers/net/bfin_mac.c b/trunk/drivers/net/bfin_mac.c index 16f2a37c733d..2b364ba6b62e 100644 --- a/trunk/drivers/net/bfin_mac.c +++ b/trunk/drivers/net/bfin_mac.c @@ -203,6 +203,11 @@ static int desc_list_init(void) goto init_error; } skb_reserve(new_skb, NET_IP_ALIGN); + /* Invidate the data cache of skb->data range when it is write back + * cache. It will prevent overwritting the new data from DMA + */ + blackfin_dcache_invalidate_range((unsigned long)new_skb->head, + (unsigned long)new_skb->end); r->skb = new_skb; /* @@ -1011,19 +1016,17 @@ static void bfin_mac_rx(struct net_device *dev) } /* reserve 2 bytes for RXDWA padding */ skb_reserve(new_skb, NET_IP_ALIGN); - current_rx_ptr->skb = new_skb; - current_rx_ptr->desc_a.start_addr = (unsigned long)new_skb->data - 2; - /* Invidate the data cache of skb->data range when it is write back * cache. It will prevent overwritting the new data from DMA */ blackfin_dcache_invalidate_range((unsigned long)new_skb->head, (unsigned long)new_skb->end); + current_rx_ptr->skb = new_skb; + current_rx_ptr->desc_a.start_addr = (unsigned long)new_skb->data - 2; + len = (unsigned short)((current_rx_ptr->status.status_word) & RX_FRLEN); skb_put(skb, len); - blackfin_dcache_invalidate_range((unsigned long)skb->head, - (unsigned long)skb->tail); skb->protocol = eth_type_trans(skb, dev);