[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4BBE1A6A.60500@oracle.com>
Date: Thu, 08 Apr 2010 11:03:22 -0700
From: Yinghai <yinghai.lu@...cle.com>
To: Liang Li <liang.li@...driver.com>
CC: Jeremy Fitzhardinge <jeremy@...p.org>,
Yinghai <yinghai.lu@...cle.com>,
Rusty Russell <rusty@...tcorp.com.au>,
akpm@...ux-foundation.org, hpa@...or.com, mingo@...e.hu,
tglx@...utronix.de, wangchen@...fujitsu.com,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Subject: Re: + x86-fix-handling-of-the-reservetop-boot-option.patch added
to -mm tree
On 04/08/2010 10:12 AM, Jeremy Fitzhardinge wrote:
> On 04/08/2010 01:58 AM, Liang Li wrote:
>>>
>> When linux as vmi/xen/lguest guest OS, kernel call reserve_top_address
>> before start_kernel. It is far before the start_kernel hence far before
>> setup_arch->early_ioremap_init. So it is unsafe to place
>> fixup_early_ioremap inside reserve_top_address. So I think the patch
>> should be:
>>
>
> Yes indeed. That looks better.
>
> Acked-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@...rix.com>
>
good.
Liang please resubmit with clear version changelog.
like
-v2: ...
-v3: move fixup_early_ioremap out of reserve_top_address..
Yinghai
> Thanks,
> J
>
>> From 7cefa9a80c4434f2941a7072d39b1f1ffc08a40f Mon Sep 17 00:00:00 2001
>> From: Liang Li <liang.li@...driver.com>
>> Date: Mon, 22 Mar 2010 18:38:14 +0800
>> Subject: [PATCH] x86: let 'reservetop' functioning right
>>
>> When specify 'reservetop=0xbadc0de' kernel parameter, the kernel will
>> stop booting due to a early_ioremap bug that relate to commit 8827247ff.
>>
>> The root cause of boot failure problem is the value of 'slot_virt[i]'
>> was initialized in setup_arch->early_ioremap_init. But later in
>> setup_arch, the function 'parse_early_param' will modify 'FIXADDR_TOP'
>> when 'reservetop=0xbadc0de' being specified.
>>
>> When reservetop being handled then FIXADDR_TOP get adjusted, Hence check
>> prev_map then re-initialize slot_virt and PMD based on new FIXADDR_TOP.
>>
>> Signed-off-by: Liang Li <liang.li@...driver.com>
>> Cc: Wang Chen <wangchen@...fujitsu.com>
>> Cc: Ingo Molnar <mingo@...e.hu>
>> Cc: Thomas Gleixner <tglx@...utronix.de>
>> Cc: "H. Peter Anvin" <hpa@...or.com>
>> Cc: Yinghai Lu <yinghai@...nel.org>
>> Cc: Andrew Morton <akpm@...ux-foundation.org>
>> ---
>> arch/x86/include/asm/io.h | 1 +
>> arch/x86/mm/ioremap.c | 15 +++++++++++++++
>> arch/x86/mm/pgtable_32.c | 1 +
>> 3 files changed, 17 insertions(+), 0 deletions(-)
>>
>> diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h
>> index a1dcfa3..30a3e97 100644
>> --- a/arch/x86/include/asm/io.h
>> +++ b/arch/x86/include/asm/io.h
>> @@ -347,6 +347,7 @@ extern void __iomem *early_ioremap(resource_size_t phys_addr,
>> extern void __iomem *early_memremap(resource_size_t phys_addr,
>> unsigned long size);
>> extern void early_iounmap(void __iomem *addr, unsigned long size);
>> +extern void fixup_early_ioremap(void);
>>
>> #define IO_SPACE_LIMIT 0xffff
>>
>> diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
>> index 5eb1ba7..e4ab706 100644
>> --- a/arch/x86/mm/ioremap.c
>> +++ b/arch/x86/mm/ioremap.c
>> @@ -448,6 +448,21 @@ static inline void __init early_clear_fixmap(enum fixed_addresses idx)
>> static void __iomem *prev_map[FIX_BTMAPS_SLOTS] __initdata;
>> static unsigned long prev_size[FIX_BTMAPS_SLOTS] __initdata;
>>
>> +void __init fixup_early_ioremap(void)
>> +{
>> + int i;
>> + for (i = 0; i < FIX_BTMAPS_SLOTS; i++) {
>> + if (prev_map[i])
>> + break;
>> + }
>> +
>> + if (i < FIX_BTMAPS_SLOTS)
>> + BUG_ON(1);
>> +
>> + early_ioremap_init();
>> + return;
>> +}
>> +
>> static int __init check_early_ioremap_leak(void)
>> {
>> int count = 0;
>> diff --git a/arch/x86/mm/pgtable_32.c b/arch/x86/mm/pgtable_32.c
>> index 1a8faf0..26eadaa 100644
>> --- a/arch/x86/mm/pgtable_32.c
>> +++ b/arch/x86/mm/pgtable_32.c
>> @@ -128,6 +128,7 @@ static int __init parse_reservetop(char *arg)
>>
>> address = memparse(arg, &arg);
>> reserve_top_address(address);
>> + fixup_early_ioremap();
>> return 0;
>> }
>> early_param("reservetop", parse_reservetop);
>>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists