From: Cornelia Huck <cohuck@redhat.com>
To: Parav Pandit <parav@mellanox.com>
Cc: "christophe.de.dinechin@gmail.com"
<christophe.de.dinechin@gmail.com>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"mst@redhat.com" <mst@redhat.com>,
"airlied@linux.ie" <airlied@linux.ie>,
"joonas.lahtinen@linux.intel.com"
<joonas.lahtinen@linux.intel.com>,
"heiko.carstens@de.ibm.com" <heiko.carstens@de.ibm.com>,
"dri-devel@lists.freedesktop.org"
<dri-devel@lists.freedesktop.org>,
"virtualization@lists.linux-foundation.org"
<virtualization@lists.linux-foundation.org>,
"kwankhede@nvidia.com" <kwankhede@nvidia.com>,
"rob.miller@broadcom.com" <rob.miller@broadcom.com>,
"linux-s390@vger.kernel.org" <linux-s390@vger.kernel.org>,
"sebott@linux.ibm.com" <sebott@linux.ibm.com>,
"lulu@redhat.com" <lulu@redhat.com>,
"eperezma@redhat.com" <eperezma@redhat.com>,
"pasic@linux.ibm.com" <pasic@linux.ibm.com>,
"borntraeger@de.ibm.com" <borntraeger@de.ibm.com>,
haotian.wang@sifive.c
Subject: Re: [PATCH V3 4/7] mdev: introduce device specific ops
Date: Wed, 16 Oct 2019 10:52:32 +0200 [thread overview]
Message-ID: <20191016105232.663dd3c9.cohuck@redhat.com> (raw)
In-Reply-To: <AM0PR05MB4866954855AF080639ED2384D1920@AM0PR05MB4866.eurprd05.prod.outlook.com>
On Wed, 16 Oct 2019 05:50:08 +0000
Parav Pandit <parav@mellanox.com> wrote:
> Hi Alex,
>
> > -----Original Message-----
> > From: Alex Williamson <alex.williamson@redhat.com>
> > Sent: Tuesday, October 15, 2019 12:27 PM
> > To: Jason Wang <jasowang@redhat.com>
> > Cc: Cornelia Huck <cohuck@redhat.com>; kvm@vger.kernel.org; linux-
> > s390@vger.kernel.org; linux-kernel@vger.kernel.org; dri-
> > devel@lists.freedesktop.org; intel-gfx@lists.freedesktop.org; intel-gvt-
> > dev@lists.freedesktop.org; kwankhede@nvidia.com; mst@redhat.com;
> > tiwei.bie@intel.com; virtualization@lists.linux-foundation.org;
> > netdev@vger.kernel.org; maxime.coquelin@redhat.com;
> > cunming.liang@intel.com; zhihong.wang@intel.com;
> > rob.miller@broadcom.com; xiao.w.wang@intel.com;
> > haotian.wang@sifive.com; zhenyuw@linux.intel.com; zhi.a.wang@intel.com;
> > jani.nikula@linux.intel.com; joonas.lahtinen@linux.intel.com;
> > rodrigo.vivi@intel.com; airlied@linux.ie; daniel@ffwll.ch;
> > farman@linux.ibm.com; pasic@linux.ibm.com; sebott@linux.ibm.com;
> > oberpar@linux.ibm.com; heiko.carstens@de.ibm.com; gor@linux.ibm.com;
> > borntraeger@de.ibm.com; akrowiak@linux.ibm.com; freude@linux.ibm.com;
> > lingshan.zhu@intel.com; Ido Shamay <idos@mellanox.com>;
> > eperezma@redhat.com; lulu@redhat.com; Parav Pandit
> > <parav@mellanox.com>; christophe.de.dinechin@gmail.com;
> > kevin.tian@intel.com
> > Subject: Re: [PATCH V3 4/7] mdev: introduce device specific ops
> >
> > On Tue, 15 Oct 2019 20:17:01 +0800
> > Jason Wang <jasowang@redhat.com> wrote:
> >
> > > On 2019/10/15 下午6:41, Cornelia Huck wrote:
> > > > On Fri, 11 Oct 2019 16:15:54 +0800
> > > > Jason Wang <jasowang@redhat.com> wrote:
> > > >> @@ -167,9 +176,10 @@ register itself with the mdev core driver::
> > > >> extern int mdev_register_device(struct device *dev,
> > > >> const struct mdev_parent_ops
> > > >> *ops);
> > > >>
> > > >> -It is also required to specify the class_id through::
> > > >> +It is also required to specify the class_id and device specific ops
> > through::
> > > >>
> > > >> - extern int mdev_set_class(struct device *dev, u16 id);
> > > >> + extern int mdev_set_class(struct device *dev, u16 id,
> > > >> + const void *ops);
> > > > Apologies if that has already been discussed, but do we want a 1:1
> > > > relationship between id and ops, or can different devices with the
> > > > same id register different ops?
> > >
> > >
> > > I think we have a N:1 mapping between id and ops, e.g we want both
> > > virtio-mdev and vhost-mdev use a single set of device ops.
> >
> > The contents of the ops structure is essentially defined by the id, which is
> > why I was leaning towards them being defined together. They are effectively
> > interlocked, the id defines which mdev "endpoint"
> > driver is loaded and that driver requires mdev_get_dev_ops() to return the
> > structure required by the driver. I wish there was a way we could
> > incorporate type checking here. We toyed with the idea of having the class
> > in the same structure as the ops, but I think this approach was chosen for
> > simplicity. We could still do something like:
> >
> > int mdev_set_class_struct(struct device *dev, const struct mdev_class_struct
> > *class);
> >
> > struct mdev_class_struct {
> > u16 id;
> > union {
> > struct vfio_mdev_ops vfio_ops;
> > struct virtio_mdev_ops virtio_ops;
> > };
> > };
> >
> > Maybe even:
> >
> > struct vfio_mdev_ops *mdev_get_vfio_ops(struct mdev_device *mdev) {
> > BUG_ON(mdev->class.id != MDEV_ID_VFIO);
> > return &mdev->class.vfio_ops;
> > }
> >
> > The match callback would of course just use the mdev->class.id value.
> > Functionally equivalent, but maybe better type characteristics. Thanks,
> >
> > Alex
>
> We have 3 use cases of mdev.
> 1. current mdev binding to vfio_mdev
> 2. mdev binding to virtio
> 3. mdev binding to mlx5_core without dev_ops
>
> Also
> (a) a given parent may serve multiple types of classes in future.
> (b) number of classes may not likely explode, they will be handful of them. (vfio_mdev, virtio)
>
> So, instead of making copies of this dev_ops pointer in each mdev, it is better to keep const multiple ops in their parent device.
> Something like below,
>
> struct mdev_parent {
> [..]
> struct mdev_parent_ops *parent_ops; /* create, remove */
> struct vfio_mdev_ops *vfio_ops; /* read,write, ioctl etc */
> struct virtio_mdev_ops *virtio_ops; /* virtio ops */
> };
That feels a bit odd. Why should the parent carry pointers to every
possible version of ops?
>
> const struct vfio_mdev_ops *mdev_get_vfio_ops(struct mdev_parent *parent);
> const struct virtio_mdev_ops *mdev_get_virtio_ops(struct mdev_parent *parent);
>
> This way,
> (a) we have strong type check support
> (b) ops pointer is not duplicated across several hundred mdev devices, and don't have to set on every mdev creation
> (c) all 3 classes of mdev are supported
> (d) one extra symbol table entry used per ops type, but there are not expected to grow a lot.
> (e) multiple classes per single parent is still supported
> (f) still extendible for multiple classes (well defined classes = vfio, virtio, and vendor class)
Yet another suggestion: have the class id derive from the function you
use to set up the ops.
void mdev_set_vfio_ops(struct mdev_device *mdev, const struct vfio_mdev_ops *vfio_ops)
{
mdev->device_ops = vfio_ops;
mdev->class_id = MDEV_ID_VFIO;
}
void mdev_set_virtio_ops(struct mdev_device *mdev, const struct virtio_mdev_ops *virtio_ops)
{
mdev->device_ops = virtio_ops;
mdev->class_id = MDEV_ID_VIRTIO;
}
void mdev_set_vhost_ops(struct mdev_device *mdev, const struct virtio_mdev_ops *virtio_ops)
{
mdev->device_ops = virtio_ops;
mdev->class_id = MDEV_ID_VHOST;
}
void mdev_set_vendor_ops(struct mdev_device *mdev) /* no ops */
{
mdev->class_id = MDEV_ID_VENDOR;
}
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
next prev parent reply other threads:[~2019-10-16 8:52 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-11 8:15 [PATCH V3 0/7] mdev based hardware virtio offloading support Jason Wang
2019-10-11 8:15 ` [PATCH V3 1/7] mdev: class id support Jason Wang
2019-10-15 10:26 ` Cornelia Huck
2019-10-15 12:12 ` Jason Wang
2019-10-15 16:38 ` Alex Williamson
2019-10-16 4:38 ` Jason Wang
2019-10-16 4:57 ` Parav Pandit
2019-10-16 10:37 ` Jason Wang
2019-10-17 8:27 ` Jason Wang
2019-10-11 8:15 ` [PATCH V3 2/7] mdev: bus uevent support Jason Wang
2019-10-15 10:27 ` Cornelia Huck
2019-10-15 12:13 ` Jason Wang
2019-10-16 5:06 ` Parav Pandit
2019-10-11 8:15 ` [PATCH V3 3/7] modpost: add support for mdev class id Jason Wang
2019-10-11 8:15 ` [PATCH V3 4/7] mdev: introduce device specific ops Jason Wang
2019-10-15 10:41 ` Cornelia Huck
2019-10-15 12:17 ` Jason Wang
2019-10-15 17:26 ` Alex Williamson
2019-10-16 5:50 ` Parav Pandit
2019-10-16 8:52 ` Cornelia Huck [this message]
2019-10-16 15:31 ` Parav Pandit
2019-10-16 16:53 ` Alex Williamson
2019-10-16 20:48 ` Parav Pandit
2019-10-16 22:37 ` Alex Williamson
2019-10-17 16:29 ` Parav Pandit
2019-10-17 8:30 ` Jason Wang
2019-10-17 8:45 ` Cornelia Huck
2019-10-17 8:46 ` Jason Wang
2019-10-11 8:15 ` [PATCH V3 5/7] mdev: introduce virtio device and its device ops Jason Wang
2019-10-14 17:23 ` Stefan Hajnoczi
2019-10-15 3:27 ` Jason Wang
2019-10-11 8:15 ` [PATCH V3 6/7] virtio: introduce a mdev based transport Jason Wang
2019-10-14 17:39 ` Stefan Hajnoczi
2019-10-15 3:29 ` Jason Wang
2019-10-11 8:15 ` [PATCH V3 7/7] docs: sample driver to demonstrate how to implement virtio-mdev framework Jason Wang
2019-10-11 9:26 ` ✗ Fi.CI.CHECKPATCH: warning for mdev based hardware virtio offloading support (rev4) Patchwork
2019-10-11 10:03 ` ✓ Fi.CI.BAT: success " Patchwork
2019-10-11 17:40 ` ✓ Fi.CI.IGT: " Patchwork
2019-10-14 17:49 ` [PATCH V3 0/7] mdev based hardware virtio offloading support Stefan Hajnoczi
2019-10-15 3:37 ` Jason Wang
2019-10-15 14:37 ` Stefan Hajnoczi
2019-10-17 1:42 ` Jason Wang
2019-10-17 9:43 ` Stefan Hajnoczi
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=20191016105232.663dd3c9.cohuck@redhat.com \
--to=cohuck@redhat.com \
--cc=airlied@linux.ie \
--cc=borntraeger@de.ibm.com \
--cc=christophe.de.dinechin@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=eperezma@redhat.com \
--cc=haotian.wang@sifive.c \
--cc=heiko.carstens@de.ibm.com \
--cc=joonas.lahtinen@linux.intel.com \
--cc=kvm@vger.kernel.org \
--cc=kwankhede@nvidia.com \
--cc=linux-s390@vger.kernel.org \
--cc=lulu@redhat.com \
--cc=mst@redhat.com \
--cc=parav@mellanox.com \
--cc=pasic@linux.ibm.com \
--cc=rob.miller@broadcom.com \
--cc=sebott@linux.ibm.com \
--cc=virtualization@lists.linux-foundation.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