]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
e1000e: use GFP_KERNEL allocations at init time
authorJeff Kirsher <jeffrey.t.kirsher@intel.com>
Tue, 12 Jul 2011 16:10:12 +0000 (16:10 +0000)
committerJoe Jin <joe.jin@oracle.com>
Thu, 2 Feb 2012 13:19:00 +0000 (21:19 +0800)
In process and sleep allowed context, favor GFP_KERNEL allocations over
GFP_ATOMIC ones.

-v2: fixed checkpatch.pl warnings

CC: Eric Dumazet <eric.dumazet@gmail.com>
CC: Ben Greear <greearb@candelatech.com>
CC: Bruce Allan <bruce.w.allan@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit c2fed9965c60e1f989f57889357c557f7b907ab7)

Signed-off-by: Joe Jin <joe.jin@oracle.com>
drivers/net/e1000e/e1000.h
drivers/net/e1000e/netdev.c

index e9d6e0ada543fbda9baeef74816807749137cd87..638d175792cf368c71aa4a7c55563330734478e7 100644 (file)
@@ -334,7 +334,7 @@ struct e1000_adapter {
                          int *work_done, int work_to_do)
                                                ____cacheline_aligned_in_smp;
        void (*alloc_rx_buf) (struct e1000_adapter *adapter,
-                             int cleaned_count);
+                             int cleaned_count, gfp_t gfp);
        struct e1000_ring *rx_ring;
 
        u32 rx_int_delay;
index cd225168a66fdc32dde8e4cb27752e6c29f2d33c..a3417b7f65a424fe9cf8037a9af08b87bebeed44 100644 (file)
@@ -522,7 +522,7 @@ static void e1000_rx_checksum(struct e1000_adapter *adapter, u32 status_err,
  * @adapter: address of board private structure
  **/
 static void e1000_alloc_rx_buffers(struct e1000_adapter *adapter,
-                                  int cleaned_count)
+                                  int cleaned_count, gfp_t gfp)
 {
        struct net_device *netdev = adapter->netdev;
        struct pci_dev *pdev = adapter->pdev;
@@ -543,7 +543,7 @@ static void e1000_alloc_rx_buffers(struct e1000_adapter *adapter,
                        goto map_skb;
                }
 
-               skb = netdev_alloc_skb_ip_align(netdev, bufsz);
+               skb = __netdev_alloc_skb_ip_align(netdev, bufsz, gfp);
                if (!skb) {
                        /* Better luck next round */
                        adapter->alloc_rx_buff_failed++;
@@ -588,7 +588,7 @@ map_skb:
  * @adapter: address of board private structure
  **/
 static void e1000_alloc_rx_buffers_ps(struct e1000_adapter *adapter,
-                                     int cleaned_count)
+                                     int cleaned_count, gfp_t gfp)
 {
        struct net_device *netdev = adapter->netdev;
        struct pci_dev *pdev = adapter->pdev;
@@ -614,7 +614,7 @@ static void e1000_alloc_rx_buffers_ps(struct e1000_adapter *adapter,
                                continue;
                        }
                        if (!ps_page->page) {
-                               ps_page->page = alloc_page(GFP_ATOMIC);
+                               ps_page->page = alloc_page(gfp);
                                if (!ps_page->page) {
                                        adapter->alloc_rx_buff_failed++;
                                        goto no_buffers;
@@ -640,8 +640,9 @@ static void e1000_alloc_rx_buffers_ps(struct e1000_adapter *adapter,
                            cpu_to_le64(ps_page->dma);
                }
 
-               skb = netdev_alloc_skb_ip_align(netdev,
-                                               adapter->rx_ps_bsize0);
+               skb = __netdev_alloc_skb_ip_align(netdev,
+                                                 adapter->rx_ps_bsize0,
+                                                 gfp);
 
                if (!skb) {
                        adapter->alloc_rx_buff_failed++;
@@ -691,7 +692,7 @@ no_buffers:
  **/
 
 static void e1000_alloc_jumbo_rx_buffers(struct e1000_adapter *adapter,
-                                         int cleaned_count)
+                                        int cleaned_count, gfp_t gfp)
 {
        struct net_device *netdev = adapter->netdev;
        struct pci_dev *pdev = adapter->pdev;
@@ -712,7 +713,7 @@ static void e1000_alloc_jumbo_rx_buffers(struct e1000_adapter *adapter,
                        goto check_page;
                }
 
-               skb = netdev_alloc_skb_ip_align(netdev, bufsz);
+               skb = __netdev_alloc_skb_ip_align(netdev, bufsz, gfp);
                if (unlikely(!skb)) {
                        /* Better luck next round */
                        adapter->alloc_rx_buff_failed++;
@@ -723,7 +724,7 @@ static void e1000_alloc_jumbo_rx_buffers(struct e1000_adapter *adapter,
 check_page:
                /* allocate a new page if necessary */
                if (!buffer_info->page) {
-                       buffer_info->page = alloc_page(GFP_ATOMIC);
+                       buffer_info->page = alloc_page(gfp);
                        if (unlikely(!buffer_info->page)) {
                                adapter->alloc_rx_buff_failed++;
                                break;
@@ -887,7 +888,8 @@ next_desc:
 
                /* return some buffers to hardware, one at a time is too slow */
                if (cleaned_count >= E1000_RX_BUFFER_WRITE) {
-                       adapter->alloc_rx_buf(adapter, cleaned_count);
+                       adapter->alloc_rx_buf(adapter, cleaned_count,
+                                             GFP_ATOMIC);
                        cleaned_count = 0;
                }
 
@@ -899,7 +901,7 @@ next_desc:
 
        cleaned_count = e1000_desc_unused(rx_ring);
        if (cleaned_count)
-               adapter->alloc_rx_buf(adapter, cleaned_count);
+               adapter->alloc_rx_buf(adapter, cleaned_count, GFP_ATOMIC);
 
        adapter->total_rx_bytes += total_rx_bytes;
        adapter->total_rx_packets += total_rx_packets;
@@ -1229,7 +1231,8 @@ next_desc:
 
                /* return some buffers to hardware, one at a time is too slow */
                if (cleaned_count >= E1000_RX_BUFFER_WRITE) {
-                       adapter->alloc_rx_buf(adapter, cleaned_count);
+                       adapter->alloc_rx_buf(adapter, cleaned_count,
+                                             GFP_ATOMIC);
                        cleaned_count = 0;
                }
 
@@ -1243,7 +1246,7 @@ next_desc:
 
        cleaned_count = e1000_desc_unused(rx_ring);
        if (cleaned_count)
-               adapter->alloc_rx_buf(adapter, cleaned_count);
+               adapter->alloc_rx_buf(adapter, cleaned_count, GFP_ATOMIC);
 
        adapter->total_rx_bytes += total_rx_bytes;
        adapter->total_rx_packets += total_rx_packets;
@@ -1410,7 +1413,8 @@ next_desc:
 
                /* return some buffers to hardware, one at a time is too slow */
                if (unlikely(cleaned_count >= E1000_RX_BUFFER_WRITE)) {
-                       adapter->alloc_rx_buf(adapter, cleaned_count);
+                       adapter->alloc_rx_buf(adapter, cleaned_count,
+                                             GFP_ATOMIC);
                        cleaned_count = 0;
                }
 
@@ -1422,7 +1426,7 @@ next_desc:
 
        cleaned_count = e1000_desc_unused(rx_ring);
        if (cleaned_count)
-               adapter->alloc_rx_buf(adapter, cleaned_count);
+               adapter->alloc_rx_buf(adapter, cleaned_count, GFP_ATOMIC);
 
        adapter->total_rx_bytes += total_rx_bytes;
        adapter->total_rx_packets += total_rx_packets;
@@ -3104,7 +3108,8 @@ static void e1000_configure(struct e1000_adapter *adapter)
        e1000_configure_tx(adapter);
        e1000_setup_rctl(adapter);
        e1000_configure_rx(adapter);
-       adapter->alloc_rx_buf(adapter, e1000_desc_unused(adapter->rx_ring));
+       adapter->alloc_rx_buf(adapter, e1000_desc_unused(adapter->rx_ring),
+                             GFP_KERNEL);
 }
 
 /**