Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp1384562ybg; Fri, 18 Oct 2019 17:11:25 -0700 (PDT) X-Google-Smtp-Source: APXvYqwoV0yuXy40J55rKiG9cTiLGhTkO/xD1Enn8+eQARWClAxpOLOYkgMSbtM9iZP0W5NC0+RS X-Received: by 2002:a17:906:1542:: with SMTP id c2mr11083861ejd.80.1571443885297; Fri, 18 Oct 2019 17:11:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1571443885; cv=none; d=google.com; s=arc-20160816; b=KT1WTaPDqR3fFJdC5qKZHqkcU/cRPNM5EzmNiK60UVpWMPdIy3O5xf5KV3QLJHnPgu khFwaUUVgLRQTCfycpwCjm0NvQ+chCwTB/XFPBvT1e2nLO41l0cYaFIMDGLGXzlRWxYk RApXPKxQZYAZX8p+PULImJ5NQ+Fcy89q4iN2zDXPKcrOl4YjlKO0+ZJyYO4J1Kg521Sf Xs2/noW0IbV69LDcc87uB4zs8V7PqqaoKzBOR0VWSrZm0mizbD1lvH9Q5QOAibQ/kk04 7/HtA1mhGm+6WRyB6V39IVBNdrQfYgdDu4gurZZl0oTxnybxWLcoOHdQGSXDoxwobngv Q4hw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :organization:references:in-reply-to:message-id:subject:cc:to:from :date; bh=BIKJaoQ5sN02aQf/m/5a0/oNe0HTk35ZiUM1ntx4Mcc=; b=gCb+YNSvmCxr/X2SpvxYanTzL96symeNR2BWmigZqHPK5pg/65Qz9cgHpygwrqLKvd mQkUs3PDEko09oo6+AByyNplC3qa7rDXpDg8VIUVnm8xo1bTnMVSFuXK3XKaHmVyrevX rCkCPIDubt9hogX/0Kq0XwWLkKDs4pYzdNnVrfjHyHjj+3GhseVLqWnPg7u4hoYeD+tA D/Zpo2OtCfCInr0uTHaAnWk1AX4cKb48ENB38AE5WfkFInOldA2L6EOpQX37IHk5AJIy qMwaroRrFRp3nGmTELSawHeHMykDIpaAcP8sUwK/Rr42xEq/pctJFpfZ8wNcrf0q50a8 t0SQ== 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 gh3si4587748ejb.306.2019.10.18.17.11.02; Fri, 18 Oct 2019 17:11:25 -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 S2409544AbfJRHo1 (ORCPT + 99 others); Fri, 18 Oct 2019 03:44:27 -0400 Received: from mx1.redhat.com ([209.132.183.28]:54362 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727388AbfJRHo1 (ORCPT ); Fri, 18 Oct 2019 03:44:27 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id BB379793F4; Fri, 18 Oct 2019 07:44:25 +0000 (UTC) Received: from gondolin (dhcp-192-202.str.redhat.com [10.33.192.202]) by smtp.corp.redhat.com (Postfix) with ESMTP id 024D160600; Fri, 18 Oct 2019 07:44:09 +0000 (UTC) Date: Fri, 18 Oct 2019 09:44:07 +0200 From: Cornelia Huck To: Alex Williamson Cc: Jason Wang , 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, idos@mellanox.com, eperezma@redhat.com, lulu@redhat.com, parav@mellanox.com, christophe.de.dinechin@gmail.com, kevin.tian@intel.com, stefanha@redhat.com Subject: Re: [PATCH V4 3/6] mdev: introduce device specific ops Message-ID: <20191018094407.1a91e843.cohuck@redhat.com> In-Reply-To: <20191017115310.0481cc52@x1.home> References: <20191017104836.32464-1-jasowang@redhat.com> <20191017104836.32464-4-jasowang@redhat.com> <20191017170755.15506ada.cohuck@redhat.com> <20191017115310.0481cc52@x1.home> Organization: Red Hat GmbH MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Fri, 18 Oct 2019 07:44:26 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 17 Oct 2019 11:53:10 -0600 Alex Williamson wrote: > On Thu, 17 Oct 2019 17:07:55 +0200 > Cornelia Huck wrote: > > > On Thu, 17 Oct 2019 18:48:33 +0800 > > Jason Wang wrote: > > > > > 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 > > > --- > > > .../driver-api/vfio-mediated-device.rst | 25 +++++---- > > > MAINTAINERS | 1 + > > > drivers/gpu/drm/i915/gvt/kvmgt.c | 18 ++++--- > > > drivers/s390/cio/vfio_ccw_ops.c | 18 ++++--- > > > drivers/s390/crypto/vfio_ap_ops.c | 14 +++-- > > > drivers/vfio/mdev/mdev_core.c | 18 +++++-- > > > drivers/vfio/mdev/mdev_private.h | 1 + > > > drivers/vfio/mdev/vfio_mdev.c | 37 ++++++------- > > > include/linux/mdev.h | 45 ++++------------ > > > include/linux/vfio_mdev.h | 52 +++++++++++++++++++ > > > samples/vfio-mdev/mbochs.c | 20 ++++--- > > > samples/vfio-mdev/mdpy.c | 20 ++++--- > > > samples/vfio-mdev/mtty.c | 18 ++++--- > > > 13 files changed, 184 insertions(+), 103 deletions(-) > > > create mode 100644 include/linux/vfio_mdev.h > > > > > > diff --git a/Documentation/driver-api/vfio-mediated-device.rst b/Documentation/driver-api/vfio-mediated-device.rst > > > index f9a78d75a67a..0cca84d19603 100644 > > > --- a/Documentation/driver-api/vfio-mediated-device.rst > > > +++ b/Documentation/driver-api/vfio-mediated-device.rst > > > @@ -152,11 +152,22 @@ callbacks per mdev parent device, per mdev type, or any other categorization. > > > Vendor drivers are expected to be fully asynchronous in this respect or > > > provide their own internal resource protection.) > > > > > > -The callbacks in the mdev_parent_ops structure are as follows: > > > - > > > -* open: open callback of mediated device > > > -* close: close callback of mediated device > > > -* ioctl: ioctl callback of mediated device > > > +As multiple types of mediated devices may be supported, the device > > > +must set up the class id and the device specific callbacks in create() > > > > s/in create()/in the create()/ > > > > > +callback. E.g for vfio-mdev device it needs to be done through: > > > > "Each class provides a helper function to do so; e.g. for vfio-mdev > > devices, the function to be called is:" > > > > ? > > > > > + > > > + int mdev_set_vfio_ops(struct mdev_device *mdev, > > > + const struct vfio_mdev_ops *vfio_ops); > > > + > > > +The class id (set to MDEV_CLASS_ID_VFIO) is used to match a device > > > > "(set by this helper function to MDEV_CLASS_ID_VFIO)" ? > > > > > +with an mdev driver via its id table. The device specific callbacks > > > +(specified in *ops) are obtainable via mdev_get_dev_ops() (for use by > > > > "(specified in *vfio_ops by the caller)" ? > > > > > +the mdev bus driver). A vfio-mdev device (class id MDEV_CLASS_ID_VFIO) > > > +uses the following device-specific ops: > > > + > > > +* open: open callback of vfio mediated device > > > +* close: close callback of vfio mediated device > > > +* ioctl: ioctl callback of vfio mediated device > > > * read : read emulation callback > > > * write: write emulation callback > > > * mmap: mmap emulation callback > > > @@ -167,10 +178,6 @@ 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 in create() callback through:: > > > - > > > - int mdev_set_class(struct mdev_device *mdev, u16 id); > > > - > > > > I'm wondering if this patch set should start out with introducing > > helper functions already (i.e. don't introduce mdev_set_class(), but > > start out with mdev_set_class_vfio() which will gain the *vfio_ops > > argument in this patch.) > > Yes, it would be cleaner, but is it really worth the churn? Correct me > if I'm wrong, but I think we get to the same point after this patch and > aside from the function name itself, the difference is really just that > the class_id is briefly exposed to the parent driver, right? Thanks, Yes, it does not really matter much. If there's no other reason to rework things, I'd just keep this as it is now.