lkml.org 
[lkml]   [2006]   [Jan]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] Address space split configuration
    On Tue, Jan 10 2006, Ingo Molnar wrote:
    >
    > * Jens Axboe <axboe@suse.de> 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 <mingo@elte.hu>

    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 <axboe@suse.de>
    Acked-by: Ingo Molnar <mingo@elte.hu>

    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 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: 2006-01-10 16:04    [W:0.030 / U:88.512 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site