> On Mar 9, 2016, at 8:37 AM, Vaibhav Jain <vaib...@linux.vnet.ibm.com> wrote: >> +/* >> + * AFU driver ops allows an AFU driver to create their own events to pass to >> + * userspace through the file descriptor as a simpler alternative to >> overriding >> + * the read() and poll() calls that works with the generic cxl events. These >> + * events are given priority over the generic cxl events, so they will be >> + * delivered first if multiple types of events are pending. >> + * >> + * event_pending() will be called by the cxl driver to check if an event is >> + * pending (e.g. in select/poll/read calls). >> + * >> + * deliver_event() will be called to fill out a cxl_event structure with the >> + * driver specific event. The header will already have the type and >> + * process_element fields filled in, and header.size will be set to >> + * sizeof(struct cxl_event_header). The AFU driver can extend that size up >> to >> + * max_size (if an afu driver requires more space, they should submit a >> patch >> + * increasing the size in the struct cxl_event_afu_driver_reserved >> definition). >> + * >> + * Both of these calls are made with a spin lock held, so they must not >> sleep. >> + */ >> +struct cxl_afu_driver_ops { >> + bool (*event_pending) (struct cxl_context *ctx); >> + void (*deliver_event) (struct cxl_context *ctx, >> + struct cxl_event *event, size_t max_size); >> +}; >> + > > I would propose these two apis. > > /* > * fetches an event from the driver event queue. NULL means that queue > * is empty. Can sleep if needed. The memory for cxl_event is allocated > * by module being called. Hence it can be potentially be larger then > * sizeof(struct cxl_event). Multiple calls to this should return same > * pointer untill ack_event is called. > */ > struct cxl_event * fetch_event(struct cxl_context * ctx); > > /* > * Returns and acknowledge the struct cxl_event * back to the driver > * which can then free it or maybe put it back in a kmem_cache. This > * should be called once we have completely returned the current > * struct cxl_event from the readcall > */ > void ack_event(struct cxl_context * ctx, struct cxl_event *); > > I think above apis would give us more flexbility in the future when > drivers would want to send larger events without breaking the abi.
From a cxlflash perspective, I think we'd be fine with this model as long as the driver events are still prioritized. I do like the removal of the no-sleep requirement and this would allow us to simply hand off an already populated event reference. _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev