@@ -202,6 +202,7 @@ Directories and files under the sysfs for Each Physical Device
| | |--- available_instances
| | |--- device_api
| | |--- description
+ | | |--- migration_version
| | |--- [devices]
| |--- [<type-id>]
| | |--- create
@@ -209,6 +210,7 @@ Directories and files under the sysfs for Each Physical Device
| | |--- available_instances
| | |--- device_api
| | |--- description
+ | | |--- migration_version
| | |--- [devices]
| |--- [<type-id>]
| |--- create
@@ -216,6 +218,7 @@ Directories and files under the sysfs for Each Physical Device
| |--- available_instances
| |--- device_api
| |--- description
+ | |--- migration_version
| |--- [devices]
* [mdev_supported_types]
@@ -246,6 +249,116 @@ 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.
+* migration_version
+
+ This attribute is rw, and is optional.
+ It is used to check migration compatibility between two mdev devices of the
+ same mdev type. Absence of this attribute means the device of type <type-id>
+ does not support migration.
+ This attribute provides a way to check migration compatibility between two
+ mdev devices from userspace even before device creation. The intended usage is
+ for userspace to read the migration_version attribute from one mdev device and
+ then writing that value to the migration_version attribute of the other mdev
+ device. The second mdev device indicates compatibility via the return code of
+ the write operation. This makes compatibility between mdev devices completely
+ vendor-defined and opaque to userspace. Userspace should do nothing more
+ than verify the mdev types match and then use the migration_version attribute
+ to confirm source to target compatibility.
+
+ Reading/Writing Attribute Data:
+ read(2) will fail if device of type <type-id> does not support migration and
+ otherwise succeed and return migration_version string of the device of
+ type <type-id>.
+
+ This migration_version string is vendor defined and opaque to the
+ userspace. Vendor is free to include whatever they feel is relevant.
+ e.g. <pciid of parent device>-<software version>.
+
+ Restrictions on this migration_version string:
+ 1. It should only contain ascii characters
+ 2. MAX Length is PATH_MAX (4096)
+
+ write(2) expects migration_version string of source mdev device, and will
+ succeed if it is determined to be compatible and otherwise fail with
+ vendor specific errno.
+
+ Errno:
+ -An errno on read(2) indicates the device of type <type-id> does not support
+ migration;
+ -An errno on write(2) indicates the devices are incompatible or the target
+ doesn't support migration.
+ Vendor driver is free to define specific errno and is suggested to
+ print detailed error in syslog for diagnose purpose.
+
+ Userspace should treat ANY of below conditions as two mdev devices not
+ compatible:
+ (0) The mdev devices are not of the same type
+ (1) any one of the two mdev devices does not have a migration_version
+ attribute
+ (2) error when reading from migration_version attribute of one mdev device
+ (3) error when writing migration_version string of one mdev device to
+ migration_version attribute of the other mdev device
+
+ Userspace should regard two mdev devices compatible when ALL of below
+ conditions are met:
+ (0) The mdev devices are of the same type
+ (1) success when reading from migration_version attribute of one mdev device.
+ (2) success when writing migration_version string of one mdev device to
+ migration_version attribute of the other mdev device.
+
+ Example Usage:
+ (1) Compare mdev types:
+
+ The mdev type of an instantiated device can be read from the mdev_type link
+ within the device instance in sysfs, for example:
+
+ # basename $(readlink -f /sys/bus/mdev/devices/$MDEV_UUID/mdev_type/)
+
+ The mdev types available on a given host system can also be found through
+ /sys/class/mdev_bus, for example:
+
+ # ls /sys/class/mdev_bus/*/mdev_supported_types/
+
+ Migration is only possible between devices of the same mdev type.
+
+ (2) Retrieve the mdev source migration_version:
+
+ The migration_version information can either be read from the mdev_type link
+ on an instantiated device:
+
+ # cat /sys/bus/mdev/devices/$UUID1/mdev_type/migration_version
+
+ Or it can be read from the mdev type definition, for example:
+
+ # cat /sys/class/mdev_bus/*/mdev_supported_types/$MDEV_TYPE/migration_version
+
+ If reading the source migration_version generates an error, migration is not
+ possible.
+ NB, there might be several parent devices for a given mdev type on a host
+ system, each may support or expose different migration_versions.
+ Matching the specific mdev type to a parent may become important in such
+ configurations.
+
+ (3) Test source migration_version at target:
+
+ Given a migration_version as outlined above, its compatibility to an
+ instantiated device of the same mdev type can be tested as:
+ # echo $VERSION > /sys/bus/mdev/devices/$UUID2/mdev_type/migration_version
+
+ If this write fails, the source and target migration versions are not
+ compatible or the target does not support migration.
+
+ Compatibility can also be tested prior to target device creation using the
+ mdev type definition for a parent device with a previously found matching mdev
+ type, for example:
+
+ # echo $VERSION > \
+ /sys/class/mdev_bus/$PARENT/mdev_supported_types/$MDEV_TYPE/migration_version
+
+ Again, an error writing the migration_version indicates that an instance of
+ this mdev type would not support a migration from the provided migration
+ version.
+
* [device]
This directory contains links to the devices of type <type-id> that have been