]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
ib_core: User mode FMR fixes 2012-06-11
authorDotan Barak <dotanb@dev.mellanox.co.il>
Wed, 11 Jul 2012 09:45:12 +0000 (03:45 -0600)
committerMukesh Kacker <mukesh.kacker@oracle.com>
Fri, 11 Sep 2015 17:14:56 +0000 (10:14 -0700)
Orabug: 21517998

Signed-off-by: Arun Kaimalettu <gotoarunk@gmail.com>
(Ported from UEK2/Mellanox OFED 1.5.5R2)

Signed-off-by: Mukesh Kacker <mukesh.kacker@oracle.com>
drivers/infiniband/core/fmr_pool.c
drivers/infiniband/core/uverbs_cmd.c
drivers/infiniband/core/uverbs_main.c

index dfadbc0c45dcceed488f818fcddf03fe3543315c..2e9e1404c2091dc72d92691306e11957efb3bd9d 100644 (file)
@@ -299,8 +299,8 @@ static int ib_fmr_cleanup_thread(void *pool_ptr)
                set_current_state(TASK_INTERRUPTIBLE);
                if (atomic_read(&pool->flush_ser) - atomic_read(&pool->req_ser) >= 0 &&
                    !kthread_should_stop()) {
-                       /* run once in 1 sec */
-                       time_left = schedule_timeout((HZ/FMR_SPLIT_COUNT)/20);
+                       /* run once in 50 mills */
+                       time_left = schedule_timeout(msecs_to_jiffies(50));
                }
                __set_current_state(TASK_RUNNING);
        } while (!kthread_should_stop());
index aa39c2ec531c0795cd29f492bf47867844a509aa..51731346c3a6e88dbf11fba25bcf41501e8e6d21 100644 (file)
@@ -1750,6 +1750,7 @@ err_copy:
 
 err_unreg:
        ib_fmr_pool_unmap(fmr);
+       atomic_dec(&pd->usecnt);
 
 err_free_sg:
         /* if mapped already, this will be freed while flushing */
index fedf6008603b4d02dc8a667746f976f29a353867..c8b3ada3d4ca8d8d69041aba0f24dd5420b97837 100644 (file)
@@ -306,9 +306,11 @@ static int ib_uverbs_cleanup_ucontext(struct ib_uverbs_file *file,
 
        list_for_each_entry_safe(uobj, tmp, &context->fmr_list, list) {
                struct ib_pool_fmr *fmr = uobj->object;
+               struct ib_pd *pd = fmr->pd;
 
                idr_remove_uobj(&ib_uverbs_fmr_idr, uobj);
                ib_fmr_pool_unmap(fmr);
+               atomic_dec(&pd->usecnt);
                kfree(uobj);
        }