From: Dotan Barak Date: Wed, 11 Jul 2012 09:45:12 +0000 (-0600) Subject: ib_core: User mode FMR fixes 2012-06-11 X-Git-Tag: v4.1.12-92~281^2^2~1 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=f35d803b88ddfded20f404aa3cf53f334605d0b2;p=users%2Fjedix%2Flinux-maple.git ib_core: User mode FMR fixes 2012-06-11 Orabug: 21517998 Signed-off-by: Arun Kaimalettu (Ported from UEK2/Mellanox OFED 1.5.5R2) Signed-off-by: Mukesh Kacker --- diff --git a/drivers/infiniband/core/fmr_pool.c b/drivers/infiniband/core/fmr_pool.c index dfadbc0c45dcc..2e9e1404c2091 100644 --- a/drivers/infiniband/core/fmr_pool.c +++ b/drivers/infiniband/core/fmr_pool.c @@ -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()); diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c index aa39c2ec531c0..51731346c3a6e 100644 --- a/drivers/infiniband/core/uverbs_cmd.c +++ b/drivers/infiniband/core/uverbs_cmd.c @@ -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 */ diff --git a/drivers/infiniband/core/uverbs_main.c b/drivers/infiniband/core/uverbs_main.c index fedf6008603b4..c8b3ada3d4ca8 100644 --- a/drivers/infiniband/core/uverbs_main.c +++ b/drivers/infiniband/core/uverbs_main.c @@ -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); }