igb: only recycle page if it is on our numa node
authorAlexander Duyck <alexander.h.duyck@intel.com>
Thu, 12 Nov 2009 18:38:35 +0000 (18:38 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sat, 14 Nov 2009 04:46:53 +0000 (20:46 -0800)
This patch makes it so that we only recycle pages when they are from the
local NUMA node.  Non-local pages are freed and replaced with locally
allocated pages.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/igb/igb_main.c

index 9911b3aaed3ab492488599f656632bda05c7601f..0cab5e2b08947d7ffef057df9c0077cb6461cc54 100644 (file)
@@ -4952,6 +4952,7 @@ static bool igb_clean_rx_irq_adv(struct igb_q_vector *q_vector,
        struct sk_buff *skb;
        bool cleaned = false;
        int cleaned_count = 0;
+       int current_node = numa_node_id();
        unsigned int total_bytes = 0, total_packets = 0;
        unsigned int i;
        u32 staterr;
@@ -5006,7 +5007,8 @@ static bool igb_clean_rx_irq_adv(struct igb_q_vector *q_vector,
                                                buffer_info->page_offset,
                                                length);
 
-                       if (page_count(buffer_info->page) != 1)
+                       if ((page_count(buffer_info->page) != 1) ||
+                           (page_to_nid(buffer_info->page) != current_node))
                                buffer_info->page = NULL;
                        else
                                get_page(buffer_info->page);