From patchwork Mon Oct 5 16:06:32 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eduardo Habkost X-Patchwork-Id: 526409 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id EF4C814029C for ; Tue, 6 Oct 2015 03:09:55 +1100 (AEDT) Received: from localhost ([::1]:46473 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zj8Kn-0000nT-Vh for incoming@patchwork.ozlabs.org; Mon, 05 Oct 2015 12:09:53 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36325) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zj8IJ-0006HA-KJ for qemu-devel@nongnu.org; Mon, 05 Oct 2015 12:07:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zj8II-0005xh-M2 for qemu-devel@nongnu.org; Mon, 05 Oct 2015 12:07:19 -0400 Received: from mx1.redhat.com ([209.132.183.28]:45785) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zj8II-0005xT-GJ for qemu-devel@nongnu.org; Mon, 05 Oct 2015 12:07:18 -0400 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id 1864691E93; Mon, 5 Oct 2015 16:07:18 +0000 (UTC) Received: from localhost (ovpn-113-182.phx2.redhat.com [10.3.113.182]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t95G7G62026060; Mon, 5 Oct 2015 12:07:17 -0400 From: Eduardo Habkost To: Peter Maydell Date: Mon, 5 Oct 2015 13:06:32 -0300 Message-Id: <1444061194-32753-11-git-send-email-ehabkost@redhat.com> In-Reply-To: <1444061194-32753-1-git-send-email-ehabkost@redhat.com> References: <1444061194-32753-1-git-send-email-ehabkost@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 209.132.183.28 Cc: qemu-devel@nongnu.org, Paolo Bonzini , Zhu Guihua , =?UTF-8?q?Andreas=20F=C3=A4rber?= , Richard Henderson Subject: [Qemu-devel] [PULL 10/12] x86: use new method to correct reset sequence X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Zhu Guihua During reset some devices (such as hpet, rtc) might send IRQ to APIC which changes APIC's state from default one it's supposed to have at machine startup time. Fix this by resetting APIC after devices have been reset to cancel any changes that qemu_devices_reset() might have done to its state. Signed-off-by: Zhu Guihua Reviewed-by: Igor Mammedov Signed-off-by: Eduardo Habkost --- hw/i386/pc.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 6a20e16..02e0b42 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1926,6 +1926,25 @@ static void pc_machine_initfn(Object *obj) NULL, &error_abort); } +static void pc_machine_reset(void) +{ + CPUState *cs; + X86CPU *cpu; + + qemu_devices_reset(); + + /* Reset APIC after devices have been reset to cancel + * any changes that qemu_devices_reset() might have done. + */ + CPU_FOREACH(cs) { + cpu = X86_CPU(cs); + + if (cpu->apic_state) { + device_reset(cpu->apic_state); + } + } +} + static unsigned pc_cpu_index_to_socket_id(unsigned cpu_index) { X86CPUTopoInfo topo; @@ -1947,6 +1966,7 @@ static void pc_machine_class_init(ObjectClass *oc, void *data) mc->default_boot_order = "cad"; mc->hot_add_cpu = pc_hot_add_cpu; mc->max_cpus = 255; + mc->reset = pc_machine_reset; hc->plug = pc_machine_device_plug_cb; hc->unplug_request = pc_machine_device_unplug_request_cb; hc->unplug = pc_machine_device_unplug_cb;