Marek Vasut <[email protected]> wrote: > The interrupt handling of the RS911x is particularly heavy. For each RX > packet, the card does three SDIO transactions, one to read interrupt > status register, one to RX buffer length, one to read the RX packet(s). > This translates to ~330 uS per one cycle of interrupt handler. In case > there is more incoming traffic, this will be more. > > The drivers/mmc/core/sdio_irq.c has the following comment, quote "Just > like traditional hard IRQ handlers, we expect SDIO IRQ handlers to be > quick and to the point, so that the holding of the host lock does not > cover too much work that doesn't require that lock to be held." > > The RS911x interrupt handler does not fit that. This patch therefore > changes it such that the entire IRQ handler is moved to the RX thread > instead, and the interrupt handler only wakes the RX thread. > > This is OK, because the interrupt handler only does things which can > also be done in the RX thread, that is, it checks for firmware loading > error(s), it checks buffer status, it checks whether a packet arrived > and if so, reads out the packet and passes it to network stack. > > Moreover, this change permits removal of a code which allocated an > skbuff only to get 4-byte-aligned buffer, read up to 8kiB of data > into the skbuff, queue this skbuff into local private queue, then in > RX thread, this buffer is dequeued, the data in the skbuff as passed > to the RSI driver core, and the skbuff is deallocated. All this is > replaced by directly calling the RSI driver core with local buffer. > > Signed-off-by: Marek Vasut <[email protected]> > Cc: Angus Ainslie <[email protected]> > Cc: David S. Miller <[email protected]> > Cc: Jakub Kicinski <[email protected]> > Cc: Kalle Valo <[email protected]> > Cc: Lee Jones <[email protected]> > Cc: Martin Kepplinger <[email protected]> > Cc: Sebastian Krzyszkowiak <[email protected]> > Cc: Siva Rebbagondla <[email protected]> > Cc: [email protected] > Cc: [email protected] > Tested-by: Martin Kepplinger <[email protected]>
2 patches applied to wireless-drivers-next.git, thanks. 287431463e78 rsi: Move card interrupt handling to RX thread abd131a19f6b rsi: Clean up loop in the interrupt handler -- https://patchwork.kernel.org/project/linux-wireless/patch/[email protected]/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
