[IB] uverbs: Add a mask of device methods allowed for userspace
Give each device a uverbs_cmd_mask, so that a low-level driver can control which methods may be called on behalf of userspace. Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
56c202d6e4
commit
883a99c702
3 changed files with 23 additions and 1 deletions
|
@ -514,7 +514,8 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf,
|
||||||
|
|
||||||
if (hdr.command < 0 ||
|
if (hdr.command < 0 ||
|
||||||
hdr.command >= ARRAY_SIZE(uverbs_cmd_table) ||
|
hdr.command >= ARRAY_SIZE(uverbs_cmd_table) ||
|
||||||
!uverbs_cmd_table[hdr.command])
|
!uverbs_cmd_table[hdr.command] ||
|
||||||
|
!(file->device->ib_dev->uverbs_cmd_mask & (1ull << hdr.command)))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (!file->ucontext &&
|
if (!file->ucontext &&
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <rdma/ib_smi.h>
|
#include <rdma/ib_smi.h>
|
||||||
|
#include <rdma/ib_user_verbs.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
|
|
||||||
#include "mthca_dev.h"
|
#include "mthca_dev.h"
|
||||||
|
@ -1077,6 +1078,25 @@ int mthca_register_device(struct mthca_dev *dev)
|
||||||
dev->ib_dev.owner = THIS_MODULE;
|
dev->ib_dev.owner = THIS_MODULE;
|
||||||
|
|
||||||
dev->ib_dev.uverbs_abi_ver = MTHCA_UVERBS_ABI_VERSION;
|
dev->ib_dev.uverbs_abi_ver = MTHCA_UVERBS_ABI_VERSION;
|
||||||
|
dev->ib_dev.uverbs_cmd_mask =
|
||||||
|
(1ull << IB_USER_VERBS_CMD_GET_CONTEXT) |
|
||||||
|
(1ull << IB_USER_VERBS_CMD_QUERY_DEVICE) |
|
||||||
|
(1ull << IB_USER_VERBS_CMD_QUERY_PORT) |
|
||||||
|
(1ull << IB_USER_VERBS_CMD_ALLOC_PD) |
|
||||||
|
(1ull << IB_USER_VERBS_CMD_DEALLOC_PD) |
|
||||||
|
(1ull << IB_USER_VERBS_CMD_REG_MR) |
|
||||||
|
(1ull << IB_USER_VERBS_CMD_DEREG_MR) |
|
||||||
|
(1ull << IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL) |
|
||||||
|
(1ull << IB_USER_VERBS_CMD_CREATE_CQ) |
|
||||||
|
(1ull << IB_USER_VERBS_CMD_DESTROY_CQ) |
|
||||||
|
(1ull << IB_USER_VERBS_CMD_CREATE_QP) |
|
||||||
|
(1ull << IB_USER_VERBS_CMD_MODIFY_QP) |
|
||||||
|
(1ull << IB_USER_VERBS_CMD_DESTROY_QP) |
|
||||||
|
(1ull << IB_USER_VERBS_CMD_ATTACH_MCAST) |
|
||||||
|
(1ull << IB_USER_VERBS_CMD_DETACH_MCAST) |
|
||||||
|
(1ull << IB_USER_VERBS_CMD_CREATE_SRQ) |
|
||||||
|
(1ull << IB_USER_VERBS_CMD_MODIFY_SRQ) |
|
||||||
|
(1ull << IB_USER_VERBS_CMD_DESTROY_SRQ);
|
||||||
dev->ib_dev.node_type = IB_NODE_CA;
|
dev->ib_dev.node_type = IB_NODE_CA;
|
||||||
dev->ib_dev.phys_port_cnt = dev->limits.num_ports;
|
dev->ib_dev.phys_port_cnt = dev->limits.num_ports;
|
||||||
dev->ib_dev.dma_device = &dev->pdev->dev;
|
dev->ib_dev.dma_device = &dev->pdev->dev;
|
||||||
|
|
|
@ -951,6 +951,7 @@ struct ib_device {
|
||||||
IB_DEV_UNREGISTERED
|
IB_DEV_UNREGISTERED
|
||||||
} reg_state;
|
} reg_state;
|
||||||
|
|
||||||
|
u64 uverbs_cmd_mask;
|
||||||
int uverbs_abi_ver;
|
int uverbs_abi_ver;
|
||||||
|
|
||||||
u8 node_type;
|
u8 node_type;
|
||||||
|
|
Loading…
Reference in a new issue