libertas: properly account for queue commands
Properly account for queue commands, this fixes a problem reported by Holger Schurig when using the debugfs interface. Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
51e6b712b5
commit
29f5f2a19b
|
@ -912,6 +912,10 @@ static int wlan_cmd_set_boot2_ver(wlan_private * priv,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Note: NEVER use libertas_queue_cmd() with addtail==0 other than for
|
||||||
|
* the command timer, because it does not account for queued commands.
|
||||||
|
*/
|
||||||
void libertas_queue_cmd(wlan_adapter * adapter, struct cmd_ctrl_node *cmdnode, u8 addtail)
|
void libertas_queue_cmd(wlan_adapter * adapter, struct cmd_ctrl_node *cmdnode, u8 addtail)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
@ -941,10 +945,11 @@ void libertas_queue_cmd(wlan_adapter * adapter, struct cmd_ctrl_node *cmdnode, u
|
||||||
|
|
||||||
spin_lock_irqsave(&adapter->driver_lock, flags);
|
spin_lock_irqsave(&adapter->driver_lock, flags);
|
||||||
|
|
||||||
if (addtail)
|
if (addtail) {
|
||||||
list_add_tail((struct list_head *)cmdnode,
|
list_add_tail((struct list_head *)cmdnode,
|
||||||
&adapter->cmdpendingq);
|
&adapter->cmdpendingq);
|
||||||
else
|
adapter->nr_cmd_pending++;
|
||||||
|
} else
|
||||||
list_add((struct list_head *)cmdnode, &adapter->cmdpendingq);
|
list_add((struct list_head *)cmdnode, &adapter->cmdpendingq);
|
||||||
|
|
||||||
spin_unlock_irqrestore(&adapter->driver_lock, flags);
|
spin_unlock_irqrestore(&adapter->driver_lock, flags);
|
||||||
|
@ -1412,7 +1417,6 @@ int libertas_prepare_and_send_command(wlan_private * priv,
|
||||||
cmdnode->cmdwaitqwoken = 0;
|
cmdnode->cmdwaitqwoken = 0;
|
||||||
|
|
||||||
libertas_queue_cmd(adapter, cmdnode, 1);
|
libertas_queue_cmd(adapter, cmdnode, 1);
|
||||||
adapter->nr_cmd_pending++;
|
|
||||||
wake_up_interruptible(&priv->waitq);
|
wake_up_interruptible(&priv->waitq);
|
||||||
|
|
||||||
if (wait_option & CMD_OPTION_WAITFORRSP) {
|
if (wait_option & CMD_OPTION_WAITFORRSP) {
|
||||||
|
|
Loading…
Reference in a new issue