Search Linux Wireless

Re: [PATCH 11/11] rtlwifi: Add work queue for c2h cmd.

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

 



Larry Finger <Larry.Finger@xxxxxxxxxxxx> writes:

> From: Ping-Ke Shih <pkshih@xxxxxxxxxxx>
>
> btcoex needs to sleep, thus it must run in thread context.
>
> Signed-off-by: Ping-Ke Shih <pkshih@xxxxxxxxxxx>
> Signed-off-by: Larry Finger <Larry.Finger@xxxxxxxxxxxx>

[...]

> +void rtl_c2hcmd_launcher(struct ieee80211_hw *hw, int exec)
> +{
> +	struct rtl_priv *rtlpriv = rtl_priv(hw);
> +	unsigned long flags;
> +	struct rtl_c2hcmd *c2hcmd;
> +
> +	while (true) {
> +		/* dequeue a task */
> +		spin_lock_irqsave(&rtlpriv->locks.c2hcmd_lock, flags);
> +
> +		c2hcmd = list_first_entry_or_null(&rtlpriv->c2hcmd_list,
> +						  struct rtl_c2hcmd, list);
> +
> +		if (c2hcmd)
> +			list_del(&c2hcmd->list);
> +
> +		spin_unlock_irqrestore(&rtlpriv->locks.c2hcmd_lock, flags);
> +
> +		/* do it */
> +		if (!c2hcmd)
> +			break;
> +
> +		if (rtlpriv->cfg->ops->c2h_content_parsing && exec)
> +			rtlpriv->cfg->ops->c2h_content_parsing(hw,
> +					c2hcmd->tag, c2hcmd->len, c2hcmd->val);
> +
> +		/* free */
> +		kfree(c2hcmd->val);
> +
> +		kfree(c2hcmd);
> +	}
> +}

Never ending loops are not really preferred in kernel, with a simple bug
it could cause annoying system-wide problems. Can you add a some sort of
failsafe mechanism, for example bailing out from the loop if it has been
running more than 200 ms or something like that?

-- 
Kalle Valo



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

  Powered by Linux