aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDotan Barak <dotanb@dev.mellanox.co.il>2008-04-17 00:09:28 -0400
committerRoland Dreier <rolandd@cisco.com>2008-04-17 00:09:28 -0400
commit7ce5eacb45a7c819a6bec6ed486f27db9aab6ab6 (patch)
tree9dfd0646b19d8b03627753c9f0267fb074a2f50c /drivers
parentb3b8128fd3b0966830ee90f1162173d07cb496a0 (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.c7
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}
253EXPORT_SYMBOL(ib_modify_srq); 255EXPORT_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