Re: [PATCH v10 09/26] s390: vfio-ap: sysfs interface to view matrix mdev matrix

2018-09-24 Thread Cornelia Huck
On Wed, 12 Sep 2018 15:42:59 -0400
Tony Krowiak  wrote:

> From: Tony Krowiak 
> 
> Provides a sysfs interface to view the AP matrix configured for the
> mediated matrix device.
> 
> The relevant sysfs structures are:
> 
> /sys/devices/vfio_ap/matrix/
> .. [mdev_supported_types]
> . [vfio_ap-passthrough]
>  [devices]
> ...[$uuid]
> .. matrix
> 
> To view the matrix configured for the mediated matrix device,
> print the matrix file:
> 
>   cat matrix
> 
> Below are examples of the output from the above command:
> 
> Example 1: Adapters and domains assigned
>   Assignments:
>   Adapters 5 and 6
>   Domains 4 and 71 (0x47)
> 
>   Output
>   05.0004
>   05.0047
>   06.0004
>   06.0047
> 
> Examples 2: Only adapters assigned
>   Assignments:
>   Adapters 5 and 6
> 
>   Output:
>   05.
>   06.
> 
> Examples 3: Only domains assigned
>   Assignments:
>   Domains 4 and 71 (0x47)
> 
>   Output:
>   .0004
>   .0047
> 
> Signed-off-by: Tony Krowiak 
> Reviewed-by: Halil Pasic 
> Tested-by: Michael Mueller 
> Tested-by: Farhan Ali 
> Tested-by: Pierre Morel 
> Signed-off-by: Christian Borntraeger 
> ---
>  drivers/s390/crypto/vfio_ap_ops.c |   51 
> +
>  1 files changed, 51 insertions(+), 0 deletions(-)

Reviewed-by: Cornelia Huck 


[PATCH v10 09/26] s390: vfio-ap: sysfs interface to view matrix mdev matrix

2018-09-12 Thread Tony Krowiak
From: Tony Krowiak 

Provides a sysfs interface to view the AP matrix configured for the
mediated matrix device.

The relevant sysfs structures are:

/sys/devices/vfio_ap/matrix/
.. [mdev_supported_types]
. [vfio_ap-passthrough]
 [devices]
...[$uuid]
.. matrix

To view the matrix configured for the mediated matrix device,
print the matrix file:

cat matrix

Below are examples of the output from the above command:

Example 1: Adapters and domains assigned
Assignments:
Adapters 5 and 6
Domains 4 and 71 (0x47)

Output
05.0004
05.0047
06.0004
06.0047

Examples 2: Only adapters assigned
Assignments:
Adapters 5 and 6

Output:
05.
06.

Examples 3: Only domains assigned
Assignments:
Domains 4 and 71 (0x47)

Output:
.0004
.0047

Signed-off-by: Tony Krowiak 
Reviewed-by: Halil Pasic 
Tested-by: Michael Mueller 
Tested-by: Farhan Ali 
Tested-by: Pierre Morel 
Signed-off-by: Christian Borntraeger 
---
 drivers/s390/crypto/vfio_ap_ops.c |   51 +
 1 files changed, 51 insertions(+), 0 deletions(-)

diff --git a/drivers/s390/crypto/vfio_ap_ops.c 
b/drivers/s390/crypto/vfio_ap_ops.c
index 179b093..2a2dcf7 100644
--- a/drivers/s390/crypto/vfio_ap_ops.c
+++ b/drivers/s390/crypto/vfio_ap_ops.c
@@ -628,6 +628,56 @@ static ssize_t control_domains_show(struct device *dev,
 }
 DEVICE_ATTR_RO(control_domains);
 
+static ssize_t matrix_show(struct device *dev, struct device_attribute *attr,
+  char *buf)
+{
+   struct mdev_device *mdev = mdev_from_dev(dev);
+   struct ap_matrix_mdev *matrix_mdev = mdev_get_drvdata(mdev);
+   char *bufpos = buf;
+   unsigned long apid;
+   unsigned long apqi;
+   unsigned long apid1;
+   unsigned long apqi1;
+   unsigned long napm_bits = matrix_mdev->matrix.apm_max + 1;
+   unsigned long naqm_bits = matrix_mdev->matrix.aqm_max + 1;
+   int nchars = 0;
+   int n;
+
+   apid1 = find_first_bit_inv(matrix_mdev->matrix.apm, napm_bits);
+   apqi1 = find_first_bit_inv(matrix_mdev->matrix.aqm, naqm_bits);
+
+   mutex_lock(&matrix_dev->lock);
+
+   if ((apid1 < napm_bits) && (apqi1 < naqm_bits)) {
+   for_each_set_bit_inv(apid, matrix_mdev->matrix.apm, napm_bits) {
+   for_each_set_bit_inv(apqi, matrix_mdev->matrix.aqm,
+naqm_bits) {
+   n = sprintf(bufpos, "%02lx.%04lx\n", apid,
+   apqi);
+   bufpos += n;
+   nchars += n;
+   }
+   }
+   } else if (apid1 < napm_bits) {
+   for_each_set_bit_inv(apid, matrix_mdev->matrix.apm, napm_bits) {
+   n = sprintf(bufpos, "%02lx.\n", apid);
+   bufpos += n;
+   nchars += n;
+   }
+   } else if (apqi1 < naqm_bits) {
+   for_each_set_bit_inv(apqi, matrix_mdev->matrix.aqm, naqm_bits) {
+   n = sprintf(bufpos, ".%04lx\n", apqi);
+   bufpos += n;
+   nchars += n;
+   }
+   }
+
+   mutex_unlock(&matrix_dev->lock);
+
+   return nchars;
+}
+DEVICE_ATTR_RO(matrix);
+
 static struct attribute *vfio_ap_mdev_attrs[] = {
&dev_attr_assign_adapter.attr,
&dev_attr_unassign_adapter.attr,
@@ -636,6 +686,7 @@ static ssize_t control_domains_show(struct device *dev,
&dev_attr_assign_control_domain.attr,
&dev_attr_unassign_control_domain.attr,
&dev_attr_control_domains.attr,
+   &dev_attr_matrix.attr,
NULL,
 };
 
-- 
1.7.1