From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35186) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZlfFb-0002ta-9P for qemu-devel@nongnu.org; Mon, 12 Oct 2015 11:43:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZlfFY-0005YW-Ip for qemu-devel@nongnu.org; Mon, 12 Oct 2015 11:42:59 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42121) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZlfFY-0005YS-De for qemu-devel@nongnu.org; Mon, 12 Oct 2015 11:42:56 -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 24A2491592 for ; Mon, 12 Oct 2015 15:42:56 +0000 (UTC) Date: Mon, 12 Oct 2015 18:42:52 +0300 From: "Michael S. Tsirkin" Message-ID: <20151012183823-mutt-send-email-mst@redhat.com> References: <1444663074-32617-1-git-send-email-marcel@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1444663074-32617-1-git-send-email-marcel@redhat.com> Subject: Re: [Qemu-devel] [PATCH RFC] hw/virtio: Add PCIe capability to virtio devices List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Marcel Apfelbaum Cc: qemu-devel@nongnu.org On Mon, Oct 12, 2015 at 06:17:54PM +0300, Marcel Apfelbaum wrote: > The virtio devices are converted to PCI-Express > if they are plugged into a PCI-Express bus and > the 'modern' protocol is enabled. > > Signed-off-by: Marcel Apfelbaum > --- > > This is an RFC because all it does it adds the PCIe capability and nothing more. Express capability is easy. But if you go over express space you will see that a bunch of other capabilities are required, such as PM capability etc. These might need more work. > I post it early so I can get feedbacks on what is the best way to continue it. > > Any comments would be appreciated, > Thanks, > Marcel > > hw/virtio/virtio-pci.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c > index 6703806..f7c93d9 100644 > --- a/hw/virtio/virtio-pci.c > +++ b/hw/virtio/virtio-pci.c > @@ -1591,6 +1591,17 @@ static void virtio_pci_realize(PCIDevice *pci_dev, Error **errp) > > address_space_init(&proxy->modern_as, &proxy->modern_cfg, "virtio-pci-cfg-as"); > > + if (!(proxy->flags & VIRTIO_PCI_FLAG_DISABLE_MODERN) > + && pci_bus_is_express(pci_dev->bus)) { One point: we probably want to avoid doing this for integrated devices on root bus. Does pci_bus_is_express return true there? > + int pos = pci_add_capability(pci_dev, PCI_CAP_ID_EXP, 0, > + PCI_EXP_VER2_SIZEOF); > + > + if (pos > 0) { We probably want to assert on pos < 0 instead. That implies a code bug. > + pci_dev->exp.exp_cap = pos; > + pci_dev->cap_present |= QEMU_PCI_CAP_EXPRESS; > + } > + } > + > virtio_pci_bus_new(&proxy->bus, sizeof(proxy->bus), proxy); > if (k->realize) { > k->realize(proxy, errp); > -- > 2.1.0