[PATCH 08/13] [ARM] Make VMALLOC_END into a global variable if not defined
Kyungmin Park
kmpark at infradead.org
Wed Jul 14 00:24:43 EDT 2010
On Wed, Jul 14, 2010 at 1:11 PM, Eric Miao <eric.miao at canonical.com> wrote:
> 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).
>
Then this patch is intermediate patch and VMALLOC_END will be removed finally?
At first I understand there's global VMALLOC_END on each chip and each
board can override it.
Thank you,
Kyungmin park
More information about the linux-arm-kernel
mailing list