From: Dong Jia <bjsdjshi@linux.vnet.ibm.com>
To: Neo Jia <cjia@nvidia.com>
Cc: Kirti Wankhede <kwankhede@nvidia.com>,
alex.williamson@redhat.com, pbonzini@redhat.com,
kraxel@redhat.com, qemu-devel@nongnu.org, kvm@vger.kernel.org,
kevin.tian@intel.com, shuai.ruan@intel.com, jike.song@intel.com,
zhiyuan.lv@intel.com, Dong Jia <bjsdjshi@linux.vnet.ibm.com>
Subject: Re: [Qemu-devel] [RFC PATCH v4 1/3] Mediated device Core driver
Date: Mon, 6 Jun 2016 16:29:11 +0800 [thread overview]
Message-ID: <20160606162911.7021a02c@oc7835276234> (raw)
In-Reply-To: <20160606062742.GA31747@nvidia.com>
On Sun, 5 Jun 2016 23:27:42 -0700
Neo Jia <cjia@nvidia.com> wrote:
> On Mon, Jun 06, 2016 at 02:01:48PM +0800, Dong Jia wrote:
> > On Mon, 6 Jun 2016 10:57:49 +0530
> > Kirti Wankhede <kwankhede@nvidia.com> wrote:
> >
> > >
> > >
> > > On 6/3/2016 2:27 PM, Dong Jia wrote:
> > > > On Wed, 25 May 2016 01:28:15 +0530
> > > > Kirti Wankhede <kwankhede@nvidia.com> wrote:
> > > >
> > > >
> > > > ...snip...
> > > >
> > > >> +struct phy_device_ops {
> > > >> + struct module *owner;
> > > >> + const struct attribute_group **dev_attr_groups;
> > > >> + const struct attribute_group **mdev_attr_groups;
> > > >> +
> > > >> + int (*supported_config)(struct device *dev, char *config);
> > > >> + int (*create)(struct device *dev, uuid_le uuid,
> > > >> + uint32_t instance, char *mdev_params);
> > > >> + int (*destroy)(struct device *dev, uuid_le uuid,
> > > >> + uint32_t instance);
> > > >> + int (*start)(uuid_le uuid);
> > > >> + int (*shutdown)(uuid_le uuid);
> > > >> + ssize_t (*read)(struct mdev_device *vdev, char *buf, size_t count,
> > > >> + enum mdev_emul_space address_space, loff_t pos);
> > > >> + ssize_t (*write)(struct mdev_device *vdev, char *buf, size_t count,
> > > >> + enum mdev_emul_space address_space, loff_t pos);
> > > >> + int (*set_irqs)(struct mdev_device *vdev, uint32_t flags,
> > > >> + unsigned int index, unsigned int start,
> > > >> + unsigned int count, void *data);
> > > >> + int (*get_region_info)(struct mdev_device *vdev, int region_index,
> > > >> + struct pci_region_info *region_info);
> > > >> + int (*validate_map_request)(struct mdev_device *vdev,
> > > >> + unsigned long virtaddr,
> > > >> + unsigned long *pfn, unsigned long *size,
> > > >> + pgprot_t *prot);
> > > >> +};
> > > >
> > > > Dear Kirti:
> > > >
> > > > When I rebased my vfio-ccw patches on this series, I found I need an
> > > > extra 'ioctl' callback in phy_device_ops.
> > > >
> > >
> > > Thanks for taking closer look. As per my knowledge ccw is not PCI
> > > device, right? Correct me if I'm wrong.
> > Dear Kirti:
> >
> > You are right. CCW is different to PCI. The official term is 'Channel
> > I/O device'. They use 'Channels' (co-processors) and CCWs (channel
> > command words) to handle I/O operations.
> >
> > > I'm curious to know. Are you planning to write a driver (vfio-mccw) for
> > > mediated ccw device?
> > I wrote two drivers:
> > 1. A vfio-pccw driver for the physical ccw device, which will reigister
> > the device and callbacks to mdev framework. With this, I could create
> > a mediated ccw device for the physical one then.
> > 2. A vfio-mccw driver for the mediated ccw device, which will add
> > itself to a vfio_group, mimiced what vfio-mpci did.
> >
> > The problem is, vfio-mccw need to implement new ioctls besides the
> > existing ones (VFIO_DEVICE_GET_INFO, etc). And these ioctls really need
> > the physical device help to handle.
>
> Hi Dong,
>
> Could you please help us understand a bit more about the new VFIO ioctl?
Dear Neo,
Sure, with pleasure.
Since I tried not to bring too much ccw specific technical details
here, I wrote quite briefly. Please feel free to ask me for
supplements. :>
> Since it is a new ioctl it is send down by QEMU in this case right?
Right.
> More details?
As mentioned in the former emails, I currently added two new ioctl
commands.
1. VFIO_DEVICE_CCW_HOT_RESET
Both the name and the purpose of this command looks pretty the same
with VFIO_DEVICE_PCI_HOT_RESET.
Since Kevin proposed an individual callback for hot-reset handling, I
believe this will not be a problem (only if you accept the proposal).
2. VFIO_DEVICE_CCW_CMD_REQUEST
This intends to handle an intercepted channel I/O instruction. It
basically need to do the following thing:
a. Copy the raw data of the CCW program (a group of chained CCWs) from
user into kernel space buffers.
b. Do CCW program translation based on the raw data to get a
real-device runnable CCW program. We'd pin pages for those CCWs
which have memory space pointers for their offload, and update the
CCW program with the pinned results (phys).
c. Issue the translated CCW program to a real-device to perform the
I/O operation, and wait for the I/O result interrupt.
d. Once we got the I/O result, copy the result back to user, and
unpin the pages.
Step c could only be done by the physical device driver, since it's it
that the int_handler belongs to.
Step b and d should be done by the physical device driver. Or we'd
pin/unpin pages in the mediated device driver?
That's why I asked for the new callback.
>
> Thanks,
> Neo
>
> >
> > >
> > > Thanks,
> > > Kirti
> > >
> > > > The ccw physical device only supports one ccw mediated device. And I
> > > > have two new ioctl commands for the ccw mediated device. One is
> > > > to hot-reset the resource in the physical device that allocated for
> > > > the mediated device, the other is to do an I/O instruction translation
> > > > and perform an I/O operation on the physical device. I found the
> > > > existing callbacks could not meet my requirements.
> > > >
> > > > Something like the following would be fine for my case:
> > > > int (*ioctl)(struct mdev_device *vdev,
> > > > unsigned int cmd,
> > > > unsigned long arg);
> > > >
> > > > What do you think about this?
> > > >
> > > > --------
> > > > Dong Jia
> > > >
> > >
> >
> > --------
> > Dong Jia
> >
>
--------
Dong Jia
next prev parent reply other threads:[~2016-06-06 8:29 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-24 19:58 [Qemu-devel] [RFC PATCH v4 0/3] Add Mediated device support[was: Add vGPU support] Kirti Wankhede
2016-05-24 19:58 ` [Qemu-devel] [RFC PATCH v4 1/3] Mediated device Core driver Kirti Wankhede
2016-05-25 7:55 ` Tian, Kevin
2016-05-25 14:47 ` Kirti Wankhede
2016-05-27 9:00 ` Tian, Kevin
2016-05-25 22:39 ` Alex Williamson
2016-05-26 9:03 ` Kirti Wankhede
2016-05-26 14:06 ` Alex Williamson
2016-06-03 8:57 ` Dong Jia
2016-06-03 9:40 ` Tian, Kevin
2016-06-06 2:24 ` Dong Jia
2016-06-06 5:27 ` Kirti Wankhede
2016-06-06 6:01 ` Dong Jia
2016-06-06 6:27 ` Neo Jia
2016-06-06 8:29 ` Dong Jia [this message]
2016-06-06 17:44 ` Neo Jia
2016-06-06 19:31 ` Alex Williamson
2016-06-07 3:03 ` Tian, Kevin
2016-06-07 22:42 ` Alex Williamson
2016-06-08 1:18 ` Tian, Kevin
2016-06-08 1:39 ` Alex Williamson
2016-06-08 3:18 ` Dong Jia
2016-06-08 3:48 ` Neo Jia
2016-06-08 6:13 ` Dong Jia
2016-06-08 6:22 ` Neo Jia
2016-06-08 4:29 ` Alex Williamson
2016-06-15 6:37 ` Dong Jia
2016-05-24 19:58 ` [Qemu-devel] [RFC PATCH v4 2/3] VFIO driver for mediated PCI device Kirti Wankhede
2016-05-25 8:15 ` Tian, Kevin
2016-05-25 13:04 ` Kirti Wankhede
2016-05-27 10:03 ` Tian, Kevin
2016-05-27 15:13 ` Alex Williamson
2016-05-24 19:58 ` [Qemu-devel] [RFC PATCH v4 3/3] VFIO Type1 IOMMU: Add support for mediated devices Kirti Wankhede
2016-06-01 8:40 ` Dong Jia
2016-06-02 7:56 ` Neo Jia
2016-06-03 8:32 ` Dong Jia
2016-06-03 8:37 ` Tian, Kevin
2016-05-25 7:13 ` [Qemu-devel] [RFC PATCH v4 0/3] Add Mediated device support[was: Add vGPU support] Tian, Kevin
2016-05-25 13:43 ` Alex Williamson
2016-05-27 11:02 ` Tian, Kevin
2016-05-27 14:54 ` Alex Williamson
2016-05-27 22:43 ` Tian, Kevin
2016-05-28 14:56 ` Alex Williamson
2016-05-31 2:29 ` Jike Song
2016-05-31 14:29 ` Alex Williamson
2016-06-02 2:11 ` Jike Song
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=20160606162911.7021a02c@oc7835276234 \
--to=bjsdjshi@linux.vnet.ibm.com \
--cc=alex.williamson@redhat.com \
--cc=cjia@nvidia.com \
--cc=jike.song@intel.com \
--cc=kevin.tian@intel.com \
--cc=kraxel@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=kwankhede@nvidia.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=shuai.ruan@intel.com \
--cc=zhiyuan.lv@intel.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).