On Tue, Jan 10 2006, Ingo Molnar wrote:
>
> * Jens Axboe <[email protected]> wrote:
>
> > + Select the wanted split between kernel and user memory.
> > +
> > + If the address range available to the kernel is less than the
> > + physical memory installed, the remaining memory will be available
> > + as "high memory". Accessing high memory is a little more costly
> > + than low memory, as it needs to be mapped into the kernel first.
>
> make it _ALOT_ more clear that mere mortals should not touch this
> option! Also, you do not mention the userspace-VM fragmentation issues.
> Plus, if a user uses a 2G/2G split with more than 2G of RAM, the kernel
> should print a warning that it's running with a non-default split. Do
> the same if the user uses a non-default split with less than 960MB of
> RAM.
I added the < 960MiB warning, but not for the 2G/2G as the option
depends on NOHIGHMEM right now.
I also changed the help text again, hope you are happy with it now.
> > +
> > + Note that selecting anything but the default 3G/1G split will make
> > + your kernel incompatible with binary only modules.
>
> it's not 'will' but 'may', and even then, tons of .config things can
> break bin-only modules, so just skip this paragraph.
Killed.
> looks good to me otherwise, with the text fixes it's:
>
> Acked-by: Ingo Molnar <[email protected]>
Thanks! Updated patch below.
---
Add option for configuring the page offset, to better optimize the
kernel for higher memory machines. Enables users to get rid of high
memory for eg a 1GiB machine.
Signed-off-by: Jens Axboe <[email protected]>
Acked-by: Ingo Molnar <[email protected]>
diff --git a/arch/i386/Kconfig b/arch/i386/Kconfig
index d849c68..20d1423 100644
--- a/arch/i386/Kconfig
+++ b/arch/i386/Kconfig
@@ -444,6 +464,35 @@ config HIGHMEM64G
endchoice
+choice
+ depends on NOHIGHMEM && EXPERIMENTAL
+ prompt "Memory split"
+ default DEFAULT_3G
+ help
+ Select the wanted split between kernel and user memory.
+
+ If the address range available to the kernel is less than the
+ physical memory installed, the remaining memory will be available
+ as "high memory". Accessing high memory is a little more costly
+ than low memory, as it needs to be mapped into the kernel first.
+ Note that increasing the kernel address space limits the range
+ available to user programs, making the address space there
+ tighter.
+
+ If you are not absolutely sure what you are doing, leave this
+ option alone!
+
+ config DEFAULT_3G
+ bool "3G/1G user/kernel split"
+ config DEFAULT_3G_OPT
+ bool "3G/1G user/kernel split (for full 1G low memory)"
+ config DEFAULT_2G
+ bool "2G/2G user/kernel split"
+ config DEFAULT_1G
+ bool "1G/3G user/kernel split"
+
+endchoice
+
config HIGHMEM
bool
depends on HIGHMEM64G || HIGHMEM4G
diff --git a/arch/i386/mm/init.c b/arch/i386/mm/init.c
index 7df494b..67f1da0 100644
--- a/arch/i386/mm/init.c
+++ b/arch/i386/mm/init.c
@@ -597,6 +597,12 @@ void __init mem_init(void)
high_memory = (void *) __va(max_low_pfn * PAGE_SIZE - 1) + 1;
#endif
+#if !defined(CONFIG_DEFAULT_3G)
+ /* if the user has less than 960MB of RAM, he should use the default */
+ if (max_low_pfn < (960 * 1024 * 1024 / PAGE_SIZE))
+ printk(KERN_INFO "Memory: less than 960MiB of RAM, you should use the default memory split setting\n");
+#endif
+
/* this will put all low memory onto the freelists */
totalram_pages += free_all_bootmem();
diff --git a/include/asm-i386/page.h b/include/asm-i386/page.h
index 73296d9..7da50a1 100644
--- a/include/asm-i386/page.h
+++ b/include/asm-i386/page.h
@@ -109,11 +109,23 @@ extern int page_is_ram(unsigned long pag
#endif /* __ASSEMBLY__ */
+#if defined(CONFIG_DEFAULT_3G)
+#define __PAGE_OFFSET_RAW (0xC0000000)
+#elif defined(CONFIG_DEFAULT_3G_OPT)
+#define __PAGE_OFFSET_RAW (0xB0000000)
+#elif defined(CONFIG_DEFAULT_2G)
+#define __PAGE_OFFSET_RAW (0x78000000)
+#elif defined(CONFIG_DEFAULT_1G)
+#define __PAGE_OFFSET_RAW (0x40000000)
+#else
+#error "Bad user/kernel offset"
+#endif
+
#ifdef __ASSEMBLY__
-#define __PAGE_OFFSET (0xC0000000)
+#define __PAGE_OFFSET __PAGE_OFFSET_RAW
#define __PHYSICAL_START CONFIG_PHYSICAL_START
#else
-#define __PAGE_OFFSET (0xC0000000UL)
+#define __PAGE_OFFSET ((unsigned long)__PAGE_OFFSET_RAW)
#define __PHYSICAL_START ((unsigned long)CONFIG_PHYSICAL_START)
#endif
#define __KERNEL_START (__PAGE_OFFSET + __PHYSICAL_START)
--
Jens Axboe
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]