lkml.org 
[lkml]   [2004]   [Apr]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
Subject[patch 3/6] memory hotplug for hugetlbpages
From
This is a part 3 of memory hotplug patches for hugetlbpages.

$Id: va-hugepagelist.patch,v 1.5 2004/03/30 06:14:28 iwamoto Exp $

--- linux-2.6.1.ORG2/arch/i386/mm/hugetlbpage.c Wed Mar 24 22:49:45 2032
+++ linux-2.6.1/arch/i386/mm/hugetlbpage.c Wed Mar 24 22:59:40 2032
@@ -25,8 +25,20 @@ int htlbpage_max;
static long htlbzone_pages;

static struct list_head hugepage_freelists[MAX_NUMNODES];
+static struct list_head hugepage_alllists[MAX_NUMNODES];
static spinlock_t htlbpage_lock = SPIN_LOCK_UNLOCKED;

+static void register_huge_page(struct page *page)
+{
+ list_add(&page[1].list,
+ &hugepage_alllists[page_zone(page)->zone_pgdat->node_id]);
+}
+
+static void unregister_huge_page(struct page *page)
+{
+ list_del(&page[1].list);
+}
+
static void enqueue_huge_page(struct page *page)
{
list_add(&page->list,
@@ -462,6 +474,7 @@ static int try_to_free_low(int count)
list_for_each(p, &hugepage_freelists[0]) {
if (map) {
list_del(&map->list);
+ unregister_huge_page(map);
update_and_free_page(map);
htlbpagemem--;
map = NULL;
@@ -474,6 +487,7 @@ static int try_to_free_low(int count)
}
if (map) {
list_del(&map->list);
+ unregister_huge_page(map);
update_and_free_page(map);
htlbpagemem--;
count++;
@@ -500,6 +514,7 @@ static int set_hugetlb_mem_size(int coun
if (page == NULL)
break;
spin_lock(&htlbpage_lock);
+ register_huge_page(page);
enqueue_huge_page(page);
htlbpagemem++;
htlbzone_pages++;
@@ -514,6 +529,7 @@ static int set_hugetlb_mem_size(int coun
if (page == NULL)
break;
spin_lock(&htlbpage_lock);
+ unregister_huge_page(page);
update_and_free_page(page);
spin_unlock(&htlbpage_lock);
}
@@ -546,14 +562,17 @@ static int __init hugetlb_init(void)
if (!cpu_has_pse)
return -ENODEV;

- for (i = 0; i < MAX_NUMNODES; ++i)
+ for (i = 0; i < MAX_NUMNODES; ++i) {
INIT_LIST_HEAD(&hugepage_freelists[i]);
+ INIT_LIST_HEAD(&hugepage_alllists[i]);
+ }

for (i = 0; i < htlbpage_max; ++i) {
page = alloc_fresh_huge_page();
if (!page)
break;
spin_lock(&htlbpage_lock);
+ register_huge_page(page);
enqueue_huge_page(page);
spin_unlock(&htlbpage_lock);
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2005-03-22 14:02    [W:0.168 / U:0.940 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site