<yhchuang@xxxxxxxxxxx> writes: > From: Yan-Hsuan Chuang <yhchuang@xxxxxxxxxxx> > > mac files for Realtek 802.11ac wireless network chips > > Reviewed-by: Stanislaw Gruszka <sgruszka@xxxxxxxxxx> > Signed-off-by: Yan-Hsuan Chuang <yhchuang@xxxxxxxxxxx> [...] > +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