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); mwifiex_shutdown_drv(adapter);
return ret; return ret;
} }
EXPORT_SYMBOL_GPL(mwifiex_main_process);
/* /*
* This function frees the adapter structure. * This function frees the adapter structure.

View File

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