2011/8/12 Arend van Spriel <arend@xxxxxxxxxxxx>: > @@ -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ł ��.n��������+%������w��{.n�����{���zW����ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f