[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