On 08/27/15 19:58, Michael S. Tsirkin wrote: > On Thu, Aug 27, 2015 at 04:27:00PM +0200, Laszlo Ersek wrote: >> 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.) > > That's not really true. ACPI is simply pushing XSDT everywhere, > you will find it hardly ever mentions legacy tables like RSDP anymore. > > And in practice, this works fine with all existing guests. > > > So yes let's do it, but no, don't make this a dependency of > this series.
Okay, thanks. I made a note for later. Laszlo >> (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