From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46902) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a5lpW-0000It-7B for qemu-devel@nongnu.org; Sun, 06 Dec 2015 21:47:11 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a5lpT-0002sY-1n for qemu-devel@nongnu.org; Sun, 06 Dec 2015 21:47:10 -0500 Received: from mx1.redhat.com ([209.132.183.28]:47604) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a5lpS-0002sU-S5 for qemu-devel@nongnu.org; Sun, 06 Dec 2015 21:47:06 -0500 References: <1449069991-6109-1-git-send-email-shmulik.ladkani@ravellosystems.com> <1449069991-6109-5-git-send-email-shmulik.ladkani@ravellosystems.com> <566153B0.3030405@redhat.com> <20151204215726.7b04e578@halley> From: Jason Wang Message-ID: <5664F31C.8000702@redhat.com> Date: Mon, 7 Dec 2015 10:46:52 +0800 MIME-Version: 1.0 In-Reply-To: <20151204215726.7b04e578@halley> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 4/5] vmxnet3: The vmxnet3 device is a PCIE endpoint List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Shmulik Ladkani Cc: Dmitry Fleytman , Marcel Apfelbaum , idan.brown@ravellosystems.com, qemu-devel@nongnu.org On 12/05/2015 03:57 AM, Shmulik Ladkani wrote: > Thanks Jason, > > On Fri, 4 Dec 2015 16:49:52 +0800 Jason Wang wrote: >>> @@ -2257,6 +2262,10 @@ static void vmxnet3_pci_realize(PCIDevice *pci_dev, Error **errp) >>> >>> vmxnet3_net_init(s); >>> >>> + if (pci_is_express(pci_dev) && pci_bus_is_express(pci_dev->bus)) { >> Looks like pci_bus_is_express() has been checked in >> pcie_endpoint_cap_init(). > Yes, but only for toggling between 'type = PCI_EXP_TYPE_ENDPOINT' vs. > 'type = PCI_EXP_TYPE_RC_END'. > > We would not like to expose the capability stating device is an express > endpoint (of any kind) unless it is located on a pcie bus. Ok >>> +static void vmxnet3_realize(DeviceState *qdev, Error **errp) >>> +{ >>> + VMXNET3Class *vc = VMXNET3_DEVICE_GET_CLASS(qdev); >>> + PCIDevice *pci_dev = PCI_DEVICE(qdev); >>> + VMXNET3State *s = VMXNET3(qdev); >>> + >>> + if (!(s->compat_flags & VMXNET3_COMPAT_FLAG_DISABLE_PCIE)) { >>> + pci_dev->cap_present |= QEMU_PCI_CAP_EXPRESS; >>> + } >>> + >>> + vc->parent_dc_realize(qdev, errp); >>> +} >> It's not clear that how the class helps here. Why not simply do >> everthing in vmxnet3_pci_realize()? > Since 'vmxnet3_pci_realize' is invoked too late. By the time it's > invoked, the config space is already allocated during 'pci_qdev_realize', > without correctly knowing whether the device is pci or pcie. > > We must call 'pci_qdev_realize' (parent_dc_realize) only after > 'cap_present' is properly set. > See discussion here: > https://lists.nongnu.org/archive/html/qemu-devel/2015-12/msg00043.html Thanks for the pointer, consider 2.5 release is near. I will consider this series for 2.6 (after find some time to re-evaluate this patch). > > Regards, > Shmulik >