qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 0/4] acpi: xsdt support


From: Laszlo Ersek
Subject: Re: [Qemu-devel] [PATCH v2 0/4] acpi: xsdt support
Date: Thu, 27 Aug 2015 16:27:00 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0

On 06/09/15 16:05, Michael S. Tsirkin wrote:
> On Tue, Jun 09, 2015 at 04:02:08PM +0200, Laszlo Ersek wrote:
>> On 06/09/15 11:49, Michael S. Tsirkin wrote:
>>> On Tue, Jun 09, 2015 at 02:02:31AM -0400, Paolo Bonzini wrote:
>>>> I would just patch OVMF to ignore the RSDT if there is an XSDT.
>>>>
>>>> Alternatively, can you check for ACPI 2.0 support via _OSI, and load the 
>>>> ACPI 2.0 bits via LoadTable? Hopefully XP does not BSOD if the invalid 
>>>> (for ACPI 1.0) opcodes are in a Then block or in a separate method... Then 
>>>> you can use just an RSDT.
>>>>
>>>> Paolo
>>>
>>>
>>> So it's even easier. The following doesn't crash XP:
>>>
>>>             Method(ADDR, 0, Serialized) {
>>>             /* Region is local to method to avoid crashing ACPI 1.0 guests 
>>> */
>>>                 DataTableRegion(IDPT, "UEFI", "BXPC", "VMGENI");
>>>             Field (IDPT, AnyAcc, NoLock, Preserve) {
>>>               Offset (54),
>>>               VGIA, 64     // address of "etc/acpi/vmgenid" blob
>>>             }
>>>             Return(Add(VGIA), 40);
>>>             }
>>>
>>> Simply because XP doesn't ever call ADDR.
>>> Method must be serialized since attempts to create two
>>> regions or fields with the same name would crash OSPM.
>>
>> That sounds like a huge relief to me, so thank you for researching it.
>>
>> Laszlo
> 
> Mind you, I still think it's worth it to support XSDT eventually,
> but the immediate need to do this in 2.4 timeframe is gone.

... I'll have to make the OVMF linker/loader a little bit smarter, so
that this QEMU patch series doesn't break it. Because, unfortunately,
XSDT seems to be a hard requirement for DataTableRegion(), according to
the ACPI spec. (Thus, unless SeaBIOS installs an XSDT too,
DataTableRegion() may not work in the ADDR method of the vmgenid device.)

(FWIW I checked the ACPICA source, and AFAICS, DataTableRegion() *of
ACPICA* should locate tables from the RSDT too just fine. But, IIRC,
Windows does not use ACPICA, and the ACPI spec requires XSDT. Quite
unfortunate.)

The idea I have for OVMF is to track the offsets for each blob from
which tables have been installed already. Then I can detect further
pointers (located in any other blobs) pointing to the same offsets, and
forego duplicate table installations. This should fix the problem I
reported in this thread, and then this patch set should work for OVMF too.

... I've come across this today while writing "docs/specs/vmgenid.txt".

Laszlo




reply via email to

[Prev in Thread] Current Thread [Next in Thread]