diff options
author | Dotan Barak <dotanb@dev.mellanox.co.il> | 2008-04-17 00:09:28 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2008-04-17 00:09:28 -0400 |
commit | 7ce5eacb45a7c819a6bec6ed486f27db9aab6ab6 (patch) | |
tree | 9dfd0646b19d8b03627753c9f0267fb074a2f50c /drivers | |
parent | b3b8128fd3b0966830ee90f1162173d07cb496a0 (diff) |
IB/core: Check optional verbs before using them
Make sure that a device implements the modify_srq and reg_phys_mr
optional methods before calling them.
Signed-off-by: Dotan Barak <dotanb@dev.mellanox.co.il>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/infiniband/core/verbs.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c index 86ed8af9c7e6..8ffb5f2c21f7 100644 --- a/drivers/infiniband/core/verbs.c +++ b/drivers/infiniband/core/verbs.c | |||
@@ -248,7 +248,9 @@ int ib_modify_srq(struct ib_srq *srq, | |||
248 | struct ib_srq_attr *srq_attr, | 248 | struct ib_srq_attr *srq_attr, |
249 | enum ib_srq_attr_mask srq_attr_mask) | 249 | enum ib_srq_attr_mask srq_attr_mask) |
250 | { | 250 | { |
251 | return srq->device->modify_srq(srq, srq_attr, srq_attr_mask, NULL); | 251 | return srq->device->modify_srq ? |
252 | srq->device->modify_srq(srq, srq_attr, srq_attr_mask, NULL) : | ||
253 | -ENOSYS; | ||
252 | } | 254 | } |
253 | EXPORT_SYMBOL(ib_modify_srq); | 255 | EXPORT_SYMBOL(ib_modify_srq); |
254 | 256 | ||
@@ -672,6 +674,9 @@ struct ib_mr *ib_reg_phys_mr(struct ib_pd *pd, | |||
672 | { | 674 | { |
673 | struct ib_mr *mr; | 675 | struct ib_mr *mr; |
674 | 676 | ||
677 | if (!pd->device->reg_phys_mr) | ||
678 | return ERR_PTR(-ENOSYS); | ||
679 | |||
675 | mr = pd->device->reg_phys_mr(pd, phys_buf_array, num_phys_buf, | 680 | mr = pd->device->reg_phys_mr(pd, phys_buf_array, num_phys_buf, |
676 | mr_access_flags, iova_start); | 681 | mr_access_flags, iova_start); |
677 | 682 | ||