aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Dumazet <eric.dumazet@gmail.com>2011-11-22 05:57:41 -0500
committerDavid S. Miller <davem@davemloft.net>2011-11-22 16:43:32 -0500
commit1f2149c1df50c8c712950872675f46e6e44629f0 (patch)
treea33a556696e27611b6b38cdcbb6de9315f483bd4
parent84b405011166e663fe9ef56c29b1d76f59b35568 (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.c6
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4vf/sge.c5
-rw-r--r--drivers/net/ethernet/intel/igb/igb_main.c2
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_main.c2
-rw-r--r--drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c2
-rw-r--r--drivers/net/usb/cdc-phonet.c10
-rw-r--r--drivers/usb/gadget/f_phonet.c11
-rw-r--r--include/linux/skbuff.h32
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
654alloc_small_pages: 654alloc_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++;
209resubmit: 209resubmit:
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
216static int usbpn_close(struct net_device *dev); 216static 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)
298static int 298static int
299pn_rx_submit(struct f_phonet *fp, struct usb_request *req, gfp_t gfp_flags) 299pn_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 */
1680static 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 */
1693static inline struct page *netdev_alloc_page(struct net_device *dev)
1694{
1695 return __netdev_alloc_page(dev, GFP_ATOMIC);
1696}
1697
1698static 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 *