[PATCH 01/14] staging: brcm80211: use wait queues instead of semaphores in wl_cfg80211.c
Rafał Miłecki
zajec5 at gmail.com
Fri Aug 12 14:07:13 UTC 2011
2011/8/12 Arend van Spriel <arend at broadcom.com>:
> @@ -3537,27 +3544,39 @@ static s32 brcmf_event_handler(void *data)
> (struct brcmf_cfg80211_priv *)data;
> struct sched_param param = {.sched_priority = MAX_RT_PRIO - 1 };
> struct brcmf_cfg80211_event_q *e;
> + DECLARE_WAITQUEUE(wait, current);
>
> sched_setscheduler(current, SCHED_FIFO, ¶m);
> allow_signal(SIGTERM);
> - while (likely(!down_interruptible(&cfg_priv->event_sync))) {
> + add_wait_queue(&cfg_priv->event_waitq, &wait);
> + while (1) {
> + prepare_to_wait(&cfg_priv->event_waitq, &wait,
> + TASK_INTERRUPTIBLE);
> +
> + schedule();
> +
> if (kthread_should_stop())
> break;
> +
> e = brcmf_deq_event(cfg_priv);
> if (unlikely(!e)) {
> WL_ERR("event queue empty...\n");
> - BUG();
> + continue;
> }
> - WL_INFO("event type (%d)\n", e->etype);
> - if (cfg_priv->el.handler[e->etype])
> - cfg_priv->el.handler[e->etype](cfg_priv,
> - cfg_to_ndev(cfg_priv),
> - &e->emsg, e->edata);
> - else
> - WL_INFO("Unknown Event (%d): ignoring\n", e->etype);
>
> - brcmf_put_event(e);
> + do {
> + WL_INFO("event type (%d)\n", e->etype);
> + if (cfg_priv->el.handler[e->etype])
> + cfg_priv->el.handler[e->etype](cfg_priv,
> + cfg_to_ndev(cfg_priv),
> + &e->emsg, e->edata);
> + else
> + WL_INFO("Unknown Event (%d): ignoring\n",
> + e->etype);
> + brcmf_put_event(e);
> + } while ((e = brcmf_deq_event(cfg_priv)));
if (((((care_coding_style)))))
fix();
:-)
--
Rafał
More information about the devel
mailing list