<[email protected]> writes:

> From: Yan-Hsuan Chuang <[email protected]>
>
> mac files for Realtek 802.11ac wireless network chips
>
> Reviewed-by: Stanislaw Gruszka <[email protected]>
> Signed-off-by: Yan-Hsuan Chuang <[email protected]>

[...]

> +static int rtw_pwr_cmd_polling(struct rtw_dev *rtwdev,
> +                            struct rtw_pwr_seq_cmd *cmd)
> +{
> +     u8 value;
> +     u8 flag = 0;
> +     u32 offset;
> +     u32 cnt = RTW_PWR_POLLING_CNT;
> +
> +     if (cmd->base == RTW_PWR_ADDR_SDIO)
> +             offset = cmd->offset | SDIO_LOCAL_OFFSET;
> +     else
> +             offset = cmd->offset;
> +
> +     do {
> +             cnt--;
> +             value = rtw_read8(rtwdev, offset);
> +             value &= cmd->mask;
> +             if (value == (cmd->value & cmd->mask))
> +                     return 0;
> +             if (cnt == 0) {
> +                     if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_PCIE &&
> +                         flag == 0) {
> +                             value = rtw_read8(rtwdev, REG_SYS_PW_CTRL);
> +                             value |= BIT(3);
> +                             rtw_write8(rtwdev, REG_SYS_PW_CTRL, value);
> +                             value &= ~BIT(3);
> +                             rtw_write8(rtwdev, REG_SYS_PW_CTRL, value);
> +                             cnt = RTW_PWR_POLLING_CNT;
> +                             flag = 1;
> +                     } else {
> +                             return -EBUSY;
> +                     }
> +             } else {
> +                     udelay(50);
> +             }
> +     } while (1);

Never ending loops in kernel are dangerous. I would add some kind of
fail safe to "while (1)", for example max number of loops or some time
based limit.

-- 
Kalle Valo

Reply via email to