<[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