From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: Re: [PATCH] vfio-pci: Enable PCIe extended config space Date: Mon, 28 Jan 2013 19:23:16 +0200 Message-ID: <20130128172316.GA25035@redhat.com> References: <20130124004551.3605.2059.stgit@bling.home> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: qemu-devel@nongnu.org, kvm@vger.kernel.org To: Alex Williamson Return-path: Received: from mx1.redhat.com ([209.132.183.28]:7938 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757007Ab3A1RTC (ORCPT ); Mon, 28 Jan 2013 12:19:02 -0500 Content-Disposition: inline In-Reply-To: <20130124004551.3605.2059.stgit@bling.home> Sender: kvm-owner@vger.kernel.org List-ID: On Wed, Jan 23, 2013 at 05:46:13PM -0700, Alex Williamson wrote: > We don't know pre-init time whether the device we're exposing is PCIe > or legacy PCI. We could ask for it to be specified via a device > option, but that seems like too much to ask of the user. Instead we > can assume everything will be PCIe, which makes PCI-core allocate > enough config space. Removing the flag during init leaves the space > allocated, but allows legacy PCI devices to report the real device > config space size to rest of Qemu. > > Signed-off-by: Alex Williamson It's a bit of a hack but I don't have a better idea. Acked-by: Michael S. Tsirkin > --- > hw/vfio_pci.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/hw/vfio_pci.c b/hw/vfio_pci.c > index c51ae67..66537b7 100644 > --- a/hw/vfio_pci.c > +++ b/hw/vfio_pci.c > @@ -1899,6 +1899,9 @@ static int vfio_get_device(VFIOGroup *group, const char *name, VFIODevice *vdev) > (unsigned long)reg_info.flags); > > vdev->config_size = reg_info.size; > + if (vdev->config_size == PCI_CONFIG_SPACE_SIZE) { > + vdev->pdev.cap_present &= ~QEMU_PCI_CAP_EXPRESS; > + } > vdev->config_offset = reg_info.offset; > > error: > @@ -2121,6 +2124,7 @@ static void vfio_pci_dev_class_init(ObjectClass *klass, void *data) > pdc->exit = vfio_exitfn; > pdc->config_read = vfio_pci_read_config; > pdc->config_write = vfio_pci_write_config; > + pdc->is_express = 1; /* We might be */ > } > > static const TypeInfo vfio_pci_dev_info = { >