diff options
Diffstat (limited to 'drivers/net/ethernet/freescale')
-rw-r--r-- | drivers/net/ethernet/freescale/gianfar.c | 27 | ||||
-rw-r--r-- | drivers/net/ethernet/freescale/gianfar.h | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/freescale/gianfar_ptp.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/freescale/ucc_geth.c | 29 | ||||
-rw-r--r-- | drivers/net/ethernet/freescale/ucc_geth.h | 2 |
5 files changed, 11 insertions, 51 deletions
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c index a1b52ec3b930..1d03dcdd5e56 100644 --- a/drivers/net/ethernet/freescale/gianfar.c +++ b/drivers/net/ethernet/freescale/gianfar.c | |||
@@ -1765,7 +1765,6 @@ static void free_skb_resources(struct gfar_private *priv) | |||
1765 | sizeof(struct rxbd8) * priv->total_rx_ring_size, | 1765 | sizeof(struct rxbd8) * priv->total_rx_ring_size, |
1766 | priv->tx_queue[0]->tx_bd_base, | 1766 | priv->tx_queue[0]->tx_bd_base, |
1767 | priv->tx_queue[0]->tx_bd_dma_base); | 1767 | priv->tx_queue[0]->tx_bd_dma_base); |
1768 | skb_queue_purge(&priv->rx_recycle); | ||
1769 | } | 1768 | } |
1770 | 1769 | ||
1771 | void gfar_start(struct net_device *dev) | 1770 | void gfar_start(struct net_device *dev) |
@@ -1943,8 +1942,6 @@ static int gfar_enet_open(struct net_device *dev) | |||
1943 | 1942 | ||
1944 | enable_napi(priv); | 1943 | enable_napi(priv); |
1945 | 1944 | ||
1946 | skb_queue_head_init(&priv->rx_recycle); | ||
1947 | |||
1948 | /* Initialize a bunch of registers */ | 1945 | /* Initialize a bunch of registers */ |
1949 | init_registers(dev); | 1946 | init_registers(dev); |
1950 | 1947 | ||
@@ -2533,16 +2530,7 @@ static int gfar_clean_tx_ring(struct gfar_priv_tx_q *tx_queue) | |||
2533 | 2530 | ||
2534 | bytes_sent += skb->len; | 2531 | bytes_sent += skb->len; |
2535 | 2532 | ||
2536 | /* If there's room in the queue (limit it to rx_buffer_size) | 2533 | dev_kfree_skb_any(skb); |
2537 | * we add this skb back into the pool, if it's the right size | ||
2538 | */ | ||
2539 | if (skb_queue_len(&priv->rx_recycle) < rx_queue->rx_ring_size && | ||
2540 | skb_recycle_check(skb, priv->rx_buffer_size + | ||
2541 | RXBUF_ALIGNMENT)) { | ||
2542 | gfar_align_skb(skb); | ||
2543 | skb_queue_head(&priv->rx_recycle, skb); | ||
2544 | } else | ||
2545 | dev_kfree_skb_any(skb); | ||
2546 | 2534 | ||
2547 | tx_queue->tx_skbuff[skb_dirtytx] = NULL; | 2535 | tx_queue->tx_skbuff[skb_dirtytx] = NULL; |
2548 | 2536 | ||
@@ -2608,7 +2596,7 @@ static void gfar_new_rxbdp(struct gfar_priv_rx_q *rx_queue, struct rxbd8 *bdp, | |||
2608 | static struct sk_buff *gfar_alloc_skb(struct net_device *dev) | 2596 | static struct sk_buff *gfar_alloc_skb(struct net_device *dev) |
2609 | { | 2597 | { |
2610 | struct gfar_private *priv = netdev_priv(dev); | 2598 | struct gfar_private *priv = netdev_priv(dev); |
2611 | struct sk_buff *skb = NULL; | 2599 | struct sk_buff *skb; |
2612 | 2600 | ||
2613 | skb = netdev_alloc_skb(dev, priv->rx_buffer_size + RXBUF_ALIGNMENT); | 2601 | skb = netdev_alloc_skb(dev, priv->rx_buffer_size + RXBUF_ALIGNMENT); |
2614 | if (!skb) | 2602 | if (!skb) |
@@ -2621,14 +2609,7 @@ static struct sk_buff *gfar_alloc_skb(struct net_device *dev) | |||
2621 | 2609 | ||
2622 | struct sk_buff *gfar_new_skb(struct net_device *dev) | 2610 | struct sk_buff *gfar_new_skb(struct net_device *dev) |
2623 | { | 2611 | { |
2624 | struct gfar_private *priv = netdev_priv(dev); | 2612 | return gfar_alloc_skb(dev); |
2625 | struct sk_buff *skb = NULL; | ||
2626 | |||
2627 | skb = skb_dequeue(&priv->rx_recycle); | ||
2628 | if (!skb) | ||
2629 | skb = gfar_alloc_skb(dev); | ||
2630 | |||
2631 | return skb; | ||
2632 | } | 2613 | } |
2633 | 2614 | ||
2634 | static inline void count_errors(unsigned short status, struct net_device *dev) | 2615 | static inline void count_errors(unsigned short status, struct net_device *dev) |
@@ -2787,7 +2768,7 @@ int gfar_clean_rx_ring(struct gfar_priv_rx_q *rx_queue, int rx_work_limit) | |||
2787 | if (unlikely(!newskb)) | 2768 | if (unlikely(!newskb)) |
2788 | newskb = skb; | 2769 | newskb = skb; |
2789 | else if (skb) | 2770 | else if (skb) |
2790 | skb_queue_head(&priv->rx_recycle, skb); | 2771 | dev_kfree_skb(skb); |
2791 | } else { | 2772 | } else { |
2792 | /* Increment the number of packets */ | 2773 | /* Increment the number of packets */ |
2793 | rx_queue->stats.rx_packets++; | 2774 | rx_queue->stats.rx_packets++; |
diff --git a/drivers/net/ethernet/freescale/gianfar.h b/drivers/net/ethernet/freescale/gianfar.h index 4141ef2ddafc..22eabc13ca99 100644 --- a/drivers/net/ethernet/freescale/gianfar.h +++ b/drivers/net/ethernet/freescale/gianfar.h | |||
@@ -1080,8 +1080,6 @@ struct gfar_private { | |||
1080 | 1080 | ||
1081 | u32 cur_filer_idx; | 1081 | u32 cur_filer_idx; |
1082 | 1082 | ||
1083 | struct sk_buff_head rx_recycle; | ||
1084 | |||
1085 | /* RX queue filer rule set*/ | 1083 | /* RX queue filer rule set*/ |
1086 | struct ethtool_rx_list rx_list; | 1084 | struct ethtool_rx_list rx_list; |
1087 | struct mutex rx_queue_access; | 1085 | struct mutex rx_queue_access; |
diff --git a/drivers/net/ethernet/freescale/gianfar_ptp.c b/drivers/net/ethernet/freescale/gianfar_ptp.c index b9db0e040563..2e5daee0438a 100644 --- a/drivers/net/ethernet/freescale/gianfar_ptp.c +++ b/drivers/net/ethernet/freescale/gianfar_ptp.c | |||
@@ -478,7 +478,7 @@ static int gianfar_ptp_probe(struct platform_device *dev) | |||
478 | pr_err("no resource\n"); | 478 | pr_err("no resource\n"); |
479 | goto no_resource; | 479 | goto no_resource; |
480 | } | 480 | } |
481 | if (request_resource(&ioport_resource, etsects->rsrc)) { | 481 | if (request_resource(&iomem_resource, etsects->rsrc)) { |
482 | pr_err("resource busy\n"); | 482 | pr_err("resource busy\n"); |
483 | goto no_resource; | 483 | goto no_resource; |
484 | } | 484 | } |
diff --git a/drivers/net/ethernet/freescale/ucc_geth.c b/drivers/net/ethernet/freescale/ucc_geth.c index 164288439220..0a70bb55d1b0 100644 --- a/drivers/net/ethernet/freescale/ucc_geth.c +++ b/drivers/net/ethernet/freescale/ucc_geth.c | |||
@@ -209,14 +209,12 @@ static struct list_head *dequeue(struct list_head *lh) | |||
209 | static struct sk_buff *get_new_skb(struct ucc_geth_private *ugeth, | 209 | static struct sk_buff *get_new_skb(struct ucc_geth_private *ugeth, |
210 | u8 __iomem *bd) | 210 | u8 __iomem *bd) |
211 | { | 211 | { |
212 | struct sk_buff *skb = NULL; | 212 | struct sk_buff *skb; |
213 | 213 | ||
214 | skb = __skb_dequeue(&ugeth->rx_recycle); | 214 | skb = netdev_alloc_skb(ugeth->ndev, |
215 | ugeth->ug_info->uf_info.max_rx_buf_length + | ||
216 | UCC_GETH_RX_DATA_BUF_ALIGNMENT); | ||
215 | if (!skb) | 217 | if (!skb) |
216 | skb = netdev_alloc_skb(ugeth->ndev, | ||
217 | ugeth->ug_info->uf_info.max_rx_buf_length + | ||
218 | UCC_GETH_RX_DATA_BUF_ALIGNMENT); | ||
219 | if (skb == NULL) | ||
220 | return NULL; | 218 | return NULL; |
221 | 219 | ||
222 | /* We need the data buffer to be aligned properly. We will reserve | 220 | /* We need the data buffer to be aligned properly. We will reserve |
@@ -2020,8 +2018,6 @@ static void ucc_geth_memclean(struct ucc_geth_private *ugeth) | |||
2020 | iounmap(ugeth->ug_regs); | 2018 | iounmap(ugeth->ug_regs); |
2021 | ugeth->ug_regs = NULL; | 2019 | ugeth->ug_regs = NULL; |
2022 | } | 2020 | } |
2023 | |||
2024 | skb_queue_purge(&ugeth->rx_recycle); | ||
2025 | } | 2021 | } |
2026 | 2022 | ||
2027 | static void ucc_geth_set_multi(struct net_device *dev) | 2023 | static void ucc_geth_set_multi(struct net_device *dev) |
@@ -2230,8 +2226,6 @@ static int ucc_struct_init(struct ucc_geth_private *ugeth) | |||
2230 | return -ENOMEM; | 2226 | return -ENOMEM; |
2231 | } | 2227 | } |
2232 | 2228 | ||
2233 | skb_queue_head_init(&ugeth->rx_recycle); | ||
2234 | |||
2235 | return 0; | 2229 | return 0; |
2236 | } | 2230 | } |
2237 | 2231 | ||
@@ -3274,12 +3268,7 @@ static int ucc_geth_rx(struct ucc_geth_private *ugeth, u8 rxQ, int rx_work_limit | |||
3274 | if (netif_msg_rx_err(ugeth)) | 3268 | if (netif_msg_rx_err(ugeth)) |
3275 | ugeth_err("%s, %d: ERROR!!! skb - 0x%08x", | 3269 | ugeth_err("%s, %d: ERROR!!! skb - 0x%08x", |
3276 | __func__, __LINE__, (u32) skb); | 3270 | __func__, __LINE__, (u32) skb); |
3277 | if (skb) { | 3271 | dev_kfree_skb(skb); |
3278 | skb->data = skb->head + NET_SKB_PAD; | ||
3279 | skb->len = 0; | ||
3280 | skb_reset_tail_pointer(skb); | ||
3281 | __skb_queue_head(&ugeth->rx_recycle, skb); | ||
3282 | } | ||
3283 | 3272 | ||
3284 | ugeth->rx_skbuff[rxQ][ugeth->skb_currx[rxQ]] = NULL; | 3273 | ugeth->rx_skbuff[rxQ][ugeth->skb_currx[rxQ]] = NULL; |
3285 | dev->stats.rx_dropped++; | 3274 | dev->stats.rx_dropped++; |
@@ -3349,13 +3338,7 @@ static int ucc_geth_tx(struct net_device *dev, u8 txQ) | |||
3349 | 3338 | ||
3350 | dev->stats.tx_packets++; | 3339 | dev->stats.tx_packets++; |
3351 | 3340 | ||
3352 | if (skb_queue_len(&ugeth->rx_recycle) < RX_BD_RING_LEN && | 3341 | dev_kfree_skb(skb); |
3353 | skb_recycle_check(skb, | ||
3354 | ugeth->ug_info->uf_info.max_rx_buf_length + | ||
3355 | UCC_GETH_RX_DATA_BUF_ALIGNMENT)) | ||
3356 | __skb_queue_head(&ugeth->rx_recycle, skb); | ||
3357 | else | ||
3358 | dev_kfree_skb(skb); | ||
3359 | 3342 | ||
3360 | ugeth->tx_skbuff[txQ][ugeth->skb_dirtytx[txQ]] = NULL; | 3343 | ugeth->tx_skbuff[txQ][ugeth->skb_dirtytx[txQ]] = NULL; |
3361 | ugeth->skb_dirtytx[txQ] = | 3344 | ugeth->skb_dirtytx[txQ] = |
diff --git a/drivers/net/ethernet/freescale/ucc_geth.h b/drivers/net/ethernet/freescale/ucc_geth.h index f71b3e7b12de..75f337163ce3 100644 --- a/drivers/net/ethernet/freescale/ucc_geth.h +++ b/drivers/net/ethernet/freescale/ucc_geth.h | |||
@@ -1214,8 +1214,6 @@ struct ucc_geth_private { | |||
1214 | /* index of the first skb which hasn't been transmitted yet. */ | 1214 | /* index of the first skb which hasn't been transmitted yet. */ |
1215 | u16 skb_dirtytx[NUM_TX_QUEUES]; | 1215 | u16 skb_dirtytx[NUM_TX_QUEUES]; |
1216 | 1216 | ||
1217 | struct sk_buff_head rx_recycle; | ||
1218 | |||
1219 | struct ugeth_mii_info *mii_info; | 1217 | struct ugeth_mii_info *mii_info; |
1220 | struct phy_device *phydev; | 1218 | struct phy_device *phydev; |
1221 | phy_interface_t phy_interface; | 1219 | phy_interface_t phy_interface; |