Received: by 2002:a25:824b:0:0:0:0:0 with SMTP id d11csp1422855ybn; Wed, 25 Sep 2019 18:13:32 -0700 (PDT) X-Google-Smtp-Source: APXvYqznfqTwajiQm89QKLFXuB/9dqMUtqfwg0Qhn1IIimmYB5R4xM3LKZzSfS9mpAicl1ZLZ8Af X-Received: by 2002:a50:934c:: with SMTP id n12mr1005421eda.12.1569460412350; Wed, 25 Sep 2019 18:13:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1569460412; cv=none; d=google.com; s=arc-20160816; b=Mblef6o7EMUFrUZCdw5ssMmGzHlimHIC4sVdaGL0zi8WxLSKw3BQlwyF3T7uC8sxwg 1aHfpYCYIXDPHKmVEPQcyg0GBdcbLmYrn6xW1Q1eviB5kX04sIXnFi5UcnWjmpiTqMVT IBIAu319o6XuEYF18EQxo4PV/r/ykeizH+juLyVa5YuQIvrC+jHiNif+R9EG55pipUiX wQpcfjlnb439J1TxFqsOBTSXs2I8znh/GyL+FHH3qeGRi/4mUF+hB5eNJMaeH0CLWuf3 v/7GcSXlgc98/qRpHbGY8FNQbJ+FbHw71lWu/7xFTL+9GDSWQSJ4g1OPbbPHHkTNQegJ avFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=Kd6Uq3YTrnCkwhfQu3irS1UvoxFlL4jpDNDjMIh8F8Q=; b=ZuZr4y/CNTbyVVPQ9XsfonWrapDnJch5m+xb/XXDn6JWG36Y5qvx+NnAevgijsbDsX ZMXljpbtYFpatuuP5y/pZhka7tvCG5If+g4pNgvYWFWrKM0ET5Sy/pr9zqwS9MWWnm1o D4BgNMMJV1o6pjAd/XRPGJ1wRo8hYDH+zt0X2cs3t6cI1nbo4c7djOWJLKqXzYIpHlgH GzcLUP1AkAS/t50jEZibfUoEP1ziwyKKf44o3HGEu0nyEo6mJDlic04ePP+ojn51IK1R 9A7EqC/YHBWl0TQ8Ir5lXJ+NGPucvZSyYQL+6z8Vdjkza90jGlutXKWGgLexIWGd5QPC OP0Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d24si417360ede.119.2019.09.25.18.13.08; Wed, 25 Sep 2019 18:13:32 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2504463AbfIXKMC (ORCPT + 99 others); Tue, 24 Sep 2019 06:12:02 -0400 Received: from mx1.redhat.com ([209.132.183.28]:54188 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2438540AbfIXKMC (ORCPT ); Tue, 24 Sep 2019 06:12:02 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1163330860BD; Tue, 24 Sep 2019 10:12:01 +0000 (UTC) Received: from [10.72.12.44] (ovpn-12-44.pek2.redhat.com [10.72.12.44]) by smtp.corp.redhat.com (Postfix) with ESMTP id B7AF219C58; Tue, 24 Sep 2019 10:11:39 +0000 (UTC) Subject: Re: [PATCH 1/6] mdev: class id support To: Alex Williamson Cc: 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, cohuck@redhat.com, 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, idos@mellanox.com, eperezma@redhat.com, lulu@redhat.com, parav@mellanox.com References: <20190923130331.29324-1-jasowang@redhat.com> <20190923130331.29324-2-jasowang@redhat.com> <20190923100529.54568ad8@x1.home> From: Jason Wang Message-ID: Date: Tue, 24 Sep 2019 18:11:37 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <20190923100529.54568ad8@x1.home> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Content-Language: en-US X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Tue, 24 Sep 2019 10:12:01 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2019/9/24 上午12:05, Alex Williamson wrote: > On Mon, 23 Sep 2019 21:03:26 +0800 > Jason Wang wrote: > >> Mdev bus only supports vfio driver right now, so it doesn't implement >> match method. But in the future, we may add drivers other than vfio, >> one example is virtio-mdev[1] driver. This means we need to add device >> class id support in bus match method to pair the mdev device and mdev >> driver correctly. >> >> So this patch adds id_table to mdev_driver and class_id for mdev >> parent with the match method for mdev bus. >> >> Signed-off-by: Jason Wang >> --- >> Documentation/driver-api/vfio-mediated-device.rst | 7 +++++-- >> drivers/gpu/drm/i915/gvt/kvmgt.c | 2 +- >> drivers/s390/cio/vfio_ccw_ops.c | 2 +- >> drivers/s390/crypto/vfio_ap_ops.c | 3 ++- >> drivers/vfio/mdev/mdev_core.c | 14 ++++++++++++-- >> drivers/vfio/mdev/mdev_driver.c | 14 ++++++++++++++ >> drivers/vfio/mdev/mdev_private.h | 1 + >> drivers/vfio/mdev/vfio_mdev.c | 6 ++++++ >> include/linux/mdev.h | 7 ++++++- >> include/linux/mod_devicetable.h | 8 ++++++++ >> samples/vfio-mdev/mbochs.c | 2 +- >> samples/vfio-mdev/mdpy.c | 2 +- >> samples/vfio-mdev/mtty.c | 2 +- >> 13 files changed, 59 insertions(+), 11 deletions(-) >> >> diff --git a/Documentation/driver-api/vfio-mediated-device.rst b/Documentation/driver-api/vfio-mediated-device.rst >> index 25eb7d5b834b..0e052072e1d8 100644 >> --- a/Documentation/driver-api/vfio-mediated-device.rst >> +++ b/Documentation/driver-api/vfio-mediated-device.rst >> @@ -102,12 +102,14 @@ structure to represent a mediated device's driver:: >> * @probe: called when new device created >> * @remove: called when device removed >> * @driver: device driver structure >> + * @id_table: the ids serviced by this driver. >> */ >> struct mdev_driver { >> const char *name; >> int (*probe) (struct device *dev); >> void (*remove) (struct device *dev); >> struct device_driver driver; >> + const struct mdev_class_id *id_table; >> }; >> >> A mediated bus driver for mdev should use this structure in the function calls >> @@ -116,7 +118,7 @@ to register and unregister itself with the core driver: >> * Register:: >> >> extern int mdev_register_driver(struct mdev_driver *drv, >> - struct module *owner); >> + struct module *owner); >> >> * Unregister:: >> >> @@ -163,7 +165,8 @@ A driver should use the mdev_parent_ops structure in the function call to >> register itself with the mdev core driver:: >> >> extern int mdev_register_device(struct device *dev, >> - const struct mdev_parent_ops *ops); >> + const struct mdev_parent_ops *ops, >> + u8 class_id); >> >> However, the mdev_parent_ops structure is not required in the function call >> that a driver should use to unregister itself with the mdev core driver:: >> diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c >> index 23aa3e50cbf8..19d51a35f019 100644 >> --- a/drivers/gpu/drm/i915/gvt/kvmgt.c >> +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c >> @@ -1625,7 +1625,7 @@ static int kvmgt_host_init(struct device *dev, void *gvt, const void *ops) >> return -EFAULT; >> intel_vgpu_ops.supported_type_groups = kvm_vgpu_type_groups; >> >> - return mdev_register_device(dev, &intel_vgpu_ops); >> + return mdev_register_vfio_device(dev, &intel_vgpu_ops); >> } >> >> static void kvmgt_host_exit(struct device *dev) >> diff --git a/drivers/s390/cio/vfio_ccw_ops.c b/drivers/s390/cio/vfio_ccw_ops.c >> index f0d71ab77c50..246ff0f80944 100644 >> --- a/drivers/s390/cio/vfio_ccw_ops.c >> +++ b/drivers/s390/cio/vfio_ccw_ops.c >> @@ -588,7 +588,7 @@ static const struct mdev_parent_ops vfio_ccw_mdev_ops = { >> >> int vfio_ccw_mdev_reg(struct subchannel *sch) >> { >> - return mdev_register_device(&sch->dev, &vfio_ccw_mdev_ops); >> + return mdev_register_vfio_device(&sch->dev, &vfio_ccw_mdev_ops); >> } >> >> void vfio_ccw_mdev_unreg(struct subchannel *sch) >> diff --git a/drivers/s390/crypto/vfio_ap_ops.c b/drivers/s390/crypto/vfio_ap_ops.c >> index 5c0f53c6dde7..7487fc39d2c5 100644 >> --- a/drivers/s390/crypto/vfio_ap_ops.c >> +++ b/drivers/s390/crypto/vfio_ap_ops.c >> @@ -1295,7 +1295,8 @@ int vfio_ap_mdev_register(void) >> { >> atomic_set(&matrix_dev->available_instances, MAX_ZDEV_ENTRIES_EXT); >> >> - return mdev_register_device(&matrix_dev->device, &vfio_ap_matrix_ops); >> + return mdev_register_vfio_device(&matrix_dev->device, >> + &vfio_ap_matrix_ops); >> } >> >> void vfio_ap_mdev_unregister(void) >> diff --git a/drivers/vfio/mdev/mdev_core.c b/drivers/vfio/mdev/mdev_core.c >> index b558d4cfd082..a02c256a3514 100644 >> --- a/drivers/vfio/mdev/mdev_core.c >> +++ b/drivers/vfio/mdev/mdev_core.c >> @@ -135,11 +135,14 @@ static int mdev_device_remove_cb(struct device *dev, void *data) >> * mdev_register_device : Register a device >> * @dev: device structure representing parent device. >> * @ops: Parent device operation structure to be registered. >> + * @id: device id. >> * >> * Add device to list of registered parent devices. >> * Returns a negative value on error, otherwise 0. >> */ >> -int mdev_register_device(struct device *dev, const struct mdev_parent_ops *ops) >> +int mdev_register_device(struct device *dev, >> + const struct mdev_parent_ops *ops, >> + u8 class_id) >> { >> int ret; >> struct mdev_parent *parent; >> @@ -175,6 +178,7 @@ int mdev_register_device(struct device *dev, const struct mdev_parent_ops *ops) >> >> parent->dev = dev; >> parent->ops = ops; >> + parent->class_id = class_id; >> > I don't think we want to tie the class_id to the parent. mdev parent > devices can create various types of devices, some might be virtio, some > might be vfio. I think the cover letter even suggests that's a > direction these virtio devices might be headed. It seems the class > should be on the resulting device itself. That also suggests that at > the parent we cannot have a single device_ops, the ops used will depend > on the type of device created. Perhaps that means we need vfio_ops > alongside virtio_ops, rather than a common device_ops. Thanks, > > Alex > Yes, will do it in V2. Thanks