ocxl: Add get_metadata IOCTL to share OCXL information to userspace
Some required information is not exposed to userspace currently (eg. the PASID), pass this information back, along with other information which is currently communicated via sysfs, which saves some parsing effort in userspace. Signed-off-by: Alastair D'Silva <alastair@d-silva.org> Acked-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com> Acked-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:

committad av
Michael Ellerman

förälder
cd4a6f3ab4
incheckning
07c5ccd70a
@@ -102,10 +102,32 @@ static long afu_ioctl_attach(struct ocxl_context *ctx,
|
||||
return rc;
|
||||
}
|
||||
|
||||
static long afu_ioctl_get_metadata(struct ocxl_context *ctx,
|
||||
struct ocxl_ioctl_metadata __user *uarg)
|
||||
{
|
||||
struct ocxl_ioctl_metadata arg;
|
||||
|
||||
memset(&arg, 0, sizeof(arg));
|
||||
|
||||
arg.version = 0;
|
||||
|
||||
arg.afu_version_major = ctx->afu->config.version_major;
|
||||
arg.afu_version_minor = ctx->afu->config.version_minor;
|
||||
arg.pasid = ctx->pasid;
|
||||
arg.pp_mmio_size = ctx->afu->config.pp_mmio_stride;
|
||||
arg.global_mmio_size = ctx->afu->config.global_mmio_size;
|
||||
|
||||
if (copy_to_user(uarg, &arg, sizeof(arg)))
|
||||
return -EFAULT;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define CMD_STR(x) (x == OCXL_IOCTL_ATTACH ? "ATTACH" : \
|
||||
x == OCXL_IOCTL_IRQ_ALLOC ? "IRQ_ALLOC" : \
|
||||
x == OCXL_IOCTL_IRQ_FREE ? "IRQ_FREE" : \
|
||||
x == OCXL_IOCTL_IRQ_SET_FD ? "IRQ_SET_FD" : \
|
||||
x == OCXL_IOCTL_GET_METADATA ? "GET_METADATA" : \
|
||||
"UNKNOWN")
|
||||
|
||||
static long afu_ioctl(struct file *file, unsigned int cmd,
|
||||
@@ -159,6 +181,11 @@ static long afu_ioctl(struct file *file, unsigned int cmd,
|
||||
irq_fd.eventfd);
|
||||
break;
|
||||
|
||||
case OCXL_IOCTL_GET_METADATA:
|
||||
rc = afu_ioctl_get_metadata(ctx,
|
||||
(struct ocxl_ioctl_metadata __user *) args);
|
||||
break;
|
||||
|
||||
default:
|
||||
rc = -EINVAL;
|
||||
}
|
||||
|
Referens i nytt ärende
Block a user