Marek Vasut <ma...@denx.de> 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 <ma...@denx.de> > Cc: Angus Ainslie <an...@akkea.ca> > Cc: David S. Miller <da...@davemloft.net> > Cc: Jakub Kicinski <k...@kernel.org> > Cc: Kalle Valo <kv...@codeaurora.org> > Cc: Lee Jones <lee.jo...@linaro.org> > Cc: Martin Kepplinger <mart...@posteo.de> > Cc: Sebastian Krzyszkowiak <sebastian.krzyszkow...@puri.sm> > Cc: Siva Rebbagondla <siva8...@gmail.com> > Cc: linux-wirel...@vger.kernel.org > Cc: netdev@vger.kernel.org > Tested-by: Martin Kepplinger <martin.kepplin...@puri.sm>
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-ma...@denx.de/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches