libertas: properly account for queue commands
PATCH 1/1 libertas: properly account for queue commands
Target for 2.6.24 and a candidate for stable as well.
From: Marcelo Tosatti <[email protected]>
Properly account for queue commands, this fixes a problem reported by Holger Schurig when using the debugfs interface.
Signed-off-by Marcelo Tosatti <[email protected]>
drivers/net/wireless/libertas/cmd.c +7 -3
@@ -901,6 +901,10 @@ static int wlan_cmd_mesh_access(wlan_prireturn 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) {unsigned long flags;
@@ -930,10 +934,11 @@ void libertas_queue_cmd(wlan_adapter * aspin_lock_irqsave (&adapter->driver_lock, flags); -if (addtail) +if (addtail) {list_add_tail ((struct list_head *)cmdnode, &adapter->cmdpendingq); -else + adapter->nr_cmd_pending++; + }else list_add ((struct list_head *)cmdnode, &adapter->cmdpendingq);spin_unlock_irqrestore (&adapter->driver_lock, flags);
@@ -1412,7 +1417,6 @@ #define ACTION_NUMLED_TLVTYPE_LEN_FIELDS cmdnode->cmdwaitqwoken =0 ;libertas_queue_cmd (adapter, cmdnode,1 ); - adapter->nr_cmd_pending++;wake_up_interruptible (&priv->waitq);if (wait_option &CMD_OPTION_WAITFORRSP ) {