From 538181a879368f54544b91e414ea56a88008782b Mon Sep 17 00:00:00 2001 From: Alexander Aring Date: Tue, 28 Oct 2014 18:21:27 +0100 Subject: [PATCH] mac802154: add synchronization handling This patch adds synchronization handling in start and stop driver ops calls. This patch is mostly grab from mac80211 which was introduced by commit ea77f12f2cc0f31168f2e0259e65a22202ac4dc2 ("mac80211: remove tasklet enable/disable"). This is to be sure that we don't run into same issues. Signed-off-by: Alexander Aring Signed-off-by: Marcel Holtmann --- net/mac802154/driver-ops.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/net/mac802154/driver-ops.h b/net/mac802154/driver-ops.h index bb3ee03c1669..4b820cfeb538 100644 --- a/net/mac802154/driver-ops.h +++ b/net/mac802154/driver-ops.h @@ -30,6 +30,7 @@ static inline int drv_start(struct ieee802154_local *local) might_sleep(); local->started = true; + smp_mb(); return local->ops->start(&local->hw); } @@ -40,6 +41,12 @@ static inline void drv_stop(struct ieee802154_local *local) local->ops->stop(&local->hw); + /* sync away all work on the tasklet before clearing started */ + tasklet_disable(&local->tasklet); + tasklet_enable(&local->tasklet); + + barrier(); + local->started = false; } -- 2.11.0