* [PATCH] x86, mm: Add comments for step_size
@ 2013-09-07 2:07 Yinghai Lu
2013-09-10 10:34 ` [tip:x86/mm] x86/mm: Add 'step_size' comments to init_mem_mapping () tip-bot for Yinghai Lu
0 siblings, 1 reply; 2+ messages in thread
From: Yinghai Lu @ 2013-09-07 2:07 UTC (permalink / raw)
To: H. Peter Anvin
Cc: Ingo Molnar, Pekka Enberg, Jacob Shin, linux-kernel, Yinghai Lu
Current code use MACRO to have shift to set to 5, but there is not
explanation about selection.
Add comment about why we are using 5.
Also add explanation that we don't need to worry about overflow
on 32bit.
-v3: According to Ingo, update changelog and comments.
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
arch/x86/mm/init.c | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
Index: linux-2.6/arch/x86/mm/init.c
===================================================================
--- linux-2.6.orig/arch/x86/mm/init.c
+++ linux-2.6/arch/x86/mm/init.c
@@ -399,8 +399,22 @@ static unsigned long __init init_range_m
return mapped_ram_size;
}
-/* (PUD_SHIFT-PMD_SHIFT)/2 */
-#define STEP_SIZE_SHIFT 5
+static unsigned long __init get_new_step_size(unsigned long step_size)
+{
+ /*
+ * initial mapped size is PMD_SIZE (2M).
+ * We can not set step_size to be PUD_SIZE (1G) yet.
+ * In worse case, when we cross the 1G boundary, and
+ * PG_LEVEL_2M is not set, we will need 1+1+512 pages (2M + 8k)
+ * to map 1G range with PTE. Use 5 as shift for now.
+ *
+ * Don't need to worry about overflow,
+ * on 32bit, when step_size is 0, round_down() return 0 for
+ * start, and that make that 0 just like 0x100000000ULL.
+ */
+ return step_size << 5;
+}
+
void __init init_mem_mapping(void)
{
unsigned long end, real_end, start, last_start;
@@ -449,7 +463,7 @@ void __init init_mem_mapping(void)
min_pfn_mapped = last_start >> PAGE_SHIFT;
/* only increase step_size after big range get mapped */
if (new_mapped_ram_size > mapped_ram_size)
- step_size <<= STEP_SIZE_SHIFT;
+ step_size = get_new_step_size(step_size);
mapped_ram_size += new_mapped_ram_size;
}
^ permalink raw reply [flat|nested] 2+ messages in thread
* [tip:x86/mm] x86/mm: Add 'step_size' comments to init_mem_mapping ()
2013-09-07 2:07 [PATCH] x86, mm: Add comments for step_size Yinghai Lu
@ 2013-09-10 10:34 ` tip-bot for Yinghai Lu
0 siblings, 0 replies; 2+ messages in thread
From: tip-bot for Yinghai Lu @ 2013-09-10 10:34 UTC (permalink / raw)
To: linux-tip-commits
Cc: linux-kernel, hpa, mingo, yinghai, penberg, jacob.shin, tglx
Commit-ID: 6979287a7df66a92d6f308338e972a406f9ef842
Gitweb: http://git.kernel.org/tip/6979287a7df66a92d6f308338e972a406f9ef842
Author: Yinghai Lu <yinghai@kernel.org>
AuthorDate: Fri, 6 Sep 2013 19:07:09 -0700
Committer: Ingo Molnar <mingo@kernel.org>
CommitDate: Tue, 10 Sep 2013 09:51:34 +0200
x86/mm: Add 'step_size' comments to init_mem_mapping()
Current code uses macro to shift by 5, but there is no explanation
why there's no worry about an overflow there.
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Cc: Pekka Enberg <penberg@kernel.org>
Cc: Jacob Shin <jacob.shin@amd.com>
Link: http://lkml.kernel.org/r/1378519629-10433-1-git-send-email-yinghai@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
arch/x86/mm/init.c | 23 ++++++++++++++++++++---
1 file changed, 20 insertions(+), 3 deletions(-)
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 04664cd..ce32017 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -399,8 +399,25 @@ static unsigned long __init init_range_memory_mapping(
return mapped_ram_size;
}
-/* (PUD_SHIFT-PMD_SHIFT)/2 */
-#define STEP_SIZE_SHIFT 5
+static unsigned long __init get_new_step_size(unsigned long step_size)
+{
+ /*
+ * Explain why we shift by 5 and why we don't have to worry about
+ * 'step_size << 5' overflowing:
+ *
+ * initial mapped size is PMD_SIZE (2M).
+ * We can not set step_size to be PUD_SIZE (1G) yet.
+ * In worse case, when we cross the 1G boundary, and
+ * PG_LEVEL_2M is not set, we will need 1+1+512 pages (2M + 8k)
+ * to map 1G range with PTE. Use 5 as shift for now.
+ *
+ * Don't need to worry about overflow, on 32bit, when step_size
+ * is 0, round_down() returns 0 for start, and that turns it
+ * into 0x100000000ULL.
+ */
+ return step_size << 5;
+}
+
void __init init_mem_mapping(void)
{
unsigned long end, real_end, start, last_start;
@@ -449,7 +466,7 @@ void __init init_mem_mapping(void)
min_pfn_mapped = last_start >> PAGE_SHIFT;
/* only increase step_size after big range get mapped */
if (new_mapped_ram_size > mapped_ram_size)
- step_size <<= STEP_SIZE_SHIFT;
+ step_size = get_new_step_size(step_size);
mapped_ram_size += new_mapped_ram_size;
}
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2013-09-10 10:34 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-07 2:07 [PATCH] x86, mm: Add comments for step_size Yinghai Lu
2013-09-10 10:34 ` [tip:x86/mm] x86/mm: Add 'step_size' comments to init_mem_mapping () tip-bot for Yinghai Lu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox