Messages in this thread |  | | Subject | Re: [PATCH v2 6/7] ocxl: Add an IOCTL so userspace knows what CPU features are available | From | Frederic Barrat <> | Date | Mon, 7 May 2018 20:14:32 +0200 |
| |
Le 18/04/2018 à 03:08, Alastair D'Silva a écrit : > From: Alastair D'Silva <alastair@d-silva.org> > > In order for a userspace AFU driver to call the Power9 specific > OCXL_IOCTL_ENABLE_P9_WAIT, it needs to verify that it can actually > make that call. > > Signed-off-by: Alastair D'Silva <alastair@d-silva.org> > --- > Documentation/accelerators/ocxl.rst | 1 - > drivers/misc/ocxl/file.c | 25 +++++++++++++++++++++++++ > include/uapi/misc/ocxl.h | 4 ++++ > 3 files changed, 29 insertions(+), 1 deletion(-) > > diff --git a/Documentation/accelerators/ocxl.rst b/Documentation/accelerators/ocxl.rst > index ddcc58d01cfb..7904adcc07fd 100644 > --- a/Documentation/accelerators/ocxl.rst > +++ b/Documentation/accelerators/ocxl.rst > @@ -157,7 +157,6 @@ OCXL_IOCTL_GET_METADATA: > Obtains configuration information from the card, such at the size of > MMIO areas, the AFU version, and the PASID for the current context. > > -
Intended?
Other than that, Acked-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
> mmap > ---- > > diff --git a/drivers/misc/ocxl/file.c b/drivers/misc/ocxl/file.c > index eb409a469f21..33ae46ce0a8a 100644 > --- a/drivers/misc/ocxl/file.c > +++ b/drivers/misc/ocxl/file.c > @@ -168,12 +168,32 @@ static long afu_ioctl_enable_p9_wait(struct ocxl_context *ctx, > } > #endif > > + > +static long afu_ioctl_get_features(struct ocxl_context *ctx, > + struct ocxl_ioctl_features __user *uarg) > +{ > + struct ocxl_ioctl_features arg; > + > + memset(&arg, 0, sizeof(arg)); > + > +#ifdef CONFIG_PPC64 > + if (cpu_has_feature(CPU_FTR_P9_TIDR)) > + arg.flags[0] |= OCXL_IOCTL_FEATURES_FLAGS0_P9_WAIT; > +#endif > + > + 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" : \ > x == OCXL_IOCTL_ENABLE_P9_WAIT ? "ENABLE_P9_WAIT" : \ > + x == OCXL_IOCTL_GET_FEATURES ? "GET_FEATURES" : \ > "UNKNOWN") > > static long afu_ioctl(struct file *file, unsigned int cmd, > @@ -239,6 +259,11 @@ static long afu_ioctl(struct file *file, unsigned int cmd, > break; > #endif > > + case OCXL_IOCTL_GET_FEATURES: > + rc = afu_ioctl_get_features(ctx, > + (struct ocxl_ioctl_features __user *) args); > + break; > + > default: > rc = -EINVAL; > } > diff --git a/include/uapi/misc/ocxl.h b/include/uapi/misc/ocxl.h > index 8d2748e69c84..bb80f294b429 100644 > --- a/include/uapi/misc/ocxl.h > +++ b/include/uapi/misc/ocxl.h > @@ -55,6 +55,9 @@ struct ocxl_ioctl_p9_wait { > __u64 reserved3[3]; > }; > > +#define OCXL_IOCTL_FEATURES_FLAGS0_P9_WAIT 0x01 > +struct ocxl_ioctl_features { > + __u64 flags[4]; > }; > > struct ocxl_ioctl_irq_fd { > @@ -72,5 +75,6 @@ struct ocxl_ioctl_irq_fd { > #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) > #define OCXL_IOCTL_ENABLE_P9_WAIT _IOR(OCXL_MAGIC, 0x15, struct ocxl_ioctl_p9_wait) > +#define OCXL_IOCTL_GET_FEATURES _IOR(OCXL_MAGIC, 0x16, struct ocxl_ioctl_platform) > > #endif /* _UAPI_MISC_OCXL_H */ >
|  |