Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 29f5f2a1 authored by Marcelo Tosatti's avatar Marcelo Tosatti Committed by Jeff Garzik
Browse files

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: default avatarMarcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 51e6b712
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -912,6 +912,10 @@ static int wlan_cmd_set_boot2_ver(wlan_private * priv,
	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)
{
	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);

	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 @@ int libertas_prepare_and_send_command(wlan_private * priv,
	cmdnode->cmdwaitqwoken = 0;

	libertas_queue_cmd(adapter, cmdnode, 1);
	adapter->nr_cmd_pending++;
	wake_up_interruptible(&priv->waitq);

	if (wait_option & CMD_OPTION_WAITFORRSP) {