From b854ae9c453fa8bfdbd6d4ed97392062eb88a13a Mon Sep 17 00:00:00 2001 From: Mike Marciniszyn Date: Fri, 6 Jul 2012 18:29:45 +0000 Subject: [PATCH] --- yaml --- r: 316385 b: refs/heads/master c: 7e23017704172cb6508cb365eb2cae7335e5da71 h: refs/heads/master i: 316383: 6feca0e589128a58fef0fa71cf0fb24922de1088 v: v3 --- [refs] | 2 +- trunk/drivers/infiniband/hw/qib/qib_keys.c | 4 +++- trunk/drivers/infiniband/hw/qib/qib_verbs.h | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 00808b1622ac..bcfb91c65a8a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8aac4cc3a9d7d7c2f203b7a8db521b604cfb5dc9 +refs/heads/master: 7e23017704172cb6508cb365eb2cae7335e5da71 diff --git a/trunk/drivers/infiniband/hw/qib/qib_keys.c b/trunk/drivers/infiniband/hw/qib/qib_keys.c index 970165b027f7..e9486c74c226 100644 --- a/trunk/drivers/infiniband/hw/qib/qib_keys.c +++ b/trunk/drivers/infiniband/hw/qib/qib_keys.c @@ -349,7 +349,9 @@ int qib_fast_reg_mr(struct qib_qp *qp, struct ib_send_wr *wr) if (pd->user || rkey == 0) goto bail; - mr = rkt->table[(rkey >> (32 - ib_qib_lkey_table_size))]; + mr = rcu_dereference_protected( + rkt->table[(rkey >> (32 - ib_qib_lkey_table_size))], + lockdep_is_held(&rkt->lock)); if (unlikely(mr == NULL || qp->ibqp.pd != mr->pd)) goto bail; diff --git a/trunk/drivers/infiniband/hw/qib/qib_verbs.h b/trunk/drivers/infiniband/hw/qib/qib_verbs.h index 85751fd74371..1293133f28cb 100644 --- a/trunk/drivers/infiniband/hw/qib/qib_verbs.h +++ b/trunk/drivers/infiniband/hw/qib/qib_verbs.h @@ -650,7 +650,7 @@ struct qib_lkey_table { u32 next; /* next unused index (speeds search) */ u32 gen; /* generation count */ u32 max; /* size of the table */ - struct qib_mregion **table; + struct qib_mregion __rcu **table; }; struct qib_opcode_stats { @@ -732,7 +732,7 @@ struct qib_ibdev { struct list_head pending_mmaps; spinlock_t mmap_offset_lock; /* protect mmap_offset */ u32 mmap_offset; - struct qib_mregion *dma_mr; + struct qib_mregion __rcu *dma_mr; /* QP numbers are shared by all IB ports */ struct qib_qpn_table qpn_table;