diff options
author | Vinayak Pane <vpane@nvidia.com> | 2014-06-30 19:37:20 -0700 |
---|---|---|
committer | Mandar Padmawar <mpadmawar@nvidia.com> | 2014-07-10 02:05:28 -0700 |
commit | 18e24631245a49bc522154eee4574f4564d9e3af (patch) | |
tree | 377808609da83ccbbe72ec083b9cc8960d24400e | |
parent | 4352ee53c89a2e406d5ab8d608754bc8aeabec06 (diff) |
staging: ozwpan: cancel hrtimers at oz_pd_stop
When PD is stopping, cancel hrtimers associated with it
instead of waiting for pd_destroy to cancel them.
Bug 200013781
Change-Id: Id6628e21b766a2f80ecfbe982cde2b82409c6637
Signed-off-by: Vinayak Pane <vpane@nvidia.com>
Reviewed-on: http://git-master/r/432985
(cherry picked from commit b61d6a4da28f9b54d542e396a4a251d4ec4d9a0b)
Reviewed-on: http://git-master/r/435728
GVS: Gerrit_Virtual_Submit
Reviewed-by: Anshul Jain (SW) <anshulj@nvidia.com>
Tested-by: Anshul Jain (SW) <anshulj@nvidia.com>
-rw-r--r-- | drivers/staging/ozwpan/ozpd.c | 18 | ||||
-rw-r--r-- | drivers/staging/ozwpan/ozproto.c | 10 |
2 files changed, 18 insertions, 10 deletions
diff --git a/drivers/staging/ozwpan/ozpd.c b/drivers/staging/ozwpan/ozpd.c index 27e06be53b4f..211f1bba4c70 100644 --- a/drivers/staging/ozwpan/ozpd.c +++ b/drivers/staging/ozwpan/ozpd.c @@ -255,7 +255,7 @@ static void oz_pd_free(struct work_struct *work) kfree(container_of(e, struct oz_tx_frame, link)); } if (pd->net_dev) { - oz_trace_msg(M, "dev_put(%p)\n", pd->net_dev); + oz_trace_msg(M, "%s: dev_put(%p)\n", __func__, pd->net_dev); dev_put(pd->net_dev); } kfree(pd); @@ -279,11 +279,6 @@ void oz_pd_destroy(struct oz_pd *pd) } pd->pd_destroy_scheduled = true; - if (hrtimer_active(&pd->timeout)) - hrtimer_cancel(&pd->timeout); - if (hrtimer_active(&pd->heartbeat)) - hrtimer_cancel(&pd->heartbeat); - ret = schedule_work(&pd->workitem); if (!ret) pr_info("failed to schedule workitem\n"); @@ -409,6 +404,17 @@ void oz_pd_stop(struct oz_pd *pd) oz_services_stop(pd, stop_apps, 0); oz_polling_lock_bh(); oz_pd_set_state(pd, OZ_PD_S_STOPPED); + + if (hrtimer_active(&pd->timeout)) { + pr_info("hrtimer timeout active\n"); + hrtimer_cancel(&pd->timeout); + } + if (hrtimer_active(&pd->heartbeat)) { + pr_info("hrtimer heartbeat active\n"); + hrtimer_cancel(&pd->heartbeat); + } + /* connect_req will restart timers */ + /* Remove from PD list.*/ list_del(&pd->link); diff --git a/drivers/staging/ozwpan/ozproto.c b/drivers/staging/ozwpan/ozproto.c index a9eea6e0692d..424713559cdd 100644 --- a/drivers/staging/ozwpan/ozproto.c +++ b/drivers/staging/ozwpan/ozproto.c @@ -192,7 +192,7 @@ static struct oz_pd *oz_connect_req(struct oz_pd *cur_pd, struct oz_elt *elt, } if (pd->net_dev != net_dev) { old_net_dev = pd->net_dev; - oz_trace_msg(M, "dev_hold(%p)\n", net_dev); + oz_trace_msg(M, "%s: dev_hold(%p)\n", __func__, net_dev); dev_hold(net_dev); pd->net_dev = net_dev; } @@ -282,7 +282,7 @@ done: pd = NULL; } if (old_net_dev) { - oz_trace_msg(M, "dev_put(%p)", old_net_dev); + oz_trace_msg(M, "%s: dev_put(%p)", __func__, old_net_dev); dev_put(old_net_dev); } if (free_pd) @@ -473,7 +473,8 @@ void oz_protocol_term(void) spin_unlock_bh(&g_binding_lock); dev_remove_pack(&b->ptype); if (b->ptype.dev) { - oz_trace_msg(M, "dev_put(%p)\n", b->ptype.dev); + oz_trace_msg(M, "%s: dev_put(%p)\n", __func__, + b->ptype.dev); dev_put(b->ptype.dev); } kfree(b); @@ -778,7 +779,8 @@ void oz_binding_remove(const char *net_dev) if (found) { dev_remove_pack(&binding->ptype); if (binding->ptype.dev) { - oz_trace_msg(M, "dev_put(%s)\n", binding->name); + oz_trace_msg(M, "%s: dev_put(%s)\n", __func__, + binding->name); dev_put(binding->ptype.dev); pd_stop_all_for_device(binding->ptype.dev); } |