Marek Vasut <marex@xxxxxxx> 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 <marex@xxxxxxx> > Cc: Angus Ainslie <angus@xxxxxxxx> > Cc: David S. Miller <davem@xxxxxxxxxxxxx> > Cc: Jakub Kicinski <kuba@xxxxxxxxxx> > Cc: Kalle Valo <kvalo@xxxxxxxxxxxxxx> > Cc: Lee Jones <lee.jones@xxxxxxxxxx> > Cc: Martin Kepplinger <martink@xxxxxxxxx> > Cc: Sebastian Krzyszkowiak <sebastian.krzyszkowiak@xxxxxxx> > Cc: Siva Rebbagondla <siva8118@xxxxxxxxx> > Cc: linux-wireless@xxxxxxxxxxxxxxx > Cc: netdev@xxxxxxxxxxxxxxx > Tested-by: Martin Kepplinger <martin.kepplinger@xxxxxxx> 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/20201103180941.443528-1-marex@xxxxxxx/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches