diff options
author | Jason Gunthorpe <jgg@mellanox.com> | 2018-11-12 22:59:58 +0200 |
---|---|---|
committer | Jason Gunthorpe <jgg@mellanox.com> | 2018-11-22 11:57:33 -0700 |
commit | a140692a52d2e12ba6a76dd042d556348e8bb55a (patch) | |
tree | d168281ba7eca4abde7746f7398d4d2187437a09 /include/rdma | |
parent | 1de751caf7d52debd9820dbcd0190c6306f3f7b0 (diff) |
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>
Diffstat (limited to 'include/rdma')
-rw-r--r-- | include/rdma/uverbs_ioctl.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/include/rdma/uverbs_ioctl.h b/include/rdma/uverbs_ioctl.h index 5df8ed79ba6c..963dd6b70cde 100644 --- a/include/rdma/uverbs_ioctl.h +++ b/include/rdma/uverbs_ioctl.h @@ -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) \ { \ |