From: Jon Tollefson <kniht@us.ibm.com>
To: linux-kernel@vger.kernel.org,
Linux Memory Management List <linux-mm@kvack.org>,
linuxppc-dev <linuxppc-dev@ozlabs.org>
Cc: Nick Piggin <npiggin@suse.de>,
Nishanth Aravamudan <nacc@us.ibm.com>,
Andi Kleen <andi@firstfloor.org>,
Paul Mackerras <paulus@samba.org>
Subject: [PATCH 1/6 v2] allow arch specific function for allocating gigantic pages
Date: Tue, 13 May 2008 12:19:36 -0500 [thread overview]
Message-ID: <4829CDA8.9070106@us.ibm.com> (raw)
In-Reply-To: <4829CAC3.30900@us.ibm.com>
Allow alloc_bm_huge_page() to be overridden by architectures that can't
always use bootmem. This requires huge_boot_pages to be available for
use by this function. The 16G pages on ppc64 have to be reserved prior
to boot-time. The location of these pages are indicated in the device
tree.
A BUG_ON in huge_add_hstate is commented out in order to allow 64K huge
pages to continue to work on power.
Signed-off-by: Jon Tollefson <kniht@linux.vnet.ibm.com>
---
include/linux/hugetlb.h | 10 ++++++++++
mm/hugetlb.c | 15 ++++++---------
2 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
index 8c47ca7..b550ec7 100644
--- a/include/linux/hugetlb.h
+++ b/include/linux/hugetlb.h
@@ -35,6 +35,7 @@ void hugetlb_unreserve_pages(struct inode *inode, long offset, long freed);
extern unsigned long hugepages_treat_as_movable;
extern const unsigned long hugetlb_zero, hugetlb_infinity;
extern int sysctl_hugetlb_shm_group;
+extern struct list_head huge_boot_pages;
/* arch callbacks */
@@ -205,6 +206,14 @@ struct hstate {
unsigned int surplus_huge_pages_node[MAX_NUMNODES];
};
+struct huge_bm_page {
+ struct list_head list;
+ struct hstate *hstate;
+};
+
+/* arch callback */
+int alloc_bm_huge_page(struct hstate *h);
+
void __init huge_add_hstate(unsigned order);
struct hstate *size_to_hstate(unsigned long size);
@@ -256,6 +265,7 @@ extern unsigned long sysctl_overcommit_huge_pages[HUGE_MAX_HSTATE];
#else
struct hstate {};
+#define alloc_bm_huge_page(h) NULL
#define hstate_file(f) NULL
#define hstate_vma(v) NULL
#define hstate_inode(i) NULL
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 5273f6c..efb5805 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -27,6 +27,7 @@ unsigned long max_huge_pages[HUGE_MAX_HSTATE];
unsigned long sysctl_overcommit_huge_pages[HUGE_MAX_HSTATE];
static gfp_t htlb_alloc_mask = GFP_HIGHUSER;
unsigned long hugepages_treat_as_movable;
+struct list_head huge_boot_pages;
static int max_hstate = 0;
@@ -533,14 +534,8 @@ static struct page *alloc_huge_page(struct vm_area_struct *vma,
return page;
}
-static __initdata LIST_HEAD(huge_boot_pages);
-
-struct huge_bm_page {
- struct list_head list;
- struct hstate *hstate;
-};
-
-static int __init alloc_bm_huge_page(struct hstate *h)
+/* Can be overriden by architectures */
+__attribute__((weak)) int alloc_bm_huge_page(struct hstate *h)
{
struct huge_bm_page *m;
int nr_nodes = nodes_weight(node_online_map);
@@ -583,6 +578,8 @@ static void __init hugetlb_init_hstate(struct hstate *h)
unsigned long i;
/* Don't reinitialize lists if they have been already init'ed */
+ if (!huge_boot_pages.next)
+ INIT_LIST_HEAD(&huge_boot_pages);
if (!h->hugepage_freelists[0].next) {
for (i = 0; i < MAX_NUMNODES; ++i)
INIT_LIST_HEAD(&h->hugepage_freelists[i]);
@@ -664,7 +661,7 @@ void __init huge_add_hstate(unsigned order)
return;
}
BUG_ON(max_hstate >= HUGE_MAX_HSTATE);
- BUG_ON(order < HPAGE_SHIFT - PAGE_SHIFT);
+/* BUG_ON(order < HPAGE_SHIFT - PAGE_SHIFT);*/
h = &hstates[max_hstate++];
h->order = order;
h->mask = ~((1ULL << (order + PAGE_SHIFT)) - 1);
WARNING: multiple messages have this Message-ID (diff)
From: Jon Tollefson <kniht@us.ibm.com>
To: linux-kernel@vger.kernel.org,
Linux Memory Management List <linux-mm@kvack.org>,
linuxppc-dev <linuxppc-dev@ozlabs.org>
Cc: Paul Mackerras <paulus@samba.org>, Nick Piggin <npiggin@suse.de>,
Nishanth Aravamudan <nacc@us.ibm.com>,
Andi Kleen <andi@firstfloor.org>, Adam Litke <agl@us.ibm.com>
Subject: [PATCH 1/6 v2] allow arch specific function for allocating gigantic pages
Date: Tue, 13 May 2008 12:19:36 -0500 [thread overview]
Message-ID: <4829CDA8.9070106@us.ibm.com> (raw)
In-Reply-To: <4829CAC3.30900@us.ibm.com>
Allow alloc_bm_huge_page() to be overridden by architectures that can't
always use bootmem. This requires huge_boot_pages to be available for
use by this function. The 16G pages on ppc64 have to be reserved prior
to boot-time. The location of these pages are indicated in the device
tree.
A BUG_ON in huge_add_hstate is commented out in order to allow 64K huge
pages to continue to work on power.
Signed-off-by: Jon Tollefson <kniht@linux.vnet.ibm.com>
---
include/linux/hugetlb.h | 10 ++++++++++
mm/hugetlb.c | 15 ++++++---------
2 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
index 8c47ca7..b550ec7 100644
--- a/include/linux/hugetlb.h
+++ b/include/linux/hugetlb.h
@@ -35,6 +35,7 @@ void hugetlb_unreserve_pages(struct inode *inode, long offset, long freed);
extern unsigned long hugepages_treat_as_movable;
extern const unsigned long hugetlb_zero, hugetlb_infinity;
extern int sysctl_hugetlb_shm_group;
+extern struct list_head huge_boot_pages;
/* arch callbacks */
@@ -205,6 +206,14 @@ struct hstate {
unsigned int surplus_huge_pages_node[MAX_NUMNODES];
};
+struct huge_bm_page {
+ struct list_head list;
+ struct hstate *hstate;
+};
+
+/* arch callback */
+int alloc_bm_huge_page(struct hstate *h);
+
void __init huge_add_hstate(unsigned order);
struct hstate *size_to_hstate(unsigned long size);
@@ -256,6 +265,7 @@ extern unsigned long sysctl_overcommit_huge_pages[HUGE_MAX_HSTATE];
#else
struct hstate {};
+#define alloc_bm_huge_page(h) NULL
#define hstate_file(f) NULL
#define hstate_vma(v) NULL
#define hstate_inode(i) NULL
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 5273f6c..efb5805 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -27,6 +27,7 @@ unsigned long max_huge_pages[HUGE_MAX_HSTATE];
unsigned long sysctl_overcommit_huge_pages[HUGE_MAX_HSTATE];
static gfp_t htlb_alloc_mask = GFP_HIGHUSER;
unsigned long hugepages_treat_as_movable;
+struct list_head huge_boot_pages;
static int max_hstate = 0;
@@ -533,14 +534,8 @@ static struct page *alloc_huge_page(struct vm_area_struct *vma,
return page;
}
-static __initdata LIST_HEAD(huge_boot_pages);
-
-struct huge_bm_page {
- struct list_head list;
- struct hstate *hstate;
-};
-
-static int __init alloc_bm_huge_page(struct hstate *h)
+/* Can be overriden by architectures */
+__attribute__((weak)) int alloc_bm_huge_page(struct hstate *h)
{
struct huge_bm_page *m;
int nr_nodes = nodes_weight(node_online_map);
@@ -583,6 +578,8 @@ static void __init hugetlb_init_hstate(struct hstate *h)
unsigned long i;
/* Don't reinitialize lists if they have been already init'ed */
+ if (!huge_boot_pages.next)
+ INIT_LIST_HEAD(&huge_boot_pages);
if (!h->hugepage_freelists[0].next) {
for (i = 0; i < MAX_NUMNODES; ++i)
INIT_LIST_HEAD(&h->hugepage_freelists[i]);
@@ -664,7 +661,7 @@ void __init huge_add_hstate(unsigned order)
return;
}
BUG_ON(max_hstate >= HUGE_MAX_HSTATE);
- BUG_ON(order < HPAGE_SHIFT - PAGE_SHIFT);
+/* BUG_ON(order < HPAGE_SHIFT - PAGE_SHIFT);*/
h = &hstates[max_hstate++];
h->order = order;
h->mask = ~((1ULL << (order + PAGE_SHIFT)) - 1);
WARNING: multiple messages have this Message-ID (diff)
From: Jon Tollefson <kniht@us.ibm.com>
To: linux-kernel@vger.kernel.org,
Linux Memory Management List <linux-mm@kvack.org>,
linuxppc-dev <linuxppc-dev@ozlabs.org>
Cc: Paul Mackerras <paulus@samba.org>, Nick Piggin <npiggin@suse.de>,
Nishanth Aravamudan <nacc@us.ibm.com>,
Andi Kleen <andi@firstfloor.org>, Adam Litke <agl@us.ibm.com>
Subject: [PATCH 1/6 v2] allow arch specific function for allocating gigantic pages
Date: Tue, 13 May 2008 12:19:36 -0500 [thread overview]
Message-ID: <4829CDA8.9070106@us.ibm.com> (raw)
In-Reply-To: <4829CAC3.30900@us.ibm.com>
Allow alloc_bm_huge_page() to be overridden by architectures that can't
always use bootmem. This requires huge_boot_pages to be available for
use by this function. The 16G pages on ppc64 have to be reserved prior
to boot-time. The location of these pages are indicated in the device
tree.
A BUG_ON in huge_add_hstate is commented out in order to allow 64K huge
pages to continue to work on power.
Signed-off-by: Jon Tollefson <kniht@linux.vnet.ibm.com>
---
include/linux/hugetlb.h | 10 ++++++++++
mm/hugetlb.c | 15 ++++++---------
2 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
index 8c47ca7..b550ec7 100644
--- a/include/linux/hugetlb.h
+++ b/include/linux/hugetlb.h
@@ -35,6 +35,7 @@ void hugetlb_unreserve_pages(struct inode *inode, long offset, long freed);
extern unsigned long hugepages_treat_as_movable;
extern const unsigned long hugetlb_zero, hugetlb_infinity;
extern int sysctl_hugetlb_shm_group;
+extern struct list_head huge_boot_pages;
/* arch callbacks */
@@ -205,6 +206,14 @@ struct hstate {
unsigned int surplus_huge_pages_node[MAX_NUMNODES];
};
+struct huge_bm_page {
+ struct list_head list;
+ struct hstate *hstate;
+};
+
+/* arch callback */
+int alloc_bm_huge_page(struct hstate *h);
+
void __init huge_add_hstate(unsigned order);
struct hstate *size_to_hstate(unsigned long size);
@@ -256,6 +265,7 @@ extern unsigned long sysctl_overcommit_huge_pages[HUGE_MAX_HSTATE];
#else
struct hstate {};
+#define alloc_bm_huge_page(h) NULL
#define hstate_file(f) NULL
#define hstate_vma(v) NULL
#define hstate_inode(i) NULL
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 5273f6c..efb5805 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -27,6 +27,7 @@ unsigned long max_huge_pages[HUGE_MAX_HSTATE];
unsigned long sysctl_overcommit_huge_pages[HUGE_MAX_HSTATE];
static gfp_t htlb_alloc_mask = GFP_HIGHUSER;
unsigned long hugepages_treat_as_movable;
+struct list_head huge_boot_pages;
static int max_hstate = 0;
@@ -533,14 +534,8 @@ static struct page *alloc_huge_page(struct vm_area_struct *vma,
return page;
}
-static __initdata LIST_HEAD(huge_boot_pages);
-
-struct huge_bm_page {
- struct list_head list;
- struct hstate *hstate;
-};
-
-static int __init alloc_bm_huge_page(struct hstate *h)
+/* Can be overriden by architectures */
+__attribute__((weak)) int alloc_bm_huge_page(struct hstate *h)
{
struct huge_bm_page *m;
int nr_nodes = nodes_weight(node_online_map);
@@ -583,6 +578,8 @@ static void __init hugetlb_init_hstate(struct hstate *h)
unsigned long i;
/* Don't reinitialize lists if they have been already init'ed */
+ if (!huge_boot_pages.next)
+ INIT_LIST_HEAD(&huge_boot_pages);
if (!h->hugepage_freelists[0].next) {
for (i = 0; i < MAX_NUMNODES; ++i)
INIT_LIST_HEAD(&h->hugepage_freelists[i]);
@@ -664,7 +661,7 @@ void __init huge_add_hstate(unsigned order)
return;
}
BUG_ON(max_hstate >= HUGE_MAX_HSTATE);
- BUG_ON(order < HPAGE_SHIFT - PAGE_SHIFT);
+/* BUG_ON(order < HPAGE_SHIFT - PAGE_SHIFT);*/
h = &hstates[max_hstate++];
h->order = order;
h->mask = ~((1ULL << (order + PAGE_SHIFT)) - 1);
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2008-05-13 17:19 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-13 17:07 [PATCH 0/6] 16G and multi size hugetlb page support on powerpc Jon Tollefson
2008-05-13 17:07 ` Jon Tollefson
2008-05-13 17:07 ` Jon Tollefson
2008-05-13 17:19 ` Jon Tollefson [this message]
2008-05-13 17:19 ` [PATCH 1/6 v2] allow arch specific function for allocating gigantic pages Jon Tollefson
2008-05-13 17:19 ` Jon Tollefson
2008-05-23 6:25 ` Nick Piggin
2008-05-23 6:25 ` Nick Piggin
2008-05-23 6:25 ` Nick Piggin
2008-05-13 17:21 ` [PATCH 2/6 v2] powerpc: " Jon Tollefson
2008-05-13 17:21 ` Jon Tollefson
2008-05-13 17:21 ` Jon Tollefson
2008-05-13 17:22 ` [PATCH 3/6 v2] powerpc: scan device tree and save gigantic page locations Jon Tollefson
2008-05-13 17:22 ` Jon Tollefson
2008-05-13 17:22 ` Jon Tollefson
2008-05-13 17:23 ` [PATCH 4/6 v2] powerpc: define page support for 16G pages Jon Tollefson
2008-05-13 17:23 ` Jon Tollefson
2008-05-13 17:23 ` Jon Tollefson
2008-05-13 17:23 ` [PATCH 5/6 v2] check for overflow Jon Tollefson
2008-05-13 17:23 ` Jon Tollefson
2008-05-13 17:23 ` Jon Tollefson
2008-05-13 17:25 ` [PATCH 6/6] powerpc: support multiple huge page sizes Jon Tollefson
2008-05-13 17:25 ` Jon Tollefson
2008-05-13 17:25 ` Jon Tollefson
2008-06-24 2:54 ` Nick Piggin
2008-06-24 2:54 ` Nick Piggin
2008-06-24 2:54 ` Nick Piggin
2008-06-24 17:17 ` Jon Tollefson
2008-06-24 17:17 ` Jon Tollefson
2008-06-24 17:17 ` Jon Tollefson
2008-05-14 4:25 ` [PATCH 0/6] 16G and multi size hugetlb page support on powerpc Nick Piggin
2008-05-14 4:25 ` Nick Piggin
2008-05-14 4:25 ` Nick Piggin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4829CDA8.9070106@us.ibm.com \
--to=kniht@us.ibm.com \
--cc=andi@firstfloor.org \
--cc=kniht@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linuxppc-dev@ozlabs.org \
--cc=nacc@us.ibm.com \
--cc=npiggin@suse.de \
--cc=paulus@samba.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.