From: "Michael S. Tsirkin" <mst@redhat.com>
To: Shmulik Ladkani <shmulik.ladkani@ravellosystems.com>
Cc: Jason Wang <jasowang@redhat.com>,
idan.brown@ravellosystems.com, qemu-devel@nongnu.org,
Marcel Apfelbaum <marcel@redhat.com>,
Dmitry Fleytman <dmitry@daynix.com>,
Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v2 5/6] vmw_pvscsi: The pvscsi device is a PCIE endpoint
Date: Mon, 14 Dec 2015 23:10:20 +0200 [thread overview]
Message-ID: <20151214230450-mutt-send-email-mst@redhat.com> (raw)
In-Reply-To: <20151214230105.6890c641@halley>
On Mon, Dec 14, 2015 at 11:01:05PM +0200, Shmulik Ladkani wrote:
> Hi Michael,
>
> On Mon, 14 Dec 2015 19:37:29 +0200 "Michael S. Tsirkin" <mst@redhat.com> wrote:
> > On Mon, Dec 14, 2015 at 06:14:37PM +0100, Paolo Bonzini wrote:
> > >
> > > On 13/12/2015 09:08, Shmulik Ladkani wrote:
> > > > + pvs_k->parent_dc_realize = dc->realize;
> > >
> > > Marcel, Michael,
> > >
> > > this creates a really nasty dependency on the contents of pci_qdev_realize.
> > >
> > > Can you instead change PCIDeviceClass's pc->is_express to a function
> > > pointer, and provide a sample implementation pci_is_express_true for the
> > > devices that set is_express to true?
> > >
> >
> > I'm not very familiar with vmw code, and I dislike overusing callbacks.
> > What exactly would this callback do?
>
> Not specific to vmw.
>
> Recently we've made virtio-pci a pcie:
> 1811e64c hw/virtio: Add PCIe capability to virtio devices
>
> For migration, 'x-pcie-disable' proprety was introduced.
> Thus, instances of virtio-pci may be either pci or pcie.
>
> We'd like to do the same for vmxnet3 and vmw_pvscsi.
>
> This exposes a design limitation.
>
> PCIDeviceClass.is_express is a propery of the class.
> All pci_dev instances get the QEMU_PCI_CAP_EXPRESS bit assigned into
> their 'cap_present' according to their class 'pc->is_express' value,
> early in 'pci_qdev_realize', quote:
>
> static void pci_qdev_realize(DeviceState *qdev, Error **errp)
> ...
> /* initialize cap_present for pci_is_express() and pci_config_size() */
> if (pc->is_express) {
> pci_dev->cap_present |= QEMU_PCI_CAP_EXPRESS;
> }
>
>
> However, we'd like to set QEMU_PCI_CAP_EXPRESS conditionally per
> instance.
>
> In order to set QEMU_PCI_CAP_EXPRESS conditionally per instance
> (for example, according to the given x-pcie-disable property), the
> 'parent_dc_realize' trick was suggested.
>
> Reasoning is documented in:
> 0560b0e9 virtio-pci: Set the QEMU_PCI_CAP_EXPRESS capability early in its DeviceClass realize method
>
> Alas, the same trick needs to be repeated for all classes whose
> instances may be either pci or pcie.
Actually, I think you can just move the code to pci core.
There won't be a need for a callback then.
> What Paolo suggest, is having a callback which can return whether the
> device *instance* needs the QEMU_PCI_CAP_EXPRESS bit.
>
> So in 'pci_qdev_realize', instead of:
>
> if (pc->is_express)
> pci_dev->cap_present |= QEMU_PCI_CAP_EXPRESS;
>
> we'll have something like:
>
> if (pc->is_express(qdev))
> pci_dev->cap_present |= QEMU_PCI_CAP_EXPRESS;
>
> WDYT?
>
> Regards,
> Shmulik
next prev parent reply other threads:[~2015-12-14 21:10 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-13 8:08 [Qemu-devel] [PATCH v2 0/6] pvscsi: Fine-tune device capabilities Shmulik Ladkani
2015-12-13 8:08 ` [Qemu-devel] [PATCH v2 1/6] vmw_pvscsi: Set device subsystem and revision Shmulik Ladkani
2015-12-13 8:08 ` [Qemu-devel] [PATCH v2 2/6] vmw_pvscsi: Change offset of msi pci capability Shmulik Ladkani
2015-12-13 8:08 ` [Qemu-devel] [PATCH v2 3/6] vmw_pvscsi: Introduce 'x-old-pci-configuration' backword compatability property Shmulik Ladkani
2015-12-13 8:08 ` [Qemu-devel] [PATCH v2 4/6] vmw_pvscsi: coding: Introduce PVSCSIClass Shmulik Ladkani
2015-12-13 8:08 ` [Qemu-devel] [PATCH v2 5/6] vmw_pvscsi: The pvscsi device is a PCIE endpoint Shmulik Ladkani
2015-12-14 17:14 ` Paolo Bonzini
2015-12-14 17:31 ` Shmulik Ladkani
2015-12-14 17:37 ` Michael S. Tsirkin
2015-12-14 18:05 ` Paolo Bonzini
2015-12-14 21:01 ` Shmulik Ladkani
2015-12-14 21:10 ` Michael S. Tsirkin [this message]
2015-12-15 5:48 ` Shmulik Ladkani
2015-12-14 18:25 ` Marcel Apfelbaum
2015-12-13 8:08 ` [Qemu-devel] [PATCH v2 6/6] vmw_pvscsi: Introduce 'x-disable-pcie' backword compatability property Shmulik Ladkani
2015-12-14 17:07 ` Paolo Bonzini
2015-12-14 17:12 ` Michael S. Tsirkin
2015-12-14 17:28 ` Paolo Bonzini
2015-12-14 17:35 ` Michael S. Tsirkin
2015-12-14 18:04 ` Paolo Bonzini
2015-12-14 18:26 ` Michael S. Tsirkin
2015-12-15 8:13 ` Shmulik Ladkani
2015-12-13 8:24 ` [Qemu-devel] [PATCH v2 0/6] pvscsi: Fine-tune device capabilities Dmitry Fleytman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20151214230450-mutt-send-email-mst@redhat.com \
--to=mst@redhat.com \
--cc=dmitry@daynix.com \
--cc=idan.brown@ravellosystems.com \
--cc=jasowang@redhat.com \
--cc=marcel@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=shmulik.ladkani@ravellosystems.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).