staging/hfi1: Convert lock to mutex
authorMitko Haralanov <mitko.haralanov@intel.com>
Fri, 5 Feb 2016 16:57:53 +0000 (11:57 -0500)
committerDoug Ledford <dledford@redhat.com>
Mon, 29 Feb 2016 22:10:39 +0000 (17:10 -0500)
The exp_lock lock does not need to be a spinlock as
all its uses are in process context and allowing the
process to sleep when the mutex is contended might
be beneficial.

Signed-off-by: Mitko Haralanov <mitko.haralanov@intel.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/staging/rdma/hfi1/file_ops.c
drivers/staging/rdma/hfi1/hfi.h
drivers/staging/rdma/hfi1/init.c

index 76fe60315bb458b1b41c04c46e2dfc078f4910d1..b0348263b90146c93d062990e44aa7af146d2165 100644 (file)
@@ -1611,14 +1611,14 @@ static int exp_tid_setup(struct file *fp, struct hfi1_tid_info *tinfo)
                 * reserved, we don't need the lock anymore since we
                 * are guaranteed the groups.
                 */
-               spin_lock(&uctxt->exp_lock);
+               mutex_lock(&uctxt->exp_lock);
                if (uctxt->tidusemap[useidx] == -1ULL ||
                    bitidx >= BITS_PER_LONG) {
                        /* no free groups in the set, use the next */
                        useidx = (useidx + 1) % uctxt->tidmapcnt;
                        idx++;
                        bitidx = 0;
-                       spin_unlock(&uctxt->exp_lock);
+                       mutex_unlock(&uctxt->exp_lock);
                        continue;
                }
                ngroups = ((npages - mapped) / dd->rcv_entries.group_size) +
@@ -1635,13 +1635,13 @@ static int exp_tid_setup(struct file *fp, struct hfi1_tid_info *tinfo)
                         * as 0 because we don't check the entire bitmap but
                         * we start from bitidx.
                         */
-                       spin_unlock(&uctxt->exp_lock);
+                       mutex_unlock(&uctxt->exp_lock);
                        continue;
                }
                bits_used = min(free, ngroups);
                tidmap[useidx] |= ((1ULL << bits_used) - 1) << bitidx;
                uctxt->tidusemap[useidx] |= tidmap[useidx];
-               spin_unlock(&uctxt->exp_lock);
+               mutex_unlock(&uctxt->exp_lock);
 
                /*
                 * At this point, we know where in the map we have free bits.
@@ -1677,10 +1677,10 @@ static int exp_tid_setup(struct file *fp, struct hfi1_tid_info *tinfo)
                         * Let go of the bits that we reserved since we are not
                         * going to use them.
                         */
-                       spin_lock(&uctxt->exp_lock);
+                       mutex_lock(&uctxt->exp_lock);
                        uctxt->tidusemap[useidx] &=
                                ~(((1ULL << bits_used) - 1) << bitidx);
-                       spin_unlock(&uctxt->exp_lock);
+                       mutex_unlock(&uctxt->exp_lock);
                        goto done;
                }
                /*
index 51ecf45ef70bcbad492f023df6bcd9f19f31ace7..53f464cc40ef2b20f169208b381b30ce675abf9d 100644 (file)
@@ -258,7 +258,7 @@ struct hfi1_ctxtdata {
        struct exp_tid_set tid_full_list;
 
        /* lock protecting all Expected TID data */
-       spinlock_t exp_lock;
+       struct mutex exp_lock;
        /* number of pio bufs for this ctxt (all procs, if shared) */
        u32 piocnt;
        /* first pio buffer for this ctxt */
index 4dd8051aba7ef7868ac12f6405742a3f476ccb89..72c51431b2bf2ab6b275238ea20ea2d153f82487 100644 (file)
@@ -227,7 +227,7 @@ struct hfi1_ctxtdata *hfi1_create_ctxtdata(struct hfi1_pportdata *ppd, u32 ctxt)
                rcd->numa_id = numa_node_id();
                rcd->rcv_array_groups = dd->rcv_entries.ngroups;
 
-               spin_lock_init(&rcd->exp_lock);
+               mutex_init(&rcd->exp_lock);
 
                /*
                 * Calculate the context's RcvArray entry starting point.