crypto/nx: Add sysfs interface to export NX capabilities
Export NX-GZIP capabilities to usrespace in sysfs /sys/devices/vio/ibm,compression-v1/nx_gzip_caps directory. These are queried by userspace accelerator libraries to set minimum length heuristics and maximum limits on request sizes. NX-GZIP capabilities: min_compress_len /*Recommended minimum compress length in bytes*/ min_decompress_len /*Recommended minimum decompress length in bytes*/ req_max_processed_len /* Maximum number of bytes processed in one request */ NX will return RMA_Reject if the request buffer size is greater than req_max_processed_len. Signed-off-by: Haren Myneni <haren@linux.ibm.com> Acked-by: Herbert Xu <herbert@gondor.apana.org.au> Acked-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/510da86abbd904878d5f13d74aba72603c37d783.camel@linux.ibm.com
This commit is contained in:
parent
b4ba22114c
commit
8c099490fd
|
@ -967,6 +967,36 @@ static struct attribute_group nx842_attribute_group = {
|
|||
.attrs = nx842_sysfs_entries,
|
||||
};
|
||||
|
||||
#define nxcop_caps_read(_name) \
|
||||
static ssize_t nxcop_##_name##_show(struct device *dev, \
|
||||
struct device_attribute *attr, char *buf) \
|
||||
{ \
|
||||
return sprintf(buf, "%lld\n", nx_cop_caps._name); \
|
||||
}
|
||||
|
||||
#define NXCT_ATTR_RO(_name) \
|
||||
nxcop_caps_read(_name); \
|
||||
static struct device_attribute dev_attr_##_name = __ATTR(_name, \
|
||||
0444, \
|
||||
nxcop_##_name##_show, \
|
||||
NULL);
|
||||
|
||||
NXCT_ATTR_RO(req_max_processed_len);
|
||||
NXCT_ATTR_RO(min_compress_len);
|
||||
NXCT_ATTR_RO(min_decompress_len);
|
||||
|
||||
static struct attribute *nxcop_caps_sysfs_entries[] = {
|
||||
&dev_attr_req_max_processed_len.attr,
|
||||
&dev_attr_min_compress_len.attr,
|
||||
&dev_attr_min_decompress_len.attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct attribute_group nxcop_caps_attr_group = {
|
||||
.name = "nx_gzip_caps",
|
||||
.attrs = nxcop_caps_sysfs_entries,
|
||||
};
|
||||
|
||||
static struct nx842_driver nx842_pseries_driver = {
|
||||
.name = KBUILD_MODNAME,
|
||||
.owner = THIS_MODULE,
|
||||
|
@ -1056,6 +1086,16 @@ static int nx842_probe(struct vio_dev *viodev,
|
|||
goto error;
|
||||
}
|
||||
|
||||
if (caps_feat) {
|
||||
if (sysfs_create_group(&viodev->dev.kobj,
|
||||
&nxcop_caps_attr_group)) {
|
||||
dev_err(&viodev->dev,
|
||||
"Could not create sysfs NX capability entries\n");
|
||||
ret = -1;
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
error_unlock:
|
||||
|
@ -1075,6 +1115,9 @@ static void nx842_remove(struct vio_dev *viodev)
|
|||
pr_info("Removing IBM Power 842 compression device\n");
|
||||
sysfs_remove_group(&viodev->dev.kobj, &nx842_attribute_group);
|
||||
|
||||
if (caps_feat)
|
||||
sysfs_remove_group(&viodev->dev.kobj, &nxcop_caps_attr_group);
|
||||
|
||||
crypto_unregister_alg(&nx842_pseries_alg);
|
||||
|
||||
spin_lock_irqsave(&devdata_mutex, flags);
|
||||
|
|
Loading…
Reference in New Issue