diff options
author | Dmitry Shmidt <dimitrysh@google.com> | 2011-10-05 10:48:59 -0700 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:39:11 -0800 |
commit | 1e6d8141c9248a37df284954c2e72aea58f2c6ab (patch) | |
tree | b491172c76d7e25b4fe1d81dd0f8ec4efc7fd618 /drivers/net/wireless | |
parent | 0daf42593c646d84dc8c71f9e46a81502a579c0d (diff) |
net: wireless: bcmdhd: Fix event thread termination in case of empty queue
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r-- | drivers/net/wireless/bcmdhd/wl_cfg80211.c | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/drivers/net/wireless/bcmdhd/wl_cfg80211.c b/drivers/net/wireless/bcmdhd/wl_cfg80211.c index 1eaf512b6f2e..a576ca38db79 100644 --- a/drivers/net/wireless/bcmdhd/wl_cfg80211.c +++ b/drivers/net/wireless/bcmdhd/wl_cfg80211.c @@ -5735,22 +5735,18 @@ static s32 wl_event_handler(void *data) SMP_RD_BARRIER_DEPENDS(); if (tsk->terminated) break; - e = wl_deq_event(wl); - if (unlikely(!e)) { - WL_ERR(("equeue empty..\n")); - DHD_OS_WAKE_UNLOCK(wl->pub); - return 0; - } - WL_DBG(("event type (%d), if idx: %d\n", e->etype, e->emsg.ifidx)); - netdev = dhd_idx2net((struct dhd_pub *)(wl->pub), e->emsg.ifidx); - if (!netdev) - netdev = wl_to_prmry_ndev(wl); - if (e->etype < WLC_E_LAST && wl->evt_handler[e->etype]) { - wl->evt_handler[e->etype] (wl, netdev, &e->emsg, e->edata); - } else { - WL_DBG(("Unknown Event (%d): ignoring\n", e->etype)); + while ((e = wl_deq_event(wl))) { + WL_DBG(("event type (%d), if idx: %d\n", e->etype, e->emsg.ifidx)); + netdev = dhd_idx2net((struct dhd_pub *)(wl->pub), e->emsg.ifidx); + if (!netdev) + netdev = wl_to_prmry_ndev(wl); + if (e->etype < WLC_E_LAST && wl->evt_handler[e->etype]) { + wl->evt_handler[e->etype] (wl, netdev, &e->emsg, e->edata); + } else { + WL_DBG(("Unknown Event (%d): ignoring\n", e->etype)); + } + wl_put_event(e); } - wl_put_event(e); DHD_OS_WAKE_UNLOCK(wl->pub); } WL_DBG(("%s was terminated\n", __func__)); |