[PATCH 08/13] [ARM] Make VMALLOC_END into a global variable if not defined

Eric Miao eric.miao at canonical.com
Wed Jul 14 00:11:35 EDT 2010


On Wed, Jul 14, 2010 at 10:57 AM, Kyungmin Park <kmpark at infradead.org> wrote:
> Good idea!
> Each board can use each own vmalloc_end. no need to bound chip global
> vmalloc_end.
>
> On Wed, Jul 14, 2010 at 12:33 AM, Eric Miao <eric.miao at canonical.com> wrote:
>> Signed-off-by: Eric Miao <eric.miao at canonical.com>
>> ---
>>  arch/arm/include/asm/mach/arch.h |    1 +
>>  arch/arm/include/asm/pgtable.h   |    5 +++++
>>  arch/arm/kernel/setup.c          |    6 ++++++
>>  3 files changed, 12 insertions(+), 0 deletions(-)
>>
>> diff --git a/arch/arm/include/asm/mach/arch.h b/arch/arm/include/asm/mach/arch.h
>> index 52bea4c..2191d40 100644
>> --- a/arch/arm/include/asm/mach/arch.h
>> +++ b/arch/arm/include/asm/mach/arch.h
>> @@ -27,6 +27,7 @@ struct machine_class {
>>                                                 * page tabe entry      */
>>        const char              *name;          /* machine class name   */
>>        unsigned long           boot_params;    /* tagged list          */
>> +       unsigned long           vmalloc_end;    /* VMALLOC_END          */
>>
>>        void                    (*map_io)(void);/* IO mapping function */
>>        void                    (*init_irq)(void);
>> diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h
>> index ab68cf1..478249a 100644
>> --- a/arch/arm/include/asm/pgtable.h
>> +++ b/arch/arm/include/asm/pgtable.h
>> @@ -40,6 +40,11 @@
>>  #define VMALLOC_START          (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1))
>>  #endif
>>
>> +#ifndef VMALLOC_END
>> +extern unsigned long vmalloc_end;
>> +#define VMALLOC_END (vmalloc_end)
>> +#endif
>> +
>>  /*
>>  * Hardware-wise, we have a two level page table structure, where the first
>>  * level has 4096 entries, and the second level has 256 entries.  Each entry
>> diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
>> index 295de99..672a8ec 100644
>> --- a/arch/arm/kernel/setup.c
>> +++ b/arch/arm/kernel/setup.c
>> @@ -95,6 +95,9 @@ EXPORT_SYMBOL(isa_dma_threshold);
>>  unsigned long max_dma_address = 0xffffffffUL;
>>  EXPORT_SYMBOL(max_dma_address);
>>
>> +unsigned long vmalloc_end = 0xffffffffUL;
>> +EXPORT_SYMBOL(vmalloc_end);
>
> At current code, 0xfe800000UL is the largest number. If we set end
> vmalloc_end to 0xffffffffUL and use it. maybe system can't boot.
> arch/arm/mach-loki/include/mach/vmalloc.h:#define VMALLOC_END   0xfe800000UL
>

So the platform has to setup vmalloc correct :-)

>> +
>>  #ifdef MULTI_CPU
>>  struct processor processor;
>>  #endif
>> @@ -684,6 +687,9 @@ void __init setup_arch(char **cmdline_p)
>>        class = mdesc->class;
>>        machine_name = mdesc->name;
>>
>> +       if (class)
>> +               vmalloc_end = class->vmalloc_end;
>
> Don't check 'if (class->vmalloc_end)'?
>

Better to check that, but not sure if that's necessary. I'd expect
every machine_class to get this correct, instead of leaving it
uninitialized (i.e. == 0).



More information about the linux-arm-kernel mailing list