On Tue, 30 Jul 2013 16:18:29 +0300 "Michael S. Tsirkin" mst@redhat.com wrote:
On Tue, Jul 30, 2013 at 03:10:02PM +0200, Igor Mammedov wrote:
On Tue, 30 Jul 2013 14:35:25 +0300 "Michael S. Tsirkin" mst@redhat.com wrote:
On Tue, Jul 30, 2013 at 09:00:38AM +0200, Igor Mammedov wrote:
Windows XP (32 and 64 bit) crashes if 64-bit PCI hole is present. Use _OSI ACPI method to blacklist it and hide 64-bit PCI hole.
_OSI strings reported by XP are taken from here: http://msdn.microsoft.com/library/windows/hardware/gg463275
Signed-off-by: Igor Mammedov imammedo@redhat.com
Hmm did you test this with other OS-es? OSI matches multiple strings so this will often disable the 64 bit memory for newer windows or e.g. for linux.
See e.g. ftp://ftp.suse.com/pub/people/trenn/ACPI_BIOS_on_Linux_guide/acpi_guideline_for_vendors.pdf
according to "3.2 How OSI is implemented on Linux" _OSI is broken on linux, but I guess we should accommodate this buggy behavior for compatibility reasons.
_OS could be better way to do it, but I haven't found any MS document specifying _OS values for Windows flavors.
Yes but we can work it out.
So far from testing of Windows OSes only (32|64bit) Windows XP and Windows Server 2003 [R2] crash when 64-bit PCI hole is present, the rest installs/boots just fine.
Right. That's why I'm thinking _OS might be better.
_OS is even worse it returns "Microsoft Windows NT" on linux, XP, WS2012R2 ... so it's not usable either.
Could we use _OS instead? That's a single string, so it will only match a specific OS.
src/acpi-dsdt.dsl | 25 +++++++++++++++++++++++++ 1 files changed, 25 insertions(+), 0 deletions(-)
diff --git a/src/acpi-dsdt.dsl b/src/acpi-dsdt.dsl index 158f6b4..7b55636 100644 --- a/src/acpi-dsdt.dsl +++ b/src/acpi-dsdt.dsl @@ -33,6 +33,31 @@ DefinitionBlock (
/****************************************************************
- OS detection
- ****************************************************************/
- Scope(_SB) {
External(\P1V, IntObj)
Method(_INI) {
If (CondRefOf (\_OSI, Local0)) {
/* disable 64-bit PCI window for Windows XP and its variants */
If (\_OSI ("Windows 2001")) {
Store (Zero, P1V)
}
If (\_OSI ("Windows 2001 SP1")) {
Store (Zero, P1V)
}
If (\_OSI ("Windows 2001 SP2")) {
Store (Zero, P1V)
}
}
}
- }
+/****************************************************************
- PCI Bus definition
****************************************************************/
-- 1.7.1