• Ido Yariv's avatar
    wl12xx: Switch to a threaded interrupt handler · a620865e
    Ido Yariv authored
    To achieve maximal throughput, it is very important to react to
    interrupts as soon as possible. Currently the interrupt handler wakes up
    a worker for handling interrupts in process context. A cleaner and more
    efficient design would be to request a threaded interrupt handler.  This
    handler's priority is very high, and can do blocking operations such as
    SDIO/SPI transactions.
    
    Some work can be deferred, mostly calls to mac80211 APIs
    (ieee80211_rx_ni and ieee80211_tx_status). By deferring such work to a
    different worker, we can keep the irq handler thread more I/O
    responsive. In addition, on multi-core systems the two threads can be
    scheduled on different cores, which will improve overall performance.
    
    The use of WL1271_FLAG_IRQ_PENDING & WL1271_FLAG_IRQ_RUNNING was
    changed. For simplicity, always query the FW for more pending
    interrupts. Since there are relatively long bursts of interrupts, the
    extra FW status read overhead is negligible. In addition, this enables
    registering the IRQ handler with the ONESHOT option.
    Signed-off-by: default avatarIdo Yariv <ido@wizery.com>
    Reviewed-by: default avatarLuciano Coelho <coelho@ti.com>
    Signed-off-by: default avatarLuciano Coelho <coelho@ti.com>
    a620865e
sdio.c 7.71 KB