** Description changed:

+ == SRU Justification ==
+ 
+ APQN tags in the zcrypt device driver are required to support
+ deterministic driver binding
+ 
+ With the introduction of KVM hw crypto virtualization (on s390x) the driver 
bound to an AP queue device is no longer unique determined.
+ Therefore a deterministic hot plugging semantics of AP queues that may be 
bound to multiple drivers is needed.
+ With the three listed commits here it will be possible to configure an AP 
queue (APQN) as being bound to a particular driver even if the associate hw 
gets intermittently lost and reconnected.
+ 
+ == Fix ==
+ 
+ ac2b96f351d7d222 ("s390/zcrypt: code beautify")
+ 7e0bdbe5c21cb831 ("s390/zcrypt: AP bus support for alternate driver(s)")
+ 3d8f60d38e249f98 ("s390/zcrypt: hex string mask improvements for apmask and 
aqmask")
+ 
+ == Patch ==
+ 
+ Git-commit: ac2b96f351d7d222
+ 
https://github.com/torvalds/linux/commit/ac2b96f351d7d222c46e524feca03005f3fa8d75
+ Author: Harald Freudenberger <[email protected]>
+ Date:   Fri Aug 17 12:36:01 2018 +0200
+ s390/zcrypt: code beautify
+ Code beautify by following most of the checkpatch suggestions:
+  - SPDX license identifier line complains by checkpatch
+  - missing space or newline complains by checkpatch
+  - octal numbers for permssions complains by checkpatch
+  - renaming of static sysfs functions complains by checkpatch
+  - fix of block comment complains by checkpatch
+  - fix printf like calls where function name instead of %s __func__
+    was used
+  - __packed instead of __attribute__((packed))
+  - init to zero for static variables removed
+  - use of DEVICE_ATTR_RO and DEVICE_ATTR_RW macros
+ 
+ No functional code changes or API changes!
+ 
+ Signed-off-by: Harald Freudenberger <[email protected]>
+ Signed-off-by: Martin Schwidefsky <[email protected]>
+ 
+ ===
+ 
+ Git-commit 7e0bdbe5c21cb831
+ 
https://github.com/torvalds/linux/commit/7e0bdbe5c21cb8316a694e46ad5aad339f6894a6
+ Author: Harald Freudenberger <[email protected]>
+ Date:   Fri Jul 20 08:36:53 2018 +0200
+ s390/zcrypt: AP bus support for alternate driver(s)
+ The current AP bus, AP devices and AP device drivers implementation
+ uses a clearly defined mapping for binding AP devices to AP device
+ drivers. So for example a CEX6C queue will always be bound to the
+ cex4queue device driver.
+ 
+ The Linux Device Driver model has no sensitivity for more than one
+ device driver eligible for one device type. If there exist more than
+ one drivers matching to the device type, simple all drivers are tried
+ consecutively.  There is no way to determine and influence the probing
+ order of the drivers.
+ 
+ With KVM there is a need to provide additional device drivers matching
+ to the very same type of AP devices. With a simple implementation the
+ KVM drivers run in competition to the regular drivers. Whichever
+ 'wins' a device depends on build order and implementation details
+ within the common Linux Device Driver Model and is not
+ deterministic. However, a userspace process could figure out which
+ device should be bound to which driver and sort out the correct
+ binding by manipulating attributes in the sysfs.
+ 
+ If for security reasons a AP device must not get bound to the 'wrong'
+ device driver the sorting out has to be done within the Linux kernel
+ by the AP bus code. This patch modifies the behavior of the AP bus
+ for probing drivers for devices in a way that two sets of drivers are
+ usable. Two new bitmasks 'apmask' and 'aqmask' are used to mark a
+ subset of the APQN range for 'usable by the ap bus and the default
+ drivers' or 'not usable by the default drivers and thus available for
+ alternate drivers like vfio-xxx'. So an APQN which is addressed by
+ this masking only the default drivers will be probed. In contrary an
+ APQN which is not addressed by the masks will never be probed and
+ bound to default drivers but onny to alternate drivers.
+ 
+ Eventually the two masks give a way to divide the range of APQNs into
+ two pools: one pool of APQNs used by the AP bus and the default
+ drivers and thus via zcrypt drivers available to the userspace of the
+ system. And another pool where no zcrypt drivers are bound to and
+ which can be used by alternate drivers (like vfio-xxx) for their
+ needs. This division is hot-plug save and makes sure a APQN assigned
+ to an alternate driver is at no time somehow exploitable by the wrong
+ party.
+ 
+ The two masks are located in sysfs at /sys/bus/ap/apmask and
+ /sys/bus/ap/aqmask.  The mask syntax is exactly the same as the
+ already existing mask attributes in the /sys/bus/ap directory (for
+ example ap_usage_domain_mask and ap_control_domain_mask).
+ 
+ By default all APQNs belong to the ap bus and the default drivers:
+ 
+   cat /sys/bus/ap/apmask
+   0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+   cat /sys/bus/ap/aqmask
+   0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ 
+ The masks can be changed at boot time with the kernel command line
+ like this:
+ 
+   ... ap.apmask=0xffff ap.aqmask=0x40
+ 
+ This would give these two pools:
+ 
+   default drivers pool:    adapter 0 - 15, domain 1
+   alternate drivers pool:  adapter 0 - 15, all but domain 1
+                          adapter 16-255, all domains
+ 
+ The sysfs attributes for this two masks are writeable and an
+ administrator is able to reconfigure the assignements on the fly by
+ writing new mask values into.  With changing the mask(s) a revision of
+ the existing queue to driver bindings is done. So all APQNs which are
+ bound to the 'wrong' driver are reprobed via kernel function
+ device_reprobe() and thus the new correct driver will be assigned with
+ respect of the changed apmask and aqmask bits.
+ 
+ The mask values are bitmaps in big endian order starting with bit 0.
+ So adapter number 0 is the leftmost bit, mask is 0x8000... The sysfs
+ attributes accept 2 different formats:
+ - Absolute hex string starting with 0x like "0x12345678" does set
+   the mask starting from left to right. If the given string is shorter
+   than the mask it is padded with 0s on the right. If the string is
+   longer than the mask an error comes back (EINVAL).
+ - '+' or '-' followed by a numerical value. Valid examples are "+1",
+   "-13", "+0x41", "-0xff" and even "+0" and "-0". Only the addressed
+   bit in the mask is switched on ('+') or off ('-').
+ 
+ This patch will also be the base for an upcoming extension to the
+ zcrypt drivers to be able to provide additional zcrypt device nodes
+ with filtering based on ap and aq masks.
+ 
+ Signed-off-by: Harald Freudenberger <[email protected]>
+ Signed-off-by: Martin Schwidefsky <[email protected]>
+ 
+ ===
+ 
+ Git-commit 3d8f60d38e249f98
+ 
https://github.com/torvalds/linux/commit/3d8f60d38e249f989a7fca9c2370c31c3d5487e1
+ Author: Harald Freudenberger <[email protected]>
+ Date:   Mon Aug 20 15:27:45 2018 +0200
+ s390/zcrypt: hex string mask improvements for apmask and aqmask
+ The sysfs attributes /sys/bus/ap/apmask and /sys/bus/ap/aqmask
+ and the kernel command line arguments ap.apm and ap.aqm get
+ an improvement of the value parsing with this patch:
+ 
+ The mask values are bitmaps in big endian order starting with bit 0.
+ So adapter number 0 is the leftmost bit, mask is 0x8000... The sysfs
+ attributes and the kernel command line accept 2 different formats:
+  - Absolute hex string starting with 0x like "0x12345678" does set
+    the mask starting from left to right. If the given string is shorter
+    than the mask it is padded with 0s on the right. If the string is
+    longer than the mask an error comes back (EINVAL).
+  - Relative format - a concatenation (done with ',') of the terms
+    +<bitnr>[-<bitnr>] or -<bitnr>[-<bitnr>]. <bitnr> may be any
+    valid number (hex, decimal or octal) in the range 0...255.
+    Here are some examples:
+      "+0-15,+32,-128,-0xFF"
+      "-0-255,+1-16,+0x128"
+ 
+ Signed-off-by: Harald Freudenberger <[email protected]>
+ Signed-off-by: Martin Schwidefsky <[email protected]>
+ 
+ == Regression Potential ==
+ 
+ Mid to low. because:
+ 
+ - There are quite some changes, but everything is limited to s390/zcrypt, 
means:
+    arch/s390/include/uapi/asm/*
+    and
+    drivers/s390/crypto/*
+ - So everything is s390x specific.
+ - And larger parts of the changes are beautifications.
+ - The code is already successfully test, integrated and running in cosmic.
+ 
+ == Test Case ==
+ 
+ On an LPAR that has access to an CryptoExpress card,
+ 
+ execute the 'lszcrypt --verbose'
+ and check availability of: 
+ /sys/bus/ap/apmask
+ 
+ General test and verification was already done by IBM.
+ Please notice that the code already landed in cosmic.
+ __________
+ 
  With the introduction of KVM crypto virtualization the driver bound to an AP 
queue device is no longer unique determined.
  This feature provides a deterministic hot plugging semantics of AP queues 
that may be bound to multiple drivers.
  In particular it enables to configure an AP queue (APQN) as being bound to a 
particular driver even if the associate HW gets intermittently lost and 
reconnected.
  
  This function has to be applied to kernel 4.15 for Ubuntu 18.04,
  
  Git Commit information available here:
  https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1784331

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1799184

Title:
  [18.04 FEAT] zcrypt DD: introduce APQN tags to support deterministic
  driver binding

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu-z-systems/+bug/1799184/+subscriptions

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to