From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47645) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZC7Hy-00010X-SI for qemu-devel@nongnu.org; Mon, 06 Jul 2015 10:22:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZC7Hx-0000En-M4 for qemu-devel@nongnu.org; Mon, 06 Jul 2015 10:22:30 -0400 Received: from mail-wi0-x22d.google.com ([2a00:1450:400c:c05::22d]:36940) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZC7Hx-0000EV-GK for qemu-devel@nongnu.org; Mon, 06 Jul 2015 10:22:29 -0400 Received: by wiclp1 with SMTP id lp1so22849142wic.0 for ; Mon, 06 Jul 2015 07:22:29 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-94-39-132-37.clienti.tiscali.it. [94.39.132.37]) by mx.google.com with ESMTPSA id fq7sm47514674wic.5.2015.07.06.07.22.28 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 06 Jul 2015 07:22:28 -0700 (PDT) Sender: Paolo Bonzini From: Paolo Bonzini Date: Mon, 6 Jul 2015 16:22:10 +0200 Message-Id: <1436192541-65335-3-git-send-email-pbonzini@redhat.com> In-Reply-To: <1436192541-65335-1-git-send-email-pbonzini@redhat.com> References: <1436192541-65335-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PULL 02/13] piix4/ich9: do not raise SMI on ACPI enable/disable commands List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org These commands are handled entirely by QEMU. Do not raise an SMI when they happen, because Windows (at least 2008r2) expects these commands to work and (depending on the value of APMC_EN at startup) the firmware might not have installed an SMI handler. When this happens (e.g. the kernel supports SMIs, or you are using TCG, but you have used "-machine smm=off") RIP is moved to 0x38000 where there is no code to execute. Acked-by: Michael S. Tsirkin Signed-off-by: Paolo Bonzini --- hw/acpi/piix4.c | 3 +++ hw/isa/lpc_ich9.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c index 3bd1d5a..3af0fa7 100644 --- a/hw/acpi/piix4.c +++ b/hw/acpi/piix4.c @@ -112,6 +112,9 @@ static void apm_ctrl_changed(uint32_t val, void *arg) /* ACPI specs 3.0, 4.7.2.5 */ acpi_pm1_cnt_update(&s->ar, val == ACPI_ENABLE, val == ACPI_DISABLE); + if (val == ACPI_ENABLE || val == ACPI_DISABLE) { + return; + } if (d->config[0x5b] & (1 << 1)) { if (s->smi_irq) { diff --git a/hw/isa/lpc_ich9.c b/hw/isa/lpc_ich9.c index b3e0b1f..341a727 100644 --- a/hw/isa/lpc_ich9.c +++ b/hw/isa/lpc_ich9.c @@ -375,6 +375,9 @@ static void ich9_apm_ctrl_changed(uint32_t val, void *arg) acpi_pm1_cnt_update(&lpc->pm.acpi_regs, val == ICH9_APM_ACPI_ENABLE, val == ICH9_APM_ACPI_DISABLE); + if (val == ICH9_APM_ACPI_ENABLE || val == ICH9_APM_ACPI_DISABLE) { + return; + } /* SMI_EN = PMBASE + 30. SMI control and enable register */ if (lpc->pm.smi_en & ICH9_PMIO_SMI_EN_APMC_EN) { -- 1.8.3.1