Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp93650yba; Tue, 23 Apr 2019 20:17:23 -0700 (PDT) X-Google-Smtp-Source: APXvYqyxrsSBUdzYaJKgSaBB6brWtgrwoums1OvVnWd7nB11k0Ml76iqV3H4Gcmf6xikt+oDuqGD X-Received: by 2002:a63:fd0c:: with SMTP id d12mr5010841pgh.172.1556075843094; Tue, 23 Apr 2019 20:17:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556075843; cv=none; d=google.com; s=arc-20160816; b=yMxXT1KiFwXvgkdD7XmVS3CrNLIet57wkcdJz7Z3RC4LhVovpIdd2dDgj8Jr5ARvS8 i4LTGm4sjJUE+fof0pOTyQOpLSSC+60xB8SbxMA1jXHDRLChS4tsRurUq4a2lUjuL3ha 0LjY3PbGQfsKCl25mDRJRLKMbOOqHDp32xy4FbKot+oPyu7EZl4oYSjgpJyjOC5UtBHG OicMiWi7WO+qo+SmY4r2mAmLx1Na3zRxnGdlZf5/o1JksUetZ5yHi0GwauZURcTTArd0 GC9+mbFLY7zeautjynlEtysr7bG3dA2CGIwyBXljUGEhJyYoLI36JsMmW6jx1MNWCn5/ PaPA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:reply-to:message-id :subject:cc:to:from:date; bh=qXYbDAWcF/lL5r79OQdbuBBU1GACPrbfKlHRUsWUcek=; b=kg68O9HDDjZQEahRJFQhd3ew4+AYookBv+ynWJZzJ/HcUV3mGb9ykbMlCMetU8LoyV DyPYFW06PjVl3D/NuN0FFdCAySYf2+DcQUI96p22keIP//p+G+z3qsBhDRhWpsJZLufR 4IDCh+tIGo1BNF5wNjvAh6CnRDxh2dVlJNSuPJf35jrAD8W9USktOOMDJbcTBXiQeCLr sz2w3YCVeqpzGJbxamBgF0FZ9jjERkDTb9p3R+i883xPVPjFs8JtOuwBehf/KZAmkr3B yxHW80dpOZbGdc5Ss6WMelAbaI+lzWDOoL4/0fmLSHNbOZNgMFZrQ7uf+tWkwiuEG0Zj jKmQ== 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=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k6si18342160pfc.122.2019.04.23.20.17.07; Tue, 23 Apr 2019 20:17:23 -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=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727044AbfDXDQQ (ORCPT + 99 others); Tue, 23 Apr 2019 23:16:16 -0400 Received: from mga02.intel.com ([134.134.136.20]:32670 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726422AbfDXDQP (ORCPT ); Tue, 23 Apr 2019 23:16:15 -0400 X-Amp-Result: UNSCANNABLE X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 23 Apr 2019 20:16:14 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,388,1549958400"; d="scan'208";a="294030231" Received: from joy-optiplex-7040.sh.intel.com (HELO joy-OptiPlex-7040) ([10.239.13.9]) by orsmga004.jf.intel.com with ESMTP; 23 Apr 2019 20:16:09 -0700 Date: Tue, 23 Apr 2019 23:10:37 -0400 From: Yan Zhao To: Cornelia Huck Cc: "cjia@nvidia.com" , "kvm@vger.kernel.org" , "aik@ozlabs.ru" , "Zhengxiao.zx@alibaba-inc.com" , "shuangtai.tst@alibaba-inc.com" , "qemu-devel@nongnu.org" , "kwankhede@nvidia.com" , "eauger@redhat.com" , "Liu, Yi L" , "eskultet@redhat.com" , "Yang, Ziye" , "mlevitsk@redhat.com" , "pasic@linux.ibm.com" , "libvir-list@redhat.com" , "arei.gonglei@huawei.com" , "felipe@nutanix.com" , "Ken.Xue@amd.com" , "Tian, Kevin" , "dgilbert@redhat.com" , "zhenyuw@linux.intel.com" , "alex.williamson@redhat.com" , "intel-gvt-dev@lists.freedesktop.org" , "Liu, Changpeng" , "linux-kernel@vger.kernel.org" , "Wang, Zhi A" , "jonathan.davies@nutanix.com" , "He, Shaopeng" Subject: Re: [PATCH 1/2] vfio/mdev: add version field as mandatory attribute for mdev device Message-ID: <20190424031036.GB26247@joy-OptiPlex-7040> Reply-To: Yan Zhao References: <20190419083258.19580-1-yan.y.zhao@intel.com> <20190419083505.19654-1-yan.y.zhao@intel.com> <20190423115932.42619422.cohuck@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190423115932.42619422.cohuck@redhat.com> User-Agent: Mutt/1.9.4 (2018-02-28) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Apr 23, 2019 at 05:59:32PM +0800, Cornelia Huck wrote: > On Fri, 19 Apr 2019 04:35:04 -0400 > Yan Zhao wrote: > > > device version attribute in mdev sysfs is used by user space software > > (e.g. libvirt) to query device compatibility for live migration of VFIO > > mdev devices. This attribute is mandatory if a mdev device supports live > > migration. > > > > It consists of two parts: common part and vendor proprietary part. > > common part: 32 bit. lower 16 bits is vendor id and higher 16 bits > > identifies device type. e.g., for pci device, it is > > "pci vendor id" | (VFIO_DEVICE_FLAGS_PCI << 16). > > vendor proprietary part: this part is varied in length. vendor driver can > > specify any string to identify a device. > > > > When reading this attribute, it should show device version string of the > > device of type . If a device does not support live migration, it > > should return errno. > > It might make more sense if the driver does not register the attribute > for the device in that case at all. > yes. what about rephrase like this: " When reading this attribute, it should show device version string of the device of type . If a device does not support live migration, it has two choices: 1. do not register this version attribute 2. return -ENODEV on rw this version attribute Choice 1 is preferred. " > > When writing a string to this attribute, it returns errno for > > incompatibility or returns written string length in compatibility case. > > If a device does not support live migration, it always returns errno. > > > > For user space software to use: > > 1. > > Before starting live migration, user space software first reads source side > > mdev device's version. e.g. > > "#cat \ > > /sys/bus/pci/devices/0000\:00\:02.0/5ac1fb20-2bbf-4842-bb7e-36c58c3be9cd/mdev_type/version" > > 00028086-193b-i915-GVTg_V5_4 > > > > 2. > > Then, user space software writes the source side returned version string > > to device version attribute in target side, and checks the return value. > > If a negative errno is returned in the target side, then mdev devices in > > source and target sides are not compatible; > > If a positive number is returned and it equals to the length of written > > string, then the two mdev devices in source and target side are compatible. > > e.g. > > (a) compatibility case > > "# echo 00028086-193b-i915-GVTg_V5_4 > > > /sys/bus/pci/devices/0000\:00\:02.0/882cc4da-dede-11e7-9180-078a62063ab1/mdev_type/version" > > > > (b) incompatibility case > > "#echo 00028086-193b-i915-GVTg_V5_1 > > > /sys/bus/pci/devices/0000\:00\:02.0/882cc4da-dede-11e7-9180-078a62063ab1/mdev_type/version" > > -bash: echo: write error: Invalid argument > > > > 3. if two mdev devices are compatible, user space software can start > > live migration, and vice versa. > > > > Note: if a mdev device does not support live migration, it either does > > not provide a version attribute, or always returns errno when its version > > attribute is read/written. > > > > Cc: Alex Williamson > > Cc: Erik Skultety > > Cc: "Dr. David Alan Gilbert" > > Cc: Cornelia Huck > > Cc: "Tian, Kevin" > > Cc: Zhenyu Wang > > Cc: "Wang, Zhi A" > > Cc: Neo Jia > > Cc: Kirti Wankhede > > > > Signed-off-by: Yan Zhao > > --- > > Documentation/vfio-mediated-device.txt | 36 ++++++++++++++++++++++++++ > > samples/vfio-mdev/mbochs.c | 17 ++++++++++++ > > samples/vfio-mdev/mdpy.c | 16 ++++++++++++ > > samples/vfio-mdev/mtty.c | 16 ++++++++++++ > > 4 files changed, 85 insertions(+) > > > > diff --git a/Documentation/vfio-mediated-device.txt b/Documentation/vfio-mediated-device.txt > > index c3f69bcaf96e..bc28471c0667 100644 > > --- a/Documentation/vfio-mediated-device.txt > > +++ b/Documentation/vfio-mediated-device.txt > > @@ -202,6 +202,7 @@ Directories and files under the sysfs for Each Physical Device > > | | |--- available_instances > > | | |--- device_api > > | | |--- description > > + | | |--- version > > | | |--- [devices] > > | |--- [] > > | | |--- create > > @@ -209,6 +210,7 @@ Directories and files under the sysfs for Each Physical Device > > | | |--- available_instances > > | | |--- device_api > > | | |--- description > > + | | |--- version > > | | |--- [devices] > > | |--- [] > > | |--- create > > @@ -216,6 +218,7 @@ Directories and files under the sysfs for Each Physical Device > > | |--- available_instances > > | |--- device_api > > | |--- description > > + | |--- version > > | |--- [devices] > > > > * [mdev_supported_types] > > @@ -225,6 +228,8 @@ Directories and files under the sysfs for Each Physical Device > > [], device_api, and available_instances are mandatory attributes > > that should be provided by vendor driver. > > > > + version is a mandatory attribute if a mdev device supports live migration. > > What about "An mdev device wishing to support live migration must > provide the version attribute."? yes, I just want to keep consistent with the line above it " [], device_api, and available_instances are mandatory attributes that should be provided by vendor driver." what about below one? "version is a mandatory attribute if a mdev device wishing to support live migration." > > + > > * [] > > > > The [] name is created by adding the device driver string as a prefix > > @@ -246,6 +251,35 @@ Directories and files under the sysfs for Each Physical Device > > This attribute should show the number of devices of type that can be > > created. > > > > +* version > > + > > + This attribute is rw. It is used to check whether two devices are compatible > > + for live migration. If this attribute is missing, then the corresponding mdev > > + device is regarded as not supporting live migration. > > + > > + It consists of two parts: common part and vendor proprietary part. > > + common part: 32 bit. lower 16 bits is vendor id and higher 16 bits identifies > > + device type. e.g., for pci device, it is > > + "pci vendor id" | (VFIO_DEVICE_FLAGS_PCI << 16). > > + vendor proprietary part: this part is varied in length. vendor driver can > > + specify any string to identify a device. > > + > > + When reading this attribute, it should show device version string of the device > > + of type . If a device does not support live migration, it should > > + return errno. > > + When writing a string to this attribute, it returns errno for incompatibility > > + or returns written string length in compatibility case. If a device does not > > + support live migration, it always returns errno. > > I'm not sure whether a device that does not support live migration > should expose this attribute in the first place. Or is that to cover > cases where a driver supports live migration only for some of the > devices it supports? yes, driver returning error code is to cover the cases where only part of devices it supports can be migrated. > Also, I'm not sure if a string that has to be parsed is a good idea... > is this 'version' attribute supposed to convey some human-readable > information as well? The procedure you describe for compatibility > checking does the checking within the vendor driver which I would > expect to have a table/rules for that anyway. right. if a vendor driver has the confidence to migrate between devices of diffent platform or mdev types, it can maintain a compatibility table for that purpose. That's the reason why we would leave the compatibility check to vendor driver. vendor driver can freely choose its own complicated way to decide which device is migratable to which device. > I think you should also specify which errno writing an incompatible id > is supposed to return (probably best something different than if the > device does not support live migration at all, if we stick with > creating the attribute in that case.) Agree. I'll define it clearly in next revison. Thanks Yan > > + > > + for example. > > + # cat \ > > + /sys/bus/pci/devices/0000\:00\:02.0/mdev_supported_types/i915-GVTg_V5_2/version > > + 00028086-193b-i915-GVTg_V5_2 > > + > > + #echo 00028086-193b-i915-GVTg_V5_2 > \ > > + /sys/bus/pci/devices/0000\:00\:02.0/mdev_supported_types/i915-GVTg_V5_4/version > > + -bash: echo: write error: Invalid argument > > + > > * [device] > > > > This directory contains links to the devices of type that have been > _______________________________________________ > intel-gvt-dev mailing list > intel-gvt-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gvt-dev