Skip to content

Commit

Permalink
wl12xx: Reorder data handling in irq_work
Browse files Browse the repository at this point in the history
The FW has a limited amount of memory for holding frames. In case it
runs out of memory reserved for RX frames, it'll have no other choice
but to drop packets received from the AP. Thus, it is important to
handle RX data interrupts as soon as possible, before handling anything
else.

In addition, since there are enough TX descriptors to go around, it is
better to first send TX frames, and only then handle TX completions.

Fix this by changing the order of function calls in wl1271_irq_work.

Signed-off-by: Ido Yariv <ido@wizery.com>
Signed-off-by: Ohad Ben-Cohen <ohad@wizery.com>
Reviewed-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
  • Loading branch information
Ido Yariv authored and Luciano Coelho committed Mar 3, 2011
1 parent 50e9f74 commit 8aad246
Showing 1 changed file with 5 additions and 5 deletions.
10 changes: 5 additions & 5 deletions drivers/net/wireless/wl12xx/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -685,10 +685,7 @@ static void wl1271_irq_work(struct work_struct *work)
if (intr & WL1271_ACX_INTR_DATA) {
wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_DATA");

/* check for tx results */
if (wl->fw_status->common.tx_results_counter !=
(wl->tx_results_count & 0xff))
wl1271_tx_complete(wl);
wl1271_rx(wl, &wl->fw_status->common);

/* Check if any tx blocks were freed */
if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
Expand All @@ -700,7 +697,10 @@ static void wl1271_irq_work(struct work_struct *work)
wl1271_tx_work_locked(wl);
}

wl1271_rx(wl, &wl->fw_status->common);
/* check for tx results */
if (wl->fw_status->common.tx_results_counter !=
(wl->tx_results_count & 0xff))
wl1271_tx_complete(wl);
}

if (intr & WL1271_ACX_INTR_EVENT_A) {
Expand Down

0 comments on commit 8aad246

Please sign in to comment.