mwifiex: process RX packets in SDIO IRQ thread directly

ksdioirqd has higher priority than kworker. Process RX packets
in SDIO IRQ thread (ksdioirqd/mmcX) directly instead of deferring
the work to kworker to avoid the extra latency.
This improves TCP throughput 15~20% on an ARM platform with SDIO
2.0 controller.

Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Bing Zhao 2012-11-05 16:59:15 -08:00 committed by John W. Linville
parent 1993732e3b
commit 601216e12c
2 changed files with 4 additions and 3 deletions

View File

@ -282,6 +282,7 @@ int mwifiex_main_process(struct mwifiex_adapter *adapter)
mwifiex_shutdown_drv(adapter);
return ret;
}
EXPORT_SYMBOL_GPL(mwifiex_main_process);
/*
* This function frees the adapter structure.

View File

@ -905,8 +905,8 @@ static void mwifiex_interrupt_status(struct mwifiex_adapter *adapter)
/*
* SDIO interrupt handler.
*
* This function reads the interrupt status from firmware and assigns
* the main process in workqueue which will handle the interrupt.
* This function reads the interrupt status from firmware and handles
* the interrupt in current thread (ksdioirqd) right away.
*/
static void
mwifiex_sdio_interrupt(struct sdio_func *func)
@ -929,7 +929,7 @@ mwifiex_sdio_interrupt(struct sdio_func *func)
adapter->ps_state = PS_STATE_AWAKE;
mwifiex_interrupt_status(adapter);
queue_work(adapter->workqueue, &adapter->main_work);
mwifiex_main_process(adapter);
}
/*