[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4BC4DDEA.60202@oracle.com>
Date: Tue, 13 Apr 2010 14:11:06 -0700
From: Yinghai <yinghai.lu@...cle.com>
To: "H. Peter Anvin" <hpa@...or.com>
CC: Bjorn Helgaas <bjorn.helgaas@...com>,
Thomas Gleixner <tglx@...utronix.de>,
Ingo Molnar <mingo@...hat.com>,
Andy Isaacson <adi@...apodia.org>, guenter.roeck@...csson.com,
Linus Torvalds <torvalds@...ux-foundation.org>,
"linux-pci@...r.kernel.org" <linux-pci@...r.kernel.org>,
"x86@...nel.org" <x86@...nel.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
Thomas Renninger <trenn@...e.de>
Subject: Re: [PATCH -v2 1/2] x86: Reserve [0xa0000, 0x100000] in e820 map
On 04/13/2010 02:09 PM, H. Peter Anvin wrote:
> On 04/13/2010 02:02 PM, Bjorn Helgaas wrote:
>>
>> I like the fact that this makes x86_64 and x86_32 handle the legacy VGA
>> framebuffer the same way.
>>
>> What about arch/x86/kernel/probe_roms_32.c? That deals with expansion
>> ROMs in the 0xc0000-0xfffff range, including the VGA ROM. We only build
>> it for x86_32; is that correct, or should it be unified, too?
>>
>
> It should be.
>
>>> Index: linux-2.6/arch/x86/kernel/setup.c
>>> ===================================================================
>>> --- linux-2.6.orig/arch/x86/kernel/setup.c
>>> +++ linux-2.6/arch/x86/kernel/setup.c
>>> @@ -693,7 +693,7 @@ static void __init trim_bios_range(void)
>>> * area (640->1Mb) as ram even though it is not.
>>> * take them out.
>>> */
>>> - e820_remove_range(BIOS_BEGIN, BIOS_END - BIOS_BEGIN, E820_RAM, 1);
>>> + e820_add_region(BIOS_BEGIN, BIOS_END - BIOS_BEGIN, E820_RESERVED);
>>
>> Let me see if I understand this. On Andy's machine, the e820 map
>> doesn't mention the 0xa0000-0xf0000 range at all:
>>
>> BIOS-e820: 0000000000000000 - 000000000009ec00 (usable)
>> BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
>>
>> e820_reserve_resources() inserts resources for some e820 entries (those
>> that start before 0x100000 or are not E820_RESERVED). Andy's machine
>> didn't supply any e820 entries that cover 0xa0000-0xf0000, so we didn't
>> insert any resources there, and PCI assumed that range was available.
>
> [Note: it's worth noting that the e820 spec specifically says that e820
> will not necessarily mark legacy ranges reserved.]
>
>> This patch adds the [0xa0000-0x100000] range as E820_RESERVED. Since
>> that starts below 0x100000, e820_reserve_resources() will insert a
>> corresponding resource marked as BUSY.
>>
>> Then the second patch prevents PCI from using that BUSY region to
>> allocate resources to devices.
>>
>> Is my understanding correct?
>>
>> I don't feel like I know enough about x86 architecture to ack this
>> patch, but I don't object to it.
>
> I guess the real question (which I haven't looked at myself) is if the
> E820_RESERVED -> BUSY will cause an explicitly assigned BAR from being
> moved. That's bad, not so much for this particular range, but from BARs
> which may be assigned by SMM. Hacking that up in a simulator
> (Qemu/Bochs) and testing it is probably on the to do list...
no, if some device BAR fall in that range, it should still use that range, and will not be relocated.
will update the change log.
Thanks
Yinghai
--
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