linux/drivers/net
Marek Vasut ef690e3f62 rsi: Move card interrupt handling to RX thread
[ Upstream commit 287431463e ]

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@denx.de>
Cc: Angus Ainslie <angus@akkea.ca>
Cc: David S. Miller <davem@davemloft.net>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Kalle Valo <kvalo@codeaurora.org>
Cc: Lee Jones <lee.jones@linaro.org>
Cc: Martin Kepplinger <martink@posteo.de>
Cc: Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>
Cc: Siva Rebbagondla <siva8118@gmail.com>
Cc: linux-wireless@vger.kernel.org
Cc: netdev@vger.kernel.org
Tested-by: Martin Kepplinger <martin.kepplinger@puri.sm>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20201103180941.443528-1-marex@denx.de
Signed-off-by: Sasha Levin <sashal@kernel.org>
2021-03-07 12:34:08 +01:00
..
appletalk
arcnet
bonding bonding: fix feature flag setting at init time 2020-12-08 11:26:08 -08:00
caif
can can: mcp251xfd: mcp251xfd_probe(): fix errata reference 2021-03-04 11:37:26 +01:00
dsa net: dsa: felix: don't deinitialize unused ports 2021-03-04 11:37:34 +01:00
ethernet net: ag71xx: remove unnecessary MTU reservation 2021-03-07 12:34:07 +01:00
fddi
fjes
hamradio
hippi
hyperv hv_netvsc: Reset the RSC count if NVSP_STAT_FAIL in netvsc_receive() 2021-02-17 11:02:26 +01:00
ieee802154
ipa net: ipa: set error code in gsi_channel_setup() 2021-02-17 11:02:26 +01:00
ipvlan
mdio
netdevsim netdevsim: Add debugfs toggle to reject BPF programs in verifier 2020-12-09 16:27:42 +01:00
pcs
phy net: phy: mscc: adding LCPLL reset to VSC8514 2021-03-04 11:37:35 +01:00
plip
ppp tty: convert tty_ldisc_ops 'read()' function to take a kernel pointer 2021-03-04 11:37:36 +01:00
slip
team team: protect features update by RCU to avoid deadlock 2021-02-03 23:28:51 +01:00
usb net: usb: qmi_wwan: support ZTE P685M modem 2021-03-07 12:34:03 +01:00
vmxnet3
wan net: hdlc_x25: Return meaningful error code in x25_open 2021-02-17 11:02:26 +01:00
wimax
wireguard wireguard: queueing: get rid of per-peer ring buffers 2021-03-04 11:38:47 +01:00
wireless rsi: Move card interrupt handling to RX thread 2021-03-07 12:34:08 +01:00
xen-netback xen/netback: fix spurious event detection for common event case 2021-03-04 11:37:30 +01:00
bareudp.c net: bareudp: add missing error handling for bareudp_link_config() 2021-01-17 14:16:55 +01:00
dummy.c
eql.c
geneve.c Revert "geneve: pull IP header before ECN decapsulation" 2020-12-09 14:40:07 -08:00
gtp.c net: icmp: pass zeroed opts from icmp{,v6}_ndo_send before sending 2021-03-04 11:38:46 +01:00
ifb.c
Kconfig wireguard: kconfig: use arm chacha even with no neon 2021-03-04 11:38:18 +01:00
LICENSE.SRC
loopback.c
macsec.c
macvlan.c
macvtap.c
Makefile
mdio.c
mii.c
net_failover.c
netconsole.c
nlmon.c
ntb_netdev.c
rionet.c
sb1000.c
Space.c
sungem_phy.c
tap.c net: fix dev_ifsioc_locked() race condition 2021-03-07 12:34:07 +01:00
thunderbolt.c
tun.c net: fix dev_ifsioc_locked() race condition 2021-03-07 12:34:07 +01:00
veth.c
virtio_net.c virtio_net: Fix recursive call to cpus_read_lock() 2021-01-12 20:18:10 +01:00
vrf.c vrf: packets with lladdr src needs dst at input with orig_iif when needs strict 2020-12-05 13:46:07 -08:00
vsockmon.c
vxlan.c vxlan: move debug check after netdev unregister 2021-03-04 11:38:18 +01:00
xen-netfront.c