From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:59168) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RjoqI-0006w5-8w for qemu-devel@nongnu.org; Sun, 08 Jan 2012 04:15:07 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RjoqC-0001Pr-Si for qemu-devel@nongnu.org; Sun, 08 Jan 2012 04:15:06 -0500 Received: from mx1.redhat.com ([209.132.183.28]:11583) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RjoqC-0001Pk-MB for qemu-devel@nongnu.org; Sun, 08 Jan 2012 04:15:00 -0500 Date: Sun, 8 Jan 2012 11:17:08 +0200 From: "Michael S. Tsirkin" Message-ID: <20120108091706.GA25444@redhat.com> References: <1325687322-6797-1-git-send-email-avi@redhat.com> <20120104144721.GA5961@redhat.com> <4F05BE55.8030209@weilnetz.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F05BE55.8030209@weilnetz.de> Subject: Re: [Qemu-devel] [PATCH master/stable-1.0] pci: fix corrupted pci conf index register by unaligned write List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Weil Cc: Avi Kivity , qemu-devel@nongnu.org On Thu, Jan 05, 2012 at 04:14:29PM +0100, Stefan Weil wrote: > Am 04.01.2012 15:47, schrieb Michael S. Tsirkin: > >On Wed, Jan 04, 2012 at 04:28:42PM +0200, Avi Kivity wrote: > >>Commit d0ed8076cbdc261 converted the PCI config access to the memory > >>API, but also inadvertantly changed it to accept unaligned writes, > >>and corrupt the index register in the process. This causes a regression > >>booting NetBSD. > >> > >>Fix by ignoring unaligned or non-dword writes. > >> > >>https://bugs.launchpad.net/qemu/+bug/897771 > >> > >>Reported-by: Andreas Gustafsson > >>Signed-off-by: Avi Kivity > > > >Acked-by: Michael S. Tsirkin > > > >>--- > >> > >>hw/pci_host.c | 3 +++ > >>1 files changed, 3 insertions(+), 0 deletions(-) > >> > >>diff --git a/hw/pci_host.c b/hw/pci_host.c > >>index 44c6c20..8041778 100644 > >>--- a/hw/pci_host.c > >>+++ b/hw/pci_host.c > >>@@ -101,6 +101,9 @@ static void pci_host_config_write(void > >>*opaque, target_phys_addr_t addr, > >> > >>PCI_DPRINTF("%s addr " TARGET_FMT_plx " len %d val %"PRIx64"\n", > >>__func__, addr, len, val); > >>+ if (addr != 0 || len != 4) { > >>+ return; > >>+ } > >>s->config_reg = val; > >>} > >> > >>-- > >>1.7.7.1 > > Non dword writes are quite common. I get them with Linux kernels, too. > Do you really want to ignore them? Are you sure? Note this is an io write at cf8. Not an unaligned config write. > And the check for unaligned writes is, well, unusual :-) This seems to be how memory API behaves ... right, Avi? Maybe this should be documented somewhere. > Regards, > Stefan