summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVinayak Pane <vpane@nvidia.com>2014-06-30 19:37:20 -0700
committerMandar Padmawar <mpadmawar@nvidia.com>2014-07-10 02:05:28 -0700
commit18e24631245a49bc522154eee4574f4564d9e3af (patch)
tree377808609da83ccbbe72ec083b9cc8960d24400e
parent4352ee53c89a2e406d5ab8d608754bc8aeabec06 (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.c18
-rw-r--r--drivers/staging/ozwpan/ozproto.c10
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);
}