RDMA/uverbs: Check for NULL driver methods for every write call
Add annotations to the uverbs_api structure indicating which driver methods are called by the implementation. If the required method is NULL the write API will be not be callable. This effectively duplicates the cmd_mask system, however it does it by expressing invariants required by the core code, not by delegating decision making to the driver. This is another step toward eliminating cmd_mask. Signed-off-by: Jason Gunthorpe <jgg@mellanox.com> Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
This commit is contained in:
@@ -350,6 +350,7 @@ enum uapi_definition_kind {
|
||||
|
||||
enum uapi_definition_scope {
|
||||
UAPI_SCOPE_OBJECT = 1,
|
||||
UAPI_SCOPE_METHOD = 2,
|
||||
};
|
||||
|
||||
struct uapi_definition {
|
||||
@@ -422,6 +423,21 @@ struct uapi_definition {
|
||||
sizeof(void *)), \
|
||||
}
|
||||
|
||||
/*
|
||||
* Method is only supported if the function pointer named ibdev_fn in struct
|
||||
* ib_device is not NULL.
|
||||
*/
|
||||
#define UAPI_DEF_METHOD_NEEDS_FN(ibdev_fn) \
|
||||
{ \
|
||||
.kind = UAPI_DEF_IS_SUPPORTED_DEV_FN, \
|
||||
.scope = UAPI_SCOPE_METHOD, \
|
||||
.needs_fn_offset = \
|
||||
offsetof(struct ib_device, ibdev_fn) + \
|
||||
BUILD_BUG_ON_ZERO( \
|
||||
sizeof(((struct ib_device *)0)->ibdev_fn) != \
|
||||
sizeof(void *)), \
|
||||
}
|
||||
|
||||
/* Call a function to determine if the entire object is supported or not */
|
||||
#define UAPI_DEF_IS_OBJ_SUPPORTED(_func) \
|
||||
{ \
|
||||
|
Reference in New Issue
Block a user