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]
   |     |--- [<type-id>]
   |     |   |--- create
@@ -209,6 +210,7 @@ Directories and files under the sysfs for Each Physical Device
   |     |   |--- available_instances
   |     |   |--- device_api
   |     |   |--- description
+  |     |   |--- version
   |     |   |--- [devices]
   |     |--- [<type-id>]
   |          |--- 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
   [<type-id>], 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.
+
 * [<type-id>]
 
   The [<type-id>] 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 <type-id> 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 <type-id>. 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.
+
+  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 <type-id> that have been
@@ -327,12 +361,14 @@ card.
         |   |   |-- available_instances
         |   |   |-- create
         |   |   |-- device_api
+        |   |   |-- version
         |   |   |-- devices
         |   |   `-- name
         |   `-- mtty-2
         |       |-- available_instances
         |       |-- create
         |       |-- device_api
+        |       |-- version
         |       |-- devices
         |       `-- name
         |-- mtty_dev
diff --git a/samples/vfio-mdev/mbochs.c b/samples/vfio-mdev/mbochs.c
index b038aa9f5a70..2f5ba96b91a2 100644
--- a/samples/vfio-mdev/mbochs.c
+++ b/samples/vfio-mdev/mbochs.c
@@ -1391,11 +1391,28 @@ static ssize_t device_api_show(struct kobject *kobj, struct device *dev,
 }
 MDEV_TYPE_ATTR_RO(device_api);
 
+static ssize_t version_show(struct kobject *kobj, struct device *dev,
+		char *buf)
+{
+	/* do not support live migration */
+	return -EINVAL;
+}
+
+static ssize_t version_store(struct kobject *kobj, struct device *dev,
+		const char *buf, size_t count)
+{
+	/* do not support live migration */
+	return -EINVAL;
+}
+
+static MDEV_TYPE_ATTR_RW(version);
+
 static struct attribute *mdev_types_attrs[] = {
 	&mdev_type_attr_name.attr,
 	&mdev_type_attr_description.attr,
 	&mdev_type_attr_device_api.attr,
 	&mdev_type_attr_available_instances.attr,
+	&mdev_type_attr_version.attr,
 	NULL,
 };
 
diff --git a/samples/vfio-mdev/mdpy.c b/samples/vfio-mdev/mdpy.c
index cc86bf6566e4..ff15fdfc7d46 100644
--- a/samples/vfio-mdev/mdpy.c
+++ b/samples/vfio-mdev/mdpy.c
@@ -695,11 +695,27 @@ static ssize_t device_api_show(struct kobject *kobj, struct device *dev,
 }
 MDEV_TYPE_ATTR_RO(device_api);
 
+static ssize_t version_show(struct kobject *kobj, struct device *dev,
+		char *buf)
+{
+	/* do not support live migration */
+	return -EINVAL;
+}
+
+static ssize_t version_store(struct kobject *kobj, struct device *dev,
+		const char *buf, size_t count)
+{
+	/* do not support live migration */
+	return -EINVAL;
+}
+static MDEV_TYPE_ATTR_RW(version);
+
 static struct attribute *mdev_types_attrs[] = {
 	&mdev_type_attr_name.attr,
 	&mdev_type_attr_description.attr,
 	&mdev_type_attr_device_api.attr,
 	&mdev_type_attr_available_instances.attr,
+	&mdev_type_attr_version.attr,
 	NULL,
 };
 
diff --git a/samples/vfio-mdev/mtty.c b/samples/vfio-mdev/mtty.c
index 1c77c370c92f..4ae3aad3474d 100644
--- a/samples/vfio-mdev/mtty.c
+++ b/samples/vfio-mdev/mtty.c
@@ -1390,10 +1390,26 @@ static ssize_t device_api_show(struct kobject *kobj, struct device *dev,
 
 MDEV_TYPE_ATTR_RO(device_api);
 
+static ssize_t version_show(struct kobject *kobj, struct device *dev,
+		char *buf)
+{
+	/* do not support live migration */
+	return -EINVAL;
+}
+
+static ssize_t version_store(struct kobject *kobj, struct device *dev,
+		const char *buf, size_t count)
+{
+	/* do not support live migration */
+	return -EINVAL;
+}
+
+static MDEV_TYPE_ATTR_RW(version);
 static struct attribute *mdev_types_attrs[] = {
 	&mdev_type_attr_name.attr,
 	&mdev_type_attr_device_api.attr,
 	&mdev_type_attr_available_instances.attr,
+	&mdev_type_attr_version.attr,
 	NULL,
 };
 
