From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MDmbR-0007BX-Rv for qemu-devel@nongnu.org; Mon, 08 Jun 2009 17:42:01 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MDmbN-00079Y-45 for qemu-devel@nongnu.org; Mon, 08 Jun 2009 17:42:01 -0400 Received: from [199.232.76.173] (port=35908 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MDmbN-00079U-0j for qemu-devel@nongnu.org; Mon, 08 Jun 2009 17:41:57 -0400 Received: from mx2.redhat.com ([66.187.237.31]:56987) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MDmbM-0003Mj-Cb for qemu-devel@nongnu.org; Mon, 08 Jun 2009 17:41:56 -0400 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n58Lftat031371 for ; Mon, 8 Jun 2009 17:41:55 -0400 Message-ID: <4A2D85B8.1090301@redhat.com> Date: Tue, 09 Jun 2009 00:42:16 +0300 From: Dor Laor MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH 2/3] Add pci_bus_reset() function. References: <1244465766-6349-1-git-send-email-gleb@redhat.com> <1244465766-6349-2-git-send-email-gleb@redhat.com> <4A2D219F.1020408@redhat.com> <20090608143710.GM27210@redhat.com> In-Reply-To: <20090608143710.GM27210@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Reply-To: dlaor@redhat.com List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gleb Natapov Cc: Yaniv Kamay , Avi Kivity , qemu-devel@nongnu.org Gleb Natapov wrote: > On Mon, Jun 08, 2009 at 05:35:11PM +0300, Avi Kivity wrote: > >> Gleb Natapov wrote: >> >>> To reset internal irq handling data structures. >>> >>> Signed-off-by: Gleb Natapov >>> Signed-off-by: Yaniv Kamay >>> --- >>> hw/pci.c | 16 ++++++++++++++++ >>> 1 files changed, 16 insertions(+), 0 deletions(-) >>> >>> diff --git a/hw/pci.c b/hw/pci.c >>> index 02b335f..89fefdf 100644 >>> --- a/hw/pci.c >>> +++ b/hw/pci.c >>> @@ -88,6 +88,21 @@ static int pcibus_load(QEMUFile *f, void *opaque, int version_id) >>> return 0; >>> } >>> +static void pci_bus_reset(void *opaque) >>> +{ >>> + PCIBus *bus = (PCIBus *)opaque; >>> + int i; >>> + >>> + for (i = 0; i < bus->nirq; i++) { >>> + bus->irq_count[i] = 0; >>> + } >>> + for (i = 0; i < PCI_DEVICES_MAX; i++) { >>> + if (bus->devices[i]) >>> + memset(bus->devices[i]->irq_state, 0, >>> + sizeof(bus->devices[i]->irq_state)); >>> + } >>> +} >>> + >>> >>> >> Shouldn't each device's reset function bring its line low, thus zeroing >> the irq_state naturally? >> >> If not, we have a bug somewhere. Note we have exactly the same issue >> with save/restore. >> >> > They should, but I haven't found one that does. > virtio does and so do many others. Sad thing is that all should do it since the line is shared. e1000 and rtl8139 do not register a reset handler. Maybe we should make it a required callback for pci_qdev_register? or better have every (pci?) device register several callback together.