From mboxrd@z Thu Jan 1 00:00:00 1970 From: Neo Jia Subject: Re: [RFC PATCH v4 1/3] Mediated device Core driver Date: Sun, 5 Jun 2016 23:27:42 -0700 Message-ID: <20160606062742.GA31747@nvidia.com> References: <1464119897-10844-1-git-send-email-kwankhede@nvidia.com> <1464119897-10844-2-git-send-email-kwankhede@nvidia.com> <20160603165746.3df39542@oc7835276234> <799479b0-44d5-061f-185a-43df0dba2fb3@nvidia.com> <20160606140148.31ec05f9@oc7835276234> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Cc: Kirti Wankhede , , , , , , , , , To: Dong Jia Return-path: Received: from hqemgate15.nvidia.com ([216.228.121.64]:18820 "EHLO hqemgate15.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750891AbcFFG1q (ORCPT ); Mon, 6 Jun 2016 02:27:46 -0400 Content-Disposition: inline In-Reply-To: <20160606140148.31ec05f9@oc7835276234> Sender: kvm-owner@vger.kernel.org List-ID: On Mon, Jun 06, 2016 at 02:01:48PM +0800, Dong Jia wrote: > On Mon, 6 Jun 2016 10:57:49 +0530 > Kirti Wankhede wrote: > > > > > > > On 6/3/2016 2:27 PM, Dong Jia wrote: > > > On Wed, 25 May 2016 01:28:15 +0530 > > > Kirti Wankhede 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? Since it is a new ioctl it is send down by QEMU in this case right? More details? 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 > From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48357) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b9o0v-0002pE-Eh for qemu-devel@nongnu.org; Mon, 06 Jun 2016 02:27:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1b9o0q-0005N7-8I for qemu-devel@nongnu.org; Mon, 06 Jun 2016 02:27:53 -0400 Received: from hqemgate15.nvidia.com ([216.228.121.64]:18823) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b9o0p-0005Ms-W8 for qemu-devel@nongnu.org; Mon, 06 Jun 2016 02:27:48 -0400 Date: Sun, 5 Jun 2016 23:27:42 -0700 From: Neo Jia Message-ID: <20160606062742.GA31747@nvidia.com> References: <1464119897-10844-1-git-send-email-kwankhede@nvidia.com> <1464119897-10844-2-git-send-email-kwankhede@nvidia.com> <20160603165746.3df39542@oc7835276234> <799479b0-44d5-061f-185a-43df0dba2fb3@nvidia.com> <20160606140148.31ec05f9@oc7835276234> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <20160606140148.31ec05f9@oc7835276234> Subject: Re: [Qemu-devel] [RFC PATCH v4 1/3] Mediated device Core driver List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Dong Jia Cc: Kirti Wankhede , 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 On Mon, Jun 06, 2016 at 02:01:48PM +0800, Dong Jia wrote: > On Mon, 6 Jun 2016 10:57:49 +0530 > Kirti Wankhede wrote: > > > > > > > On 6/3/2016 2:27 PM, Dong Jia wrote: > > > On Wed, 25 May 2016 01:28:15 +0530 > > > Kirti Wankhede 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? Since it is a new ioctl it is send down by QEMU in this case right? More details? 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 >