aboutsummaryrefslogtreecommitdiff
path: root/drivers/infiniband/core/uverbs_main.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-09-11 08:58:32 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2009-09-11 08:58:32 -0700
commit2490138cb785d299d898b579fa2874a59a3d321a (patch)
treefc9acc19ce1e089e383f901e4eaa406a739f4837 /drivers/infiniband/core/uverbs_main.c
parentf6f79190866d5b2d06a2114d673f91f54e7c7ce4 (diff)
parent73f526da0260db5376951373c267596993dc13a8 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband: (48 commits) RDMA/iwcm: Reject the connection when the cm_id is destroyed RDMA/cxgb3: Clean up properly on FW mismatch failures RDMA/cxgb3: Don't ignore insert_handle() failures MAINTAINERS: InfiniBand/RDMA mailing list transition to vger IB/mad: Allow tuning of QP0 and QP1 sizes IB/mad: Fix possible lock-lock-timer deadlock RDMA/nes: Map MTU to IB_MTU_* and correctly report link state RDMA/nes: Rework the disconn routine for terminate and flushing RDMA/nes: Use the flush code to fill in cqe error RDMA/nes: Make poll_cq return correct number of wqes during flush RDMA/nes: Use flush mechanism to set status for wqe in error RDMA/nes: Implement Terminate Packet RDMA/nes: Add CQ error handling RDMA/nes: Clean out CQ completions when QP is destroyed RDMA/nes: Change memory allocation for cqp request to GFP_ATOMIC RDMA/nes: Allocate work item for disconnect event handling RDMA/nes: Update refcnt during disconnect IB/mthca: Don't allow userspace open while recovering from catastrophic error IB/mthca: Distinguish multiple devices in /proc/interrupts IB/mthca: Annotate CQ locking ...
Diffstat (limited to 'drivers/infiniband/core/uverbs_main.c')
-rw-r--r--drivers/infiniband/core/uverbs_main.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/infiniband/core/uverbs_main.c b/drivers/infiniband/core/uverbs_main.c
index eb36a81dd09..d3fff9e008a 100644
--- a/drivers/infiniband/core/uverbs_main.c
+++ b/drivers/infiniband/core/uverbs_main.c
@@ -73,7 +73,7 @@ DEFINE_IDR(ib_uverbs_cq_idr);
DEFINE_IDR(ib_uverbs_qp_idr);
DEFINE_IDR(ib_uverbs_srq_idr);
-static spinlock_t map_lock;
+static DEFINE_SPINLOCK(map_lock);
static struct ib_uverbs_device *dev_table[IB_UVERBS_MAX_DEVICES];
static DECLARE_BITMAP(dev_map, IB_UVERBS_MAX_DEVICES);
@@ -584,14 +584,16 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf,
if (hdr.command < 0 ||
hdr.command >= ARRAY_SIZE(uverbs_cmd_table) ||
- !uverbs_cmd_table[hdr.command] ||
- !(file->device->ib_dev->uverbs_cmd_mask & (1ull << hdr.command)))
+ !uverbs_cmd_table[hdr.command])
return -EINVAL;
if (!file->ucontext &&
hdr.command != IB_USER_VERBS_CMD_GET_CONTEXT)
return -EINVAL;
+ if (!(file->device->ib_dev->uverbs_cmd_mask & (1ull << hdr.command)))
+ return -ENOSYS;
+
return uverbs_cmd_table[hdr.command](file, buf + sizeof hdr,
hdr.in_words * 4, hdr.out_words * 4);
}
@@ -836,8 +838,6 @@ static int __init ib_uverbs_init(void)
{
int ret;
- spin_lock_init(&map_lock);
-
ret = register_chrdev_region(IB_UVERBS_BASE_DEV, IB_UVERBS_MAX_DEVICES,
"infiniband_verbs");
if (ret) {