Messages in this thread | | | Subject | Re: [PATCH v3 1/2] ocxl: Add get_metadata IOCTL to share OCXL information to userspace | From | Frederic Barrat <> | Date | Thu, 22 Feb 2018 13:16:06 +0100 |
| |
Le 22/02/2018 à 05:17, Alastair D'Silva a écrit : > From: Alastair D'Silva <alastair@d-silva.org> > > 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> > ---
Thanks! Acked-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
> drivers/misc/ocxl/file.c | 27 +++++++++++++++++++++++++++ > include/uapi/misc/ocxl.h | 17 +++++++++++++++++ > 2 files changed, 44 insertions(+) > > diff --git a/drivers/misc/ocxl/file.c b/drivers/misc/ocxl/file.c > index d9aa407db06a..90df1be5ef3f 100644 > --- a/drivers/misc/ocxl/file.c > +++ b/drivers/misc/ocxl/file.c > @@ -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, > @@ -157,6 +179,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; > } > diff --git a/include/uapi/misc/ocxl.h b/include/uapi/misc/ocxl.h > index 4b0b0b756f3e..0af83d80fb3e 100644 > --- a/include/uapi/misc/ocxl.h > +++ b/include/uapi/misc/ocxl.h > @@ -32,6 +32,22 @@ struct ocxl_ioctl_attach { > __u64 reserved3; > }; > > +struct ocxl_ioctl_metadata { > + __u16 version; // struct version, always backwards compatible > + > + // Version 0 fields > + __u8 afu_version_major; > + __u8 afu_version_minor; > + __u32 pasid; // PASID assigned to the current context > + > + __u64 pp_mmio_size; // Per PASID MMIO size > + __u64 global_mmio_size; > + > + // End version 0 fields > + > + __u64 reserved[13]; // Total of 16*u64 > +}; > + > struct ocxl_ioctl_irq_fd { > __u64 irq_offset; > __s32 eventfd; > @@ -45,5 +61,6 @@ struct ocxl_ioctl_irq_fd { > #define OCXL_IOCTL_IRQ_ALLOC _IOR(OCXL_MAGIC, 0x11, __u64) > #define OCXL_IOCTL_IRQ_FREE _IOW(OCXL_MAGIC, 0x12, __u64) > #define OCXL_IOCTL_IRQ_SET_FD _IOW(OCXL_MAGIC, 0x13, struct ocxl_ioctl_irq_fd) > +#define OCXL_IOCTL_GET_METADATA _IOR(OCXL_MAGIC, 0x14, struct ocxl_ioctl_metadata) > > #endif /* _UAPI_MISC_OCXL_H */ >
| |