Skip to content

Commit

Permalink
staging: vt6655: change tx wake queue
Browse files Browse the repository at this point in the history
Wake queue in the dwIsr loop of device_intr instead of device_tx_srv.

This fixes an issue when ISR_TXDMA0 or ISR_AC0DMA does not occur
device_tx_srv is not called and the queue gets stuck in stopped
condition.

On test if the queue is stuck another MACvTransmitAC0 or MACvTransmit0
in vnt_tx_packet will clear it.

Check on vif that both buffers are available and the queue is stopped.

Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Malcolm Priestley authored and Greg Kroah-Hartman committed Nov 5, 2014
1 parent 9b50564 commit 54fbb2d
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions drivers/staging/vt6655/device_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1014,10 +1014,6 @@ static int device_tx_srv(struct vnt_private *pDevice, unsigned int uIdx)
}
device_free_tx_buf(pDevice, pTD);
pDevice->iTDUsed[uIdx]--;

/* Make sure queue is available */
if (AVAIL_TD(pDevice, uIdx))
ieee80211_wake_queues(pDevice->hw);
}
}

Expand Down Expand Up @@ -1190,6 +1186,14 @@ static irqreturn_t device_intr(int irq, void *dev_instance)
}
}

/* If both buffers available wake the queue */
if (pDevice->vif) {
if (AVAIL_TD(pDevice, TYPE_TXDMA0) &&
AVAIL_TD(pDevice, TYPE_AC0DMA) &&
ieee80211_queue_stopped(pDevice->hw, 0))
ieee80211_wake_queues(pDevice->hw);
}

MACvReadISR(pDevice->PortOffset, &pDevice->dwIsr);

MACvReceive0(pDevice->PortOffset);
Expand Down

0 comments on commit 54fbb2d

Please sign in to comment.