diff options
author | Roland Dreier <rolandd@cisco.com> | 2006-08-18 13:41:46 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2006-08-18 13:41:46 -0400 |
commit | 5beba53230351b2d77c317c22e66c415f2ebaf02 (patch) | |
tree | 0f70ebff5d478d36d8440aebac5e311b0cfe5e74 /drivers/infiniband | |
parent | acaea9ee460d0ba5a14f0066ba26cfa43dd5fdf3 (diff) |
IB/mthca: No userspace SRQs if HCA doesn't have SRQ support
Leave all SRQ methods out of the device's uverbs_cmd_mask if the
device doesn't have SRQ support (because of ancient firmware) so that
we don't allow userspace to call the driver's create_srq method. This
fixes a userspace-triggerable oops caused by ib_uverbs_create_srq()
following the device's ->create_srq function pointer, which will be
NULL if the device doesn't support SRQs.
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband')
-rw-r--r-- | drivers/infiniband/hw/mthca/mthca_provider.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/infiniband/hw/mthca/mthca_provider.c b/drivers/infiniband/hw/mthca/mthca_provider.c index 230ae21db8fd..265b1d1c4a62 100644 --- a/drivers/infiniband/hw/mthca/mthca_provider.c +++ b/drivers/infiniband/hw/mthca/mthca_provider.c | |||
@@ -1287,11 +1287,7 @@ int mthca_register_device(struct mthca_dev *dev) | |||
1287 | (1ull << IB_USER_VERBS_CMD_MODIFY_QP) | | 1287 | (1ull << IB_USER_VERBS_CMD_MODIFY_QP) | |
1288 | (1ull << IB_USER_VERBS_CMD_DESTROY_QP) | | 1288 | (1ull << IB_USER_VERBS_CMD_DESTROY_QP) | |
1289 | (1ull << IB_USER_VERBS_CMD_ATTACH_MCAST) | | 1289 | (1ull << IB_USER_VERBS_CMD_ATTACH_MCAST) | |
1290 | (1ull << IB_USER_VERBS_CMD_DETACH_MCAST) | | 1290 | (1ull << IB_USER_VERBS_CMD_DETACH_MCAST); |
1291 | (1ull << IB_USER_VERBS_CMD_CREATE_SRQ) | | ||
1292 | (1ull << IB_USER_VERBS_CMD_MODIFY_SRQ) | | ||
1293 | (1ull << IB_USER_VERBS_CMD_QUERY_SRQ) | | ||
1294 | (1ull << IB_USER_VERBS_CMD_DESTROY_SRQ); | ||
1295 | dev->ib_dev.node_type = IB_NODE_CA; | 1291 | dev->ib_dev.node_type = IB_NODE_CA; |
1296 | dev->ib_dev.phys_port_cnt = dev->limits.num_ports; | 1292 | dev->ib_dev.phys_port_cnt = dev->limits.num_ports; |
1297 | dev->ib_dev.dma_device = &dev->pdev->dev; | 1293 | dev->ib_dev.dma_device = &dev->pdev->dev; |
@@ -1316,6 +1312,11 @@ int mthca_register_device(struct mthca_dev *dev) | |||
1316 | dev->ib_dev.modify_srq = mthca_modify_srq; | 1312 | dev->ib_dev.modify_srq = mthca_modify_srq; |
1317 | dev->ib_dev.query_srq = mthca_query_srq; | 1313 | dev->ib_dev.query_srq = mthca_query_srq; |
1318 | dev->ib_dev.destroy_srq = mthca_destroy_srq; | 1314 | dev->ib_dev.destroy_srq = mthca_destroy_srq; |
1315 | dev->ib_dev.uverbs_cmd_mask |= | ||
1316 | (1ull << IB_USER_VERBS_CMD_CREATE_SRQ) | | ||
1317 | (1ull << IB_USER_VERBS_CMD_MODIFY_SRQ) | | ||
1318 | (1ull << IB_USER_VERBS_CMD_QUERY_SRQ) | | ||
1319 | (1ull << IB_USER_VERBS_CMD_DESTROY_SRQ); | ||
1319 | 1320 | ||
1320 | if (mthca_is_memfree(dev)) | 1321 | if (mthca_is_memfree(dev)) |
1321 | dev->ib_dev.post_srq_recv = mthca_arbel_post_srq_recv; | 1322 | dev->ib_dev.post_srq_recv = mthca_arbel_post_srq_recv; |