diff mbox

[v3,11/14] s390: vfio-ap: sysfs interface to view matrix mdev matrix

Message ID 1521051954-25715-12-git-send-email-akrowiak@linux.vnet.ibm.com (mailing list archive)
State New, archived
Headers show

Commit Message

Tony Krowiak March 14, 2018, 6:25 p.m. UTC
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

Signed-off-by: Tony Krowiak <akrowiak@linux.vnet.ibm.com>
---
 drivers/s390/crypto/vfio_ap_ops.c |   39 +++++++++++++++++++++++++++++++++++++
 1 files changed, 39 insertions(+), 0 deletions(-)

Comments

Pierre Morel March 15, 2018, 9:42 a.m. UTC | #1
On 14/03/2018 19:25, Tony Krowiak wrote:
> 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
>
> Signed-off-by: Tony Krowiak <akrowiak@linux.vnet.ibm.com>
> ---
>   drivers/s390/crypto/vfio_ap_ops.c |   39 +++++++++++++++++++++++++++++++++++++
>   1 files changed, 39 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/s390/crypto/vfio_ap_ops.c b/drivers/s390/crypto/vfio_ap_ops.c
> index 461d450..04f7a92 100644
> --- a/drivers/s390/crypto/vfio_ap_ops.c
> +++ b/drivers/s390/crypto/vfio_ap_ops.c
> @@ -692,6 +692,44 @@ 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;
> +	int nchars = 0;
> +	int n;
> +
> +	n = sprintf(bufpos, "ADAPTER.DOMAIN\n");

For easy parsing it is better to only report the interesting data
and let a user space utility make fancy presentation.

> +	bufpos += n;
> +	nchars += n;
> +
> +	n = sprintf(bufpos, "--------------\n");
> +	bufpos += n;
> +	nchars += n;
> +
> +	for_each_set_bit_inv(apid, matrix_mdev->matrix->apm,
> +			     matrix_mdev->matrix->apm_max) {
> +		n = sprintf(bufpos, "%02lx\n", apid);
> +		bufpos += n;
> +		nchars += n;
> +
> +		for_each_set_bit_inv(apqi, matrix_mdev->matrix->aqm,
> +				     matrix_mdev->matrix->aqm_max) {
> +			n = sprintf(bufpos, "%02lx.%04lx\n", apid, apqi);
> +			bufpos += n;
> +			nchars += n;
> +		}
> +	}
> +
> +	return nchars;
> +}
> +DEVICE_ATTR_RO(matrix);
> +
> +
>   static struct attribute *vfio_ap_mdev_attrs[] = {
>   	&dev_attr_assign_adapter.attr,
>   	&dev_attr_unassign_adapter.attr,
> @@ -700,6 +738,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,
>   };
>
Tony Krowiak March 15, 2018, 2:52 p.m. UTC | #2
On 03/15/2018 05:42 AM, Pierre Morel wrote:
> On 14/03/2018 19:25, Tony Krowiak wrote:
>> 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
>>
>> Signed-off-by: Tony Krowiak <akrowiak@linux.vnet.ibm.com>
>> ---
>>   drivers/s390/crypto/vfio_ap_ops.c |   39 
>> +++++++++++++++++++++++++++++++++++++
>>   1 files changed, 39 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/s390/crypto/vfio_ap_ops.c 
>> b/drivers/s390/crypto/vfio_ap_ops.c
>> index 461d450..04f7a92 100644
>> --- a/drivers/s390/crypto/vfio_ap_ops.c
>> +++ b/drivers/s390/crypto/vfio_ap_ops.c
>> @@ -692,6 +692,44 @@ 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;
>> +    int nchars = 0;
>> +    int n;
>> +
>> +    n = sprintf(bufpos, "ADAPTER.DOMAIN\n");
>
> For easy parsing it is better to only report the interesting data
> and let a user space utility make fancy presentation.
Is that your way of saying take the above line out?
>
>
>> +    bufpos += n;
>> +    nchars += n;
>> +
>> +    n = sprintf(bufpos, "--------------\n");
>> +    bufpos += n;
>> +    nchars += n;
>> +
>> +    for_each_set_bit_inv(apid, matrix_mdev->matrix->apm,
>> +                 matrix_mdev->matrix->apm_max) {
>> +        n = sprintf(bufpos, "%02lx\n", apid);
>> +        bufpos += n;
>> +        nchars += n;
>> +
>> +        for_each_set_bit_inv(apqi, matrix_mdev->matrix->aqm,
>> +                     matrix_mdev->matrix->aqm_max) {
>> +            n = sprintf(bufpos, "%02lx.%04lx\n", apid, apqi);
>> +            bufpos += n;
>> +            nchars += n;
>> +        }
>> +    }
>> +
>> +    return nchars;
>> +}
>> +DEVICE_ATTR_RO(matrix);
>> +
>> +
>>   static struct attribute *vfio_ap_mdev_attrs[] = {
>>       &dev_attr_assign_adapter.attr,
>>       &dev_attr_unassign_adapter.attr,
>> @@ -700,6 +738,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,
>>   };
>>
>
Pierre Morel March 15, 2018, 3:35 p.m. UTC | #3
On 15/03/2018 15:52, Tony Krowiak wrote:
> On 03/15/2018 05:42 AM, Pierre Morel wrote:
>> On 14/03/2018 19:25, Tony Krowiak wrote:
>>> 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
>>>
>>> Signed-off-by: Tony Krowiak <akrowiak@linux.vnet.ibm.com>
>>> ---
>>>   drivers/s390/crypto/vfio_ap_ops.c |   39 
>>> +++++++++++++++++++++++++++++++++++++
>>>   1 files changed, 39 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/drivers/s390/crypto/vfio_ap_ops.c 
>>> b/drivers/s390/crypto/vfio_ap_ops.c
>>> index 461d450..04f7a92 100644
>>> --- a/drivers/s390/crypto/vfio_ap_ops.c
>>> +++ b/drivers/s390/crypto/vfio_ap_ops.c
>>> @@ -692,6 +692,44 @@ 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;
>>> +    int nchars = 0;
>>> +    int n;
>>> +
>>> +    n = sprintf(bufpos, "ADAPTER.DOMAIN\n");
>>
>> For easy parsing it is better to only report the interesting data
>> and let a user space utility make fancy presentation.
> Is that your way of saying take the above line out?

yes, (also wanted to explain why)

>>
>>
>>> +    bufpos += n;
>>> +    nchars += n;
>>> +
>>> +    n = sprintf(bufpos, "--------------\n");
>>> +    bufpos += n;
>>> +    nchars += n;
>>> +
>>> +    for_each_set_bit_inv(apid, matrix_mdev->matrix->apm,
>>> +                 matrix_mdev->matrix->apm_max) {
>>> +        n = sprintf(bufpos, "%02lx\n", apid);
>>> +        bufpos += n;
>>> +        nchars += n;
>>> +
>>> +        for_each_set_bit_inv(apqi, matrix_mdev->matrix->aqm,
>>> +                     matrix_mdev->matrix->aqm_max) {
>>> +            n = sprintf(bufpos, "%02lx.%04lx\n", apid, apqi);
>>> +            bufpos += n;
>>> +            nchars += n;
>>> +        }
>>> +    }
>>> +
>>> +    return nchars;
>>> +}
>>> +DEVICE_ATTR_RO(matrix);
>>> +
>>> +
>>>   static struct attribute *vfio_ap_mdev_attrs[] = {
>>>       &dev_attr_assign_adapter.attr,
>>>       &dev_attr_unassign_adapter.attr,
>>> @@ -700,6 +738,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,
>>>   };
>>>
>>
>
Cornelia Huck March 27, 2018, 11:19 a.m. UTC | #4
On Thu, 15 Mar 2018 10:42:33 +0100
Pierre Morel <pmorel@linux.vnet.ibm.com> wrote:

> On 14/03/2018 19:25, Tony Krowiak wrote:
> > 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
> >
> > Signed-off-by: Tony Krowiak <akrowiak@linux.vnet.ibm.com>
> > ---
> >   drivers/s390/crypto/vfio_ap_ops.c |   39 +++++++++++++++++++++++++++++++++++++
> >   1 files changed, 39 insertions(+), 0 deletions(-)
> >
> > diff --git a/drivers/s390/crypto/vfio_ap_ops.c b/drivers/s390/crypto/vfio_ap_ops.c
> > index 461d450..04f7a92 100644
> > --- a/drivers/s390/crypto/vfio_ap_ops.c
> > +++ b/drivers/s390/crypto/vfio_ap_ops.c
> > @@ -692,6 +692,44 @@ 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;
> > +	int nchars = 0;
> > +	int n;
> > +
> > +	n = sprintf(bufpos, "ADAPTER.DOMAIN\n");  
> 
> For easy parsing it is better to only report the interesting data
> and let a user space utility make fancy presentation.

+1. Attributes should normally be simple, one-value things.

> 
> > +	bufpos += n;
> > +	nchars += n;
> > +
> > +	n = sprintf(bufpos, "--------------\n");
> > +	bufpos += n;
> > +	nchars += n;
> > +
> > +	for_each_set_bit_inv(apid, matrix_mdev->matrix->apm,
> > +			     matrix_mdev->matrix->apm_max) {
> > +		n = sprintf(bufpos, "%02lx\n", apid);
> > +		bufpos += n;
> > +		nchars += n;
> > +
> > +		for_each_set_bit_inv(apqi, matrix_mdev->matrix->aqm,
> > +				     matrix_mdev->matrix->aqm_max) {
> > +			n = sprintf(bufpos, "%02lx.%04lx\n", apid, apqi);
> > +			bufpos += n;
> > +			nchars += n;
> > +		}
> > +	}
> > +
> > +	return nchars;
> > +}
> > +DEVICE_ATTR_RO(matrix);
> > +
> > +
> >   static struct attribute *vfio_ap_mdev_attrs[] = {
> >   	&dev_attr_assign_adapter.attr,
> >   	&dev_attr_unassign_adapter.attr,
> > @@ -700,6 +738,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,
> >   };
> >  
>
diff mbox

Patch

diff --git a/drivers/s390/crypto/vfio_ap_ops.c b/drivers/s390/crypto/vfio_ap_ops.c
index 461d450..04f7a92 100644
--- a/drivers/s390/crypto/vfio_ap_ops.c
+++ b/drivers/s390/crypto/vfio_ap_ops.c
@@ -692,6 +692,44 @@  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;
+	int nchars = 0;
+	int n;
+
+	n = sprintf(bufpos, "ADAPTER.DOMAIN\n");
+	bufpos += n;
+	nchars += n;
+
+	n = sprintf(bufpos, "--------------\n");
+	bufpos += n;
+	nchars += n;
+
+	for_each_set_bit_inv(apid, matrix_mdev->matrix->apm,
+			     matrix_mdev->matrix->apm_max) {
+		n = sprintf(bufpos, "%02lx\n", apid);
+		bufpos += n;
+		nchars += n;
+
+		for_each_set_bit_inv(apqi, matrix_mdev->matrix->aqm,
+				     matrix_mdev->matrix->aqm_max) {
+			n = sprintf(bufpos, "%02lx.%04lx\n", apid, apqi);
+			bufpos += n;
+			nchars += n;
+		}
+	}
+
+	return nchars;
+}
+DEVICE_ATTR_RO(matrix);
+
+
 static struct attribute *vfio_ap_mdev_attrs[] = {
 	&dev_attr_assign_adapter.attr,
 	&dev_attr_unassign_adapter.attr,
@@ -700,6 +738,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,
 };