Search Linux Wireless

Re: [PATCH 01/14] staging: brcm80211: use wait queues instead of semaphores in wl_cfg80211.c

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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, &param);
>        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



[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux