[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20130925231828.26184.18736.stgit@srivatsabhat.in.ibm.com>
Date: Thu, 26 Sep 2013 04:48:29 +0530
From: "Srivatsa S. Bhat" <srivatsa.bhat@...ux.vnet.ibm.com>
To: akpm@...ux-foundation.org, mgorman@...e.de, dave@...1.net,
hannes@...xchg.org, tony.luck@...el.com,
matthew.garrett@...ula.com, riel@...hat.com, arjan@...ux.intel.com,
srinivas.pandruvada@...ux.intel.com, willy@...ux.intel.com,
kamezawa.hiroyu@...fujitsu.com, lenb@...nel.org, rjw@...k.pl
Cc: gargankita@...il.com, paulmck@...ux.vnet.ibm.com,
svaidy@...ux.vnet.ibm.com, andi@...stfloor.org,
isimatu.yasuaki@...fujitsu.com, santosh.shilimkar@...com,
kosaki.motohiro@...il.com, srivatsa.bhat@...ux.vnet.ibm.com,
linux-pm@...r.kernel.org, linux-mm@...ck.org,
linux-kernel@...r.kernel.org
Subject: [RFC PATCH v4 20/40] mm: Provide a mechanism to request free memory
from the region allocator
Implement helper functions to request freepages from the region allocator
in order to add them to the buddy freelists.
For simplicity, all operations related to the region allocator are performed
at the granularity of entire memory regions. That is, when the buddy
allocator requests freepages from the region allocator, the latter picks a
free region and always allocates all the freepages belonging to that entire
region.
Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@...ux.vnet.ibm.com>
---
mm/page_alloc.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index c727bba..d71d671 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -939,6 +939,29 @@ static void add_to_region_allocator(struct zone *z, struct free_list *free_list,
del_from_freelist_bulk(ralloc_list, free_list, order, region_id);
}
+/* Delete freepages from the region allocator and add them to buddy freelists */
+static int del_from_region_allocator(struct zone *zone, unsigned int order,
+ int migratetype)
+{
+ struct region_allocator *reg_alloc;
+ struct list_head *ralloc_list;
+ struct free_list *free_list;
+ int next_region;
+
+ reg_alloc = &zone->region_allocator;
+
+ next_region = reg_alloc->next_region;
+ if (next_region < 0)
+ return -ENOMEM;
+
+ ralloc_list = ®_alloc->region[next_region].region_area[order].list;
+ free_list = &zone->free_area[order].free_list[migratetype];
+
+ add_to_freelist_bulk(ralloc_list, free_list, order, next_region);
+
+ return 0;
+}
+
/*
* Freeing function for a buddy system allocator.
*
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists