From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42515) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ad0c6-00078l-OS for qemu-devel@nongnu.org; Mon, 07 Mar 2016 14:14:43 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ad0c5-0001Kz-TD for qemu-devel@nongnu.org; Mon, 07 Mar 2016 14:14:42 -0500 Received: from mx1.redhat.com ([209.132.183.28]:47794) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ad0c5-0001Kn-Ni for qemu-devel@nongnu.org; Mon, 07 Mar 2016 14:14:41 -0500 From: Marcel Apfelbaum Date: Mon, 7 Mar 2016 21:14:37 +0200 Message-Id: <1457378077-17061-1-git-send-email-marcel@redhat.com> Subject: [Qemu-devel] [PATCH V2] hw/acpi: fix Q35 support for legacy Windows OS List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: ehabkost@redhat.com, mst@redhat.com, ghammer@redhat.com, laine@redhat.com, pbonzini@redhat.com, marcel@redhat.com, imammedo@redhat.com, rth@twiddle.net Legacy Windows operating systems like Windows XP and Windows 2003 require _DIS method to be present for all interrupt links. PC machines already have a no-op implemented for GSI links, add it also in Q35. Signed-off-by: Marcel Apfelbaum --- Hi, I tested this patch with WinXP and Win 2003, but also with Win 10, and Fedora. This solves a BSOD early in the setup process. WinXP/2003 can be tested using: -device piix3-ide,id=legacyide \ -drive file=winxp-q35.qcow2,if=none,id=disk -device ide-hd,drive=disk,bus=legacyide.0 \ -drive file=xp_sp3.iso,if=none,id=cdrom -device ide-cd,drive=cdrom,bus=legacyide.1 Please note that you have to use the piix3-ide because Win2003 (and probably XP) does not have Q35 AHCI drivers inbox. v1 -> v2: - Added comment for the no-op _DIS (Michael S. Tsirkin) Thanks, Marcel hw/i386/acpi-build.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index 52c9470..adbf354 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -1509,6 +1509,12 @@ static Aml *build_gsi_link_dev(const char *name, uint8_t uid, uint8_t gsi) aml_append(dev, aml_name_decl("_CRS", crs)); + /* + * _DIS can be no-op because the interrupt cannot be disabled. + */ + method = aml_method("_DIS", 0, AML_NOTSERIALIZED); + aml_append(dev, method); + method = aml_method("_SRS", 1, AML_NOTSERIALIZED); aml_append(dev, method); -- 2.4.3