From: Shmulik Ladkani <shmulik.ladkani@ravellosystems.com>
To: "Michael S. Tsirkin" <mst@redhat.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:01:05 +0200 [thread overview]
Message-ID: <20151214230105.6890c641@halley> (raw)
In-Reply-To: <20151214173729.GA14061@redhat.com>
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.
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:01 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 [this message]
2015-12-14 21:10 ` Michael S. Tsirkin
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=20151214230105.6890c641@halley \
--to=shmulik.ladkani@ravellosystems.com \
--cc=dmitry@daynix.com \
--cc=idan.brown@ravellosystems.com \
--cc=jasowang@redhat.com \
--cc=marcel@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/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).