Search Linux Wireless

Re: [PATCH v9 05/14] rtw88: mac files

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

 



<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



[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux