diff options
author | Eric Dumazet <eric.dumazet@gmail.com> | 2011-11-22 05:57:41 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-11-22 16:43:32 -0500 |
commit | 1f2149c1df50c8c712950872675f46e6e44629f0 (patch) | |
tree | a33a556696e27611b6b38cdcbb6de9315f483bd4 | |
parent | 84b405011166e663fe9ef56c29b1d76f59b35568 (diff) |
net: remove netdev_alloc_page and use __GFP_COLD
Given we dont use anymore the struct net_device *dev argument, and this
interface brings litle benefit, remove netdev_{alloc|free}_page(), to
debloat include/linux/skbuff.h a bit.
(Some drivers used a mix of these interfaces and alloc_pages())
When allocating a page given to device for DMA transfer (device to
memory), it makes sense to use a cold one (__GFP_COLD)
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
CC: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
CC: Dimitris Michailidis <dm@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/sge.c | 6 | ||||
-rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4vf/sge.c | 5 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/igb/igb_main.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 2 | ||||
-rw-r--r-- | drivers/net/usb/cdc-phonet.c | 10 | ||||
-rw-r--r-- | drivers/usb/gadget/f_phonet.c | 11 | ||||
-rw-r--r-- | include/linux/skbuff.h | 32 |
8 files changed, 18 insertions, 52 deletions
diff --git a/drivers/net/ethernet/chelsio/cxgb4/sge.c b/drivers/net/ethernet/chelsio/cxgb4/sge.c index 140254c7cba9..2dae7959f000 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/sge.c +++ b/drivers/net/ethernet/chelsio/cxgb4/sge.c | |||
@@ -491,7 +491,7 @@ static unsigned int refill_fl(struct adapter *adap, struct sge_fl *q, int n, | |||
491 | __be64 *d = &q->desc[q->pidx]; | 491 | __be64 *d = &q->desc[q->pidx]; |
492 | struct rx_sw_desc *sd = &q->sdesc[q->pidx]; | 492 | struct rx_sw_desc *sd = &q->sdesc[q->pidx]; |
493 | 493 | ||
494 | gfp |= __GFP_NOWARN; /* failures are expected */ | 494 | gfp |= __GFP_NOWARN | __GFP_COLD; |
495 | 495 | ||
496 | #if FL_PG_ORDER > 0 | 496 | #if FL_PG_ORDER > 0 |
497 | /* | 497 | /* |
@@ -528,7 +528,7 @@ static unsigned int refill_fl(struct adapter *adap, struct sge_fl *q, int n, | |||
528 | #endif | 528 | #endif |
529 | 529 | ||
530 | while (n--) { | 530 | while (n--) { |
531 | pg = __netdev_alloc_page(adap->port[0], gfp); | 531 | pg = alloc_page(gfp); |
532 | if (unlikely(!pg)) { | 532 | if (unlikely(!pg)) { |
533 | q->alloc_failed++; | 533 | q->alloc_failed++; |
534 | break; | 534 | break; |
@@ -537,7 +537,7 @@ static unsigned int refill_fl(struct adapter *adap, struct sge_fl *q, int n, | |||
537 | mapping = dma_map_page(adap->pdev_dev, pg, 0, PAGE_SIZE, | 537 | mapping = dma_map_page(adap->pdev_dev, pg, 0, PAGE_SIZE, |
538 | PCI_DMA_FROMDEVICE); | 538 | PCI_DMA_FROMDEVICE); |
539 | if (unlikely(dma_mapping_error(adap->pdev_dev, mapping))) { | 539 | if (unlikely(dma_mapping_error(adap->pdev_dev, mapping))) { |
540 | netdev_free_page(adap->port[0], pg); | 540 | put_page(pg); |
541 | goto out; | 541 | goto out; |
542 | } | 542 | } |
543 | *d++ = cpu_to_be64(mapping); | 543 | *d++ = cpu_to_be64(mapping); |
diff --git a/drivers/net/ethernet/chelsio/cxgb4vf/sge.c b/drivers/net/ethernet/chelsio/cxgb4vf/sge.c index 8d5d55ad102d..c381db23e713 100644 --- a/drivers/net/ethernet/chelsio/cxgb4vf/sge.c +++ b/drivers/net/ethernet/chelsio/cxgb4vf/sge.c | |||
@@ -653,8 +653,7 @@ static unsigned int refill_fl(struct adapter *adapter, struct sge_fl *fl, | |||
653 | 653 | ||
654 | alloc_small_pages: | 654 | alloc_small_pages: |
655 | while (n--) { | 655 | while (n--) { |
656 | page = __netdev_alloc_page(adapter->port[0], | 656 | page = alloc_page(gfp | __GFP_NOWARN | __GFP_COLD); |
657 | gfp | __GFP_NOWARN); | ||
658 | if (unlikely(!page)) { | 657 | if (unlikely(!page)) { |
659 | fl->alloc_failed++; | 658 | fl->alloc_failed++; |
660 | break; | 659 | break; |
@@ -664,7 +663,7 @@ alloc_small_pages: | |||
664 | dma_addr = dma_map_page(adapter->pdev_dev, page, 0, PAGE_SIZE, | 663 | dma_addr = dma_map_page(adapter->pdev_dev, page, 0, PAGE_SIZE, |
665 | PCI_DMA_FROMDEVICE); | 664 | PCI_DMA_FROMDEVICE); |
666 | if (unlikely(dma_mapping_error(adapter->pdev_dev, dma_addr))) { | 665 | if (unlikely(dma_mapping_error(adapter->pdev_dev, dma_addr))) { |
667 | netdev_free_page(adapter->port[0], page); | 666 | put_page(page); |
668 | break; | 667 | break; |
669 | } | 668 | } |
670 | *d++ = cpu_to_be64(dma_addr); | 669 | *d++ = cpu_to_be64(dma_addr); |
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index bd9b30e6ae9d..b66b8aa751e7 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c | |||
@@ -6135,7 +6135,7 @@ static bool igb_alloc_mapped_page(struct igb_ring *rx_ring, | |||
6135 | return true; | 6135 | return true; |
6136 | 6136 | ||
6137 | if (!page) { | 6137 | if (!page) { |
6138 | page = netdev_alloc_page(rx_ring->netdev); | 6138 | page = alloc_page(GFP_ATOMIC | __GFP_COLD); |
6139 | bi->page = page; | 6139 | bi->page = page; |
6140 | if (unlikely(!page)) { | 6140 | if (unlikely(!page)) { |
6141 | rx_ring->rx_stats.alloc_failed++; | 6141 | rx_ring->rx_stats.alloc_failed++; |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index 820fc040c241..1b28ed9d8cc1 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | |||
@@ -1140,7 +1140,7 @@ void ixgbe_alloc_rx_buffers(struct ixgbe_ring *rx_ring, u16 cleaned_count) | |||
1140 | 1140 | ||
1141 | if (ring_is_ps_enabled(rx_ring)) { | 1141 | if (ring_is_ps_enabled(rx_ring)) { |
1142 | if (!bi->page) { | 1142 | if (!bi->page) { |
1143 | bi->page = netdev_alloc_page(rx_ring->netdev); | 1143 | bi->page = alloc_page(GFP_ATOMIC | __GFP_COLD); |
1144 | if (!bi->page) { | 1144 | if (!bi->page) { |
1145 | rx_ring->rx_stats.alloc_rx_page_failed++; | 1145 | rx_ring->rx_stats.alloc_rx_page_failed++; |
1146 | goto no_buffers; | 1146 | goto no_buffers; |
diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c index 0c39bb1ac3bb..5d1a64398169 100644 --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | |||
@@ -366,7 +366,7 @@ static void ixgbevf_alloc_rx_buffers(struct ixgbevf_adapter *adapter, | |||
366 | if (!bi->page_dma && | 366 | if (!bi->page_dma && |
367 | (adapter->flags & IXGBE_FLAG_RX_PS_ENABLED)) { | 367 | (adapter->flags & IXGBE_FLAG_RX_PS_ENABLED)) { |
368 | if (!bi->page) { | 368 | if (!bi->page) { |
369 | bi->page = netdev_alloc_page(adapter->netdev); | 369 | bi->page = alloc_page(GFP_ATOMIC | __GFP_COLD); |
370 | if (!bi->page) { | 370 | if (!bi->page) { |
371 | adapter->alloc_rx_page_failed++; | 371 | adapter->alloc_rx_page_failed++; |
372 | goto no_buffers; | 372 | goto no_buffers; |
diff --git a/drivers/net/usb/cdc-phonet.c b/drivers/net/usb/cdc-phonet.c index a60d0069cc45..331e44056f5a 100644 --- a/drivers/net/usb/cdc-phonet.c +++ b/drivers/net/usb/cdc-phonet.c | |||
@@ -130,7 +130,7 @@ static int rx_submit(struct usbpn_dev *pnd, struct urb *req, gfp_t gfp_flags) | |||
130 | struct page *page; | 130 | struct page *page; |
131 | int err; | 131 | int err; |
132 | 132 | ||
133 | page = __netdev_alloc_page(dev, gfp_flags); | 133 | page = alloc_page(gfp_flags); |
134 | if (!page) | 134 | if (!page) |
135 | return -ENOMEM; | 135 | return -ENOMEM; |
136 | 136 | ||
@@ -140,7 +140,7 @@ static int rx_submit(struct usbpn_dev *pnd, struct urb *req, gfp_t gfp_flags) | |||
140 | err = usb_submit_urb(req, gfp_flags); | 140 | err = usb_submit_urb(req, gfp_flags); |
141 | if (unlikely(err)) { | 141 | if (unlikely(err)) { |
142 | dev_dbg(&dev->dev, "RX submit error (%d)\n", err); | 142 | dev_dbg(&dev->dev, "RX submit error (%d)\n", err); |
143 | netdev_free_page(dev, page); | 143 | put_page(page); |
144 | } | 144 | } |
145 | return err; | 145 | return err; |
146 | } | 146 | } |
@@ -208,9 +208,9 @@ static void rx_complete(struct urb *req) | |||
208 | dev->stats.rx_errors++; | 208 | dev->stats.rx_errors++; |
209 | resubmit: | 209 | resubmit: |
210 | if (page) | 210 | if (page) |
211 | netdev_free_page(dev, page); | 211 | put_page(page); |
212 | if (req) | 212 | if (req) |
213 | rx_submit(pnd, req, GFP_ATOMIC); | 213 | rx_submit(pnd, req, GFP_ATOMIC | __GFP_COLD); |
214 | } | 214 | } |
215 | 215 | ||
216 | static int usbpn_close(struct net_device *dev); | 216 | static int usbpn_close(struct net_device *dev); |
@@ -229,7 +229,7 @@ static int usbpn_open(struct net_device *dev) | |||
229 | for (i = 0; i < rxq_size; i++) { | 229 | for (i = 0; i < rxq_size; i++) { |
230 | struct urb *req = usb_alloc_urb(0, GFP_KERNEL); | 230 | struct urb *req = usb_alloc_urb(0, GFP_KERNEL); |
231 | 231 | ||
232 | if (!req || rx_submit(pnd, req, GFP_KERNEL)) { | 232 | if (!req || rx_submit(pnd, req, GFP_KERNEL | __GFP_COLD)) { |
233 | usbpn_close(dev); | 233 | usbpn_close(dev); |
234 | return -ENOMEM; | 234 | return -ENOMEM; |
235 | } | 235 | } |
diff --git a/drivers/usb/gadget/f_phonet.c b/drivers/usb/gadget/f_phonet.c index 16a509ae517b..7cdcb63b21ff 100644 --- a/drivers/usb/gadget/f_phonet.c +++ b/drivers/usb/gadget/f_phonet.c | |||
@@ -298,11 +298,10 @@ static void pn_net_setup(struct net_device *dev) | |||
298 | static int | 298 | static int |
299 | pn_rx_submit(struct f_phonet *fp, struct usb_request *req, gfp_t gfp_flags) | 299 | pn_rx_submit(struct f_phonet *fp, struct usb_request *req, gfp_t gfp_flags) |
300 | { | 300 | { |
301 | struct net_device *dev = fp->dev; | ||
302 | struct page *page; | 301 | struct page *page; |
303 | int err; | 302 | int err; |
304 | 303 | ||
305 | page = __netdev_alloc_page(dev, gfp_flags); | 304 | page = alloc_page(gfp_flags); |
306 | if (!page) | 305 | if (!page) |
307 | return -ENOMEM; | 306 | return -ENOMEM; |
308 | 307 | ||
@@ -312,7 +311,7 @@ pn_rx_submit(struct f_phonet *fp, struct usb_request *req, gfp_t gfp_flags) | |||
312 | 311 | ||
313 | err = usb_ep_queue(fp->out_ep, req, gfp_flags); | 312 | err = usb_ep_queue(fp->out_ep, req, gfp_flags); |
314 | if (unlikely(err)) | 313 | if (unlikely(err)) |
315 | netdev_free_page(dev, page); | 314 | put_page(page); |
316 | return err; | 315 | return err; |
317 | } | 316 | } |
318 | 317 | ||
@@ -374,9 +373,9 @@ static void pn_rx_complete(struct usb_ep *ep, struct usb_request *req) | |||
374 | } | 373 | } |
375 | 374 | ||
376 | if (page) | 375 | if (page) |
377 | netdev_free_page(dev, page); | 376 | put_page(page); |
378 | if (req) | 377 | if (req) |
379 | pn_rx_submit(fp, req, GFP_ATOMIC); | 378 | pn_rx_submit(fp, req, GFP_ATOMIC | __GFP_COLD); |
380 | } | 379 | } |
381 | 380 | ||
382 | /*-------------------------------------------------------------------------*/ | 381 | /*-------------------------------------------------------------------------*/ |
@@ -436,7 +435,7 @@ static int pn_set_alt(struct usb_function *f, unsigned intf, unsigned alt) | |||
436 | 435 | ||
437 | netif_carrier_on(dev); | 436 | netif_carrier_on(dev); |
438 | for (i = 0; i < phonet_rxq_size; i++) | 437 | for (i = 0; i < phonet_rxq_size; i++) |
439 | pn_rx_submit(fp, fp->out_reqv[i], GFP_ATOMIC); | 438 | pn_rx_submit(fp, fp->out_reqv[i], GFP_ATOMIC | __GFP_COLD); |
440 | } | 439 | } |
441 | spin_unlock(&port->lock); | 440 | spin_unlock(&port->lock); |
442 | return 0; | 441 | return 0; |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 09b7ea566d66..cec0657d0d32 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -1669,38 +1669,6 @@ static inline struct sk_buff *netdev_alloc_skb_ip_align(struct net_device *dev, | |||
1669 | } | 1669 | } |
1670 | 1670 | ||
1671 | /** | 1671 | /** |
1672 | * __netdev_alloc_page - allocate a page for ps-rx on a specific device | ||
1673 | * @dev: network device to receive on | ||
1674 | * @gfp_mask: alloc_pages_node mask | ||
1675 | * | ||
1676 | * Allocate a new page. dev currently unused. | ||
1677 | * | ||
1678 | * %NULL is returned if there is no free memory. | ||
1679 | */ | ||
1680 | static inline struct page *__netdev_alloc_page(struct net_device *dev, gfp_t gfp_mask) | ||
1681 | { | ||
1682 | return alloc_pages_node(NUMA_NO_NODE, gfp_mask, 0); | ||
1683 | } | ||
1684 | |||
1685 | /** | ||
1686 | * netdev_alloc_page - allocate a page for ps-rx on a specific device | ||
1687 | * @dev: network device to receive on | ||
1688 | * | ||
1689 | * Allocate a new page. dev currently unused. | ||
1690 | * | ||
1691 | * %NULL is returned if there is no free memory. | ||
1692 | */ | ||
1693 | static inline struct page *netdev_alloc_page(struct net_device *dev) | ||
1694 | { | ||
1695 | return __netdev_alloc_page(dev, GFP_ATOMIC); | ||
1696 | } | ||
1697 | |||
1698 | static inline void netdev_free_page(struct net_device *dev, struct page *page) | ||
1699 | { | ||
1700 | __free_page(page); | ||
1701 | } | ||
1702 | |||
1703 | /** | ||
1704 | * skb_frag_page - retrieve the page refered to by a paged fragment | 1672 | * skb_frag_page - retrieve the page refered to by a paged fragment |
1705 | * @frag: the paged fragment | 1673 | * @frag: the paged fragment |
1706 | * | 1674 | * |