[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <AM0PR05MB4866E91139617C9F2380BBAFD1620@AM0PR05MB4866.eurprd05.prod.outlook.com>
Date: Fri, 1 Nov 2019 20:11:28 +0000
From: Parav Pandit <parav@...lanox.com>
To: Jason Wang <jasowang@...hat.com>,
"kvm@...r.kernel.org" <kvm@...r.kernel.org>,
"linux-s390@...r.kernel.org" <linux-s390@...r.kernel.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
"dri-devel@...ts.freedesktop.org" <dri-devel@...ts.freedesktop.org>,
"intel-gfx@...ts.freedesktop.org" <intel-gfx@...ts.freedesktop.org>,
"intel-gvt-dev@...ts.freedesktop.org"
<intel-gvt-dev@...ts.freedesktop.org>,
"kwankhede@...dia.com" <kwankhede@...dia.com>,
"alex.williamson@...hat.com" <alex.williamson@...hat.com>,
"mst@...hat.com" <mst@...hat.com>,
"tiwei.bie@...el.com" <tiwei.bie@...el.com>
CC: "virtualization@...ts.linux-foundation.org"
<virtualization@...ts.linux-foundation.org>,
"netdev@...r.kernel.org" <netdev@...r.kernel.org>,
"cohuck@...hat.com" <cohuck@...hat.com>,
"maxime.coquelin@...hat.com" <maxime.coquelin@...hat.com>,
"cunming.liang@...el.com" <cunming.liang@...el.com>,
"zhihong.wang@...el.com" <zhihong.wang@...el.com>,
"rob.miller@...adcom.com" <rob.miller@...adcom.com>,
"xiao.w.wang@...el.com" <xiao.w.wang@...el.com>,
"haotian.wang@...ive.com" <haotian.wang@...ive.com>,
"zhenyuw@...ux.intel.com" <zhenyuw@...ux.intel.com>,
"zhi.a.wang@...el.com" <zhi.a.wang@...el.com>,
"jani.nikula@...ux.intel.com" <jani.nikula@...ux.intel.com>,
"joonas.lahtinen@...ux.intel.com" <joonas.lahtinen@...ux.intel.com>,
"rodrigo.vivi@...el.com" <rodrigo.vivi@...el.com>,
"airlied@...ux.ie" <airlied@...ux.ie>,
"daniel@...ll.ch" <daniel@...ll.ch>,
"farman@...ux.ibm.com" <farman@...ux.ibm.com>,
"pasic@...ux.ibm.com" <pasic@...ux.ibm.com>,
"sebott@...ux.ibm.com" <sebott@...ux.ibm.com>,
"oberpar@...ux.ibm.com" <oberpar@...ux.ibm.com>,
"heiko.carstens@...ibm.com" <heiko.carstens@...ibm.com>,
"gor@...ux.ibm.com" <gor@...ux.ibm.com>,
"borntraeger@...ibm.com" <borntraeger@...ibm.com>,
"akrowiak@...ux.ibm.com" <akrowiak@...ux.ibm.com>,
"freude@...ux.ibm.com" <freude@...ux.ibm.com>,
"lingshan.zhu@...el.com" <lingshan.zhu@...el.com>,
Ido Shamay <idos@...lanox.com>,
"eperezma@...hat.com" <eperezma@...hat.com>,
"lulu@...hat.com" <lulu@...hat.com>,
"christophe.de.dinechin@...il.com" <christophe.de.dinechin@...il.com>,
"kevin.tian@...el.com" <kevin.tian@...el.com>,
"stefanha@...hat.com" <stefanha@...hat.com>
Subject: RE: [PATCH V6 3/6] mdev: introduce device specific ops
> -----Original Message-----
> From: Jason Wang <jasowang@...hat.com>
> Sent: Wednesday, October 30, 2019 1:45 AM
> To: kvm@...r.kernel.org; linux-s390@...r.kernel.org; linux-
> kernel@...r.kernel.org; dri-devel@...ts.freedesktop.org; intel-
> gfx@...ts.freedesktop.org; intel-gvt-dev@...ts.freedesktop.org;
> kwankhede@...dia.com; alex.williamson@...hat.com; mst@...hat.com;
> tiwei.bie@...el.com
> Cc: virtualization@...ts.linux-foundation.org; netdev@...r.kernel.org;
> cohuck@...hat.com; maxime.coquelin@...hat.com;
> cunming.liang@...el.com; zhihong.wang@...el.com;
> rob.miller@...adcom.com; xiao.w.wang@...el.com;
> haotian.wang@...ive.com; zhenyuw@...ux.intel.com; zhi.a.wang@...el.com;
> jani.nikula@...ux.intel.com; joonas.lahtinen@...ux.intel.com;
> rodrigo.vivi@...el.com; airlied@...ux.ie; daniel@...ll.ch;
> farman@...ux.ibm.com; pasic@...ux.ibm.com; sebott@...ux.ibm.com;
> oberpar@...ux.ibm.com; heiko.carstens@...ibm.com; gor@...ux.ibm.com;
> borntraeger@...ibm.com; akrowiak@...ux.ibm.com; freude@...ux.ibm.com;
> lingshan.zhu@...el.com; Ido Shamay <idos@...lanox.com>;
> eperezma@...hat.com; lulu@...hat.com; Parav Pandit
> <parav@...lanox.com>; christophe.de.dinechin@...il.com;
> kevin.tian@...el.com; stefanha@...hat.com; Jason Wang
> <jasowang@...hat.com>
> Subject: [PATCH V6 3/6] mdev: introduce device specific ops
>
> Currently, except for the create and remove, the rest of mdev_parent_ops is
> designed for vfio-mdev driver only and may not help for kernel mdev driver.
> With the help of class id, this patch introduces device specific callbacks inside
> mdev_device structure. This allows different set of callback to be used by vfio-
> mdev and virtio-mdev.
>
> Signed-off-by: Jason Wang <jasowang@...hat.com>
> ---
[ ..]
> diff --git a/include/linux/vfio_mdev_ops.h b/include/linux/vfio_mdev_ops.h
> new file mode 100644 index 000000000000..3907c5371c2b
> --- /dev/null
> +++ b/include/linux/vfio_mdev_ops.h
> @@ -0,0 +1,52 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +/*
> + * VFIO Mediated device definition
> + */
> +
> +#ifndef VFIO_MDEV_H
> +#define VFIO_MDEV_H
> +
I should have noticed this before. :-(
APIs exposed are by the mdev module and named with mdev_ prefix.
And file name is _ops.h,
We should name this file as mdev_vfio_ops.h
And #define should be MDEV_VFIO_OPS_H
> +#include <linux/mdev.h>
> +
> +/**
> + * struct vfio_mdev_device_ops - Structure to be registered for each
s/vfio_mdev_device_ops/mdev_vfio_device_ops/
Similarly for virtio in future patches.
> + * mdev device to register the device to vfio-mdev module.
> + *
> + * @open: Open mediated device.
> + * @mdev: mediated device.
> + * Returns integer: success (0) or error (< 0)
> + * @release: release mediated device
> + * @mdev: mediated device.
> + * @read: Read emulation callback
> + * @mdev: mediated device structure
> + * @buf: read buffer
> + * @count: number of bytes to read
> + * @ppos: address.
> + * Retuns number on bytes read on success or error.
> + * @write: Write emulation callback
> + * @mdev: mediated device structure
> + * @buf: write buffer
> + * @count: number of bytes to be written
> + * @ppos: address.
> + * Retuns number on bytes written on success or error.
> + * @ioctl: IOCTL callback
> + * @mdev: mediated device structure
> + * @cmd: ioctl command
> + * @arg: arguments to ioctl
> + * @mmap: mmap callback
> + * @mdev: mediated device structure
> + * @vma: vma structure
> + */
> +struct vfio_mdev_device_ops {
> + int (*open)(struct mdev_device *mdev);
> + void (*release)(struct mdev_device *mdev);
> + ssize_t (*read)(struct mdev_device *mdev, char __user *buf,
> + size_t count, loff_t *ppos);
> + ssize_t (*write)(struct mdev_device *mdev, const char __user *buf,
> + size_t count, loff_t *ppos);
> + long (*ioctl)(struct mdev_device *mdev, unsigned int cmd,
> + unsigned long arg);
> + int (*mmap)(struct mdev_device *mdev, struct vm_area_struct
> *vma);
> +};
> +
> +#endif
> diff --git a/samples/vfio-mdev/mbochs.c b/samples/vfio-mdev/mbochs.c index
> 115bc5074656..1afec20bf0c5 100644
> --- a/samples/vfio-mdev/mbochs.c
> +++ b/samples/vfio-mdev/mbochs.c
> @@ -30,6 +30,7 @@
> #include <linux/iommu.h>
> #include <linux/sysfs.h>
> #include <linux/mdev.h>
> +#include <linux/vfio_mdev_ops.h>
> #include <linux/pci.h>
> #include <linux/dma-buf.h>
> #include <linux/highmem.h>
> @@ -516,6 +517,8 @@ static int mbochs_reset(struct mdev_device *mdev)
> return 0;
> }
>
> +static const struct vfio_mdev_device_ops vfio_mdev_ops;
> +
> static int mbochs_create(struct kobject *kobj, struct mdev_device *mdev) {
> const struct mbochs_type *type = mbochs_find_type(kobj); @@ -561,7
> +564,7 @@ static int mbochs_create(struct kobject *kobj, struct mdev_device
> *mdev)
> mbochs_reset(mdev);
>
> mbochs_used_mbytes += type->mbytes;
> - mdev_set_class(mdev, MDEV_CLASS_ID_VFIO);
> + mdev_set_vfio_ops(mdev, &vfio_mdev_ops);
> return 0;
>
> err_mem:
> @@ -1419,12 +1422,7 @@ static struct attribute_group *mdev_type_groups[]
> = {
> NULL,
> };
>
> -static const struct mdev_parent_ops mdev_fops = {
> - .owner = THIS_MODULE,
> - .mdev_attr_groups = mdev_dev_groups,
> - .supported_type_groups = mdev_type_groups,
> - .create = mbochs_create,
> - .remove = mbochs_remove,
> +static const struct vfio_mdev_device_ops vfio_mdev_ops = {
> .open = mbochs_open,
> .release = mbochs_close,
> .read = mbochs_read,
> @@ -1433,6 +1431,14 @@ static const struct mdev_parent_ops mdev_fops = {
> .mmap = mbochs_mmap,
> };
>
> +static const struct mdev_parent_ops mdev_fops = {
> + .owner = THIS_MODULE,
> + .mdev_attr_groups = mdev_dev_groups,
> + .supported_type_groups = mdev_type_groups,
> + .create = mbochs_create,
> + .remove = mbochs_remove,
> +};
> +
> static const struct file_operations vd_fops = {
> .owner = THIS_MODULE,
> };
> diff --git a/samples/vfio-mdev/mdpy.c b/samples/vfio-mdev/mdpy.c index
> 665614574d50..d571fb65f50f 100644
> --- a/samples/vfio-mdev/mdpy.c
> +++ b/samples/vfio-mdev/mdpy.c
> @@ -26,6 +26,7 @@
> #include <linux/iommu.h>
> #include <linux/sysfs.h>
> #include <linux/mdev.h>
> +#include <linux/vfio_mdev_ops.h>
> #include <linux/pci.h>
> #include <drm/drm_fourcc.h>
> #include "mdpy-defs.h"
> @@ -226,6 +227,8 @@ static int mdpy_reset(struct mdev_device *mdev)
> return 0;
> }
>
> +static const struct vfio_mdev_device_ops vfio_mdev_ops;
> +
> static int mdpy_create(struct kobject *kobj, struct mdev_device *mdev) {
> const struct mdpy_type *type = mdpy_find_type(kobj); @@ -269,7
> +272,7 @@ static int mdpy_create(struct kobject *kobj, struct mdev_device
> *mdev)
> mdpy_reset(mdev);
>
> mdpy_count++;
> - mdev_set_class(mdev, MDEV_CLASS_ID_VFIO);
> + mdev_set_vfio_ops(mdev, &vfio_mdev_ops);
> return 0;
> }
>
> @@ -726,12 +729,7 @@ static struct attribute_group *mdev_type_groups[] = {
> NULL,
> };
>
> -static const struct mdev_parent_ops mdev_fops = {
> - .owner = THIS_MODULE,
> - .mdev_attr_groups = mdev_dev_groups,
> - .supported_type_groups = mdev_type_groups,
> - .create = mdpy_create,
> - .remove = mdpy_remove,
> +static const struct vfio_mdev_device_ops vfio_mdev_ops = {
> .open = mdpy_open,
> .release = mdpy_close,
> .read = mdpy_read,
> @@ -740,6 +738,14 @@ static const struct mdev_parent_ops mdev_fops = {
> .mmap = mdpy_mmap,
> };
>
> +static const struct mdev_parent_ops mdev_fops = {
> + .owner = THIS_MODULE,
> + .mdev_attr_groups = mdev_dev_groups,
> + .supported_type_groups = mdev_type_groups,
> + .create = mdpy_create,
> + .remove = mdpy_remove,
> +};
> +
> static const struct file_operations vd_fops = {
> .owner = THIS_MODULE,
> };
> diff --git a/samples/vfio-mdev/mtty.c b/samples/vfio-mdev/mtty.c index
> 90da12ff7fd9..4048b242c636 100644
> --- a/samples/vfio-mdev/mtty.c
> +++ b/samples/vfio-mdev/mtty.c
> @@ -27,6 +27,7 @@
> #include <linux/ctype.h>
> #include <linux/file.h>
> #include <linux/mdev.h>
> +#include <linux/vfio_mdev_ops.h>
> #include <linux/pci.h>
> #include <linux/serial.h>
> #include <uapi/linux/serial_reg.h>
> @@ -708,6 +709,8 @@ static ssize_t mdev_access(struct mdev_device *mdev,
> u8 *buf, size_t count,
> return ret;
> }
>
> +static const struct vfio_mdev_device_ops vfio_dev_ops;
> +
> static int mtty_create(struct kobject *kobj, struct mdev_device *mdev) {
> struct mdev_state *mdev_state;
> @@ -755,7 +758,7 @@ static int mtty_create(struct kobject *kobj, struct
> mdev_device *mdev)
> list_add(&mdev_state->next, &mdev_devices_list);
> mutex_unlock(&mdev_list_lock);
>
> - mdev_set_class(mdev, MDEV_CLASS_ID_VFIO);
> + mdev_set_vfio_ops(mdev, &vfio_dev_ops);
> return 0;
> }
>
> @@ -1388,6 +1391,14 @@ static struct attribute_group *mdev_type_groups[]
> = {
> NULL,
> };
>
> +static const struct vfio_mdev_device_ops vfio_dev_ops = {
> + .open = mtty_open,
> + .release = mtty_close,
> + .read = mtty_read,
> + .write = mtty_write,
> + .ioctl = mtty_ioctl,
> +};
> +
> static const struct mdev_parent_ops mdev_fops = {
> .owner = THIS_MODULE,
> .dev_attr_groups = mtty_dev_groups,
> @@ -1395,11 +1406,6 @@ static const struct mdev_parent_ops mdev_fops = {
> .supported_type_groups = mdev_type_groups,
> .create = mtty_create,
> .remove = mtty_remove,
> - .open = mtty_open,
> - .release = mtty_close,
> - .read = mtty_read,
> - .write = mtty_write,
> - .ioctl = mtty_ioctl,
> };
>
> static void mtty_device_release(struct device *dev)
> --
> 2.19.1
With above small nit changes to rename the fields and file,
Reviewed-by: Parav Pandit <parav@...lanox.com>
Powered by blists - more mailing lists