linux/drivers
Samuel Holland dc892fb443
riscv: Use IPIs for remote cache/TLB flushes by default
An IPI backend is always required in an SMP configuration, but an SBI
implementation is not. For example, SBI will be unavailable when the
kernel runs in M mode. For this reason, consider IPI delivery of cache
and TLB flushes to be the base case, and any other implementation (such
as the SBI remote fence extension) to be an optimization.

Generally, if IPIs can be delivered without firmware assistance, they
are assumed to be faster than SBI calls due to the SBI context switch
overhead. However, when SBI is used as the IPI backend, then the context
switch cost must be paid anyway, and performing the cache/TLB flush
directly in the SBI implementation is more efficient than injecting an
interrupt to S-mode. This is the only existing scenario where
riscv_ipi_set_virq_range() is called with use_for_rfence set to false.

sbi_ipi_init() already checks riscv_ipi_have_virq_range(), so it only
calls riscv_ipi_set_virq_range() when no other IPI device is available.
This allows moving the static key and dropping the use_for_rfence
parameter. This decouples the static key from the irqchip driver probe
order.

Furthermore, the static branch only makes sense when CONFIG_RISCV_SBI is
enabled. Optherwise, IPIs must be used. Add a fallback definition of
riscv_use_sbi_for_rfence() which handles this case and removes the need
to check CONFIG_RISCV_SBI elsewhere, such as in cacheflush.c.

Reviewed-by: Anup Patel <anup@brainfault.org>
Signed-off-by: Samuel Holland <samuel.holland@sifive.com>
Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com>
Link: https://lore.kernel.org/r/20240327045035.368512-4-samuel.holland@sifive.com
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
History 2024-04-29 10:49:26 -07:00
..
accel drm for 6.9: 2024-03-13 18:34:05 -07:00
accessibility Char/Misc and other driver subsystem updates for 6.9-rc1 2024-03-21 13:21:31 -07:00
acpi RISC-V Patches for the 6.9 Merge Window 2024-03-22 10:41:13 -07:00
amba amba: bus: balance firmware node reference counting 2023-10-17 13:37:35 -05:00
android Char/Misc and other driver subsystem updates for 6.9-rc1 2024-03-21 13:21:31 -07:00
ata ahci: asm1064: asm1166: don't limit reported ports 2024-03-19 12:06:54 +01:00
atm atm: fore200e: Convert to platform remove callback returning void 2024-03-07 20:36:32 -08:00
auxdisplay auxdisplay: img-ascii-lcd: Convert to platform remove callback returning void 2024-03-12 17:37:54 +02:00
base Driver core changes for 6.9-rc1 2024-03-21 13:34:15 -07:00
bcma bcma: make bcma_bus_type const 2024-02-06 20:07:35 +02:00
block block-6.9-20240322 2024-03-22 12:46:07 -07:00
bluetooth TTY/Serial driver update for 6.9-rc1 2024-03-21 12:44:10 -07:00
bus Char/Misc and other driver subsystem updates for 6.9-rc1 2024-03-21 13:21:31 -07:00
cache cache: ax45mp_cache: Align end size to cache boundary in ax45mp_dma_cache_wback() 2024-02-21 16:24:10 +00:00
cdrom cdrom: gdrom: Convert to platform remove callback returning void 2024-03-07 11:53:30 -07:00
cdx cdx: add MSI support for CDX bus 2024-03-07 21:52:03 +00:00
char Char/Misc and other driver subsystem updates for 6.9-rc1 2024-03-21 13:21:31 -07:00
clk ARM: late SoC changes for 6.9 2024-03-19 11:57:26 -07:00
clocksource riscv: Use IPIs for remote cache/TLB flushes by default 2024-04-29 10:49:26 -07:00
comedi Char/Misc and other driver subsystem updates for 6.9-rc1 2024-03-21 13:21:31 -07:00
connector connector/cn_proc: revert "connector: Fix proc_event_num_listeners count not cleared" 2024-02-13 11:15:44 +01:00
counter counter: fix privdata alignment 2024-02-16 18:51:00 -05:00
cpufreq RISC-V Patches for the 6.9 Merge Window 2024-03-22 10:41:13 -07:00
cpuidle RISC-V Patches for the 6.9 Merge Window 2024-03-22 10:41:13 -07:00
crypto This update includes the following changes: 2024-03-15 14:46:54 -07:00
cxl Tracing updates for 6.9: 2024-03-18 15:11:44 -07:00
dax libnvdimm updates for v6.9 2024-03-15 11:58:32 -07:00
dca Mainly singleton patches all over the place. Series of note are: 2023-04-27 19:57:00 -07:00
devfreq PM / devfreq: Synchronize devfreq_monitor_[start/stop] 2023-12-19 07:58:27 +09:00
dio dio: make dio_bus_type const 2024-03-07 20:37:04 +00:00
dma dmaengine updates for v6.9 2024-03-15 12:25:13 -07:00
dma-buf Merge drm/drm-next into drm-misc-next 2024-02-07 13:02:20 +01:00
dpll Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2024-03-11 20:38:36 -07:00
edac - Add a FRU (Field Replaceable Unit) memory poison manager which 2024-03-11 18:14:06 -07:00
eisa EISA: Replace all non-returning strlcpy with strscpy 2023-07-27 10:04:42 -07:00
extcon extcon: qcom-spmi-misc: don't use kernel-doc marker for comment 2023-12-12 09:33:47 +09:00
firewire firewire: core: add memo about the caller of show functions for device attributes 2024-03-21 21:20:18 +09:00
firmware EFI fixes for v6.9 #2 2024-03-24 13:54:06 -07:00
fpga Char/Misc and other driver subsystem updates for 6.9-rc1 2024-03-21 13:21:31 -07:00
fsi fsi: i2cr: Switch to use struct i2c_driver's .probe() 2023-08-22 15:51:33 +02:00
gnss treewide, serdev: change receive_buf() return type to size_t 2024-01-27 18:13:53 -08:00
gpio Pin control changes for the v6.9 kernel cycle: 2024-03-14 10:22:26 -07:00
gpu drm fixes for 6.9-rc1 2024-03-21 19:04:31 -07:00
greybus Char/Misc and other driver subsystem updates for 6.9-rc1 2024-03-21 13:21:31 -07:00
hid hid-for-linus-2024031301 2024-03-14 09:56:15 -07:00
hsi HSI: ssi_protocol: fix struct members kernel-doc warnings 2024-02-25 19:05:45 +01:00
hte hte: Changes for v6.7-rc1 2023-10-31 18:32:51 -10:00
hv hyperv-next for v6.9 2024-03-21 10:01:02 -07:00
hwmon - Kuan-Wei Chiu has developed the well-named series "lib min_heap: Min 2024-03-14 18:03:09 -07:00
hwspinlock hwspinlock: omap: Use index to get hwspinlock pointer 2024-03-05 20:01:14 -08:00
hwtracing coresight-tpda: Change qcom,dsb-element-size to qcom,dsb-elem-bits 2024-02-27 11:26:45 +00:00
i2c i2c: muxes: pca954x: Allow sharing reset GPIO 2024-03-20 09:45:04 +01:00
i3c i3c: Make i3c_bus_type const 2024-02-19 21:23:28 +01:00
idle cpuidle: ACPI/intel: fix MWAIT hint target C-state computation 2024-03-05 21:25:18 +01:00
iio Char/Misc and other driver subsystem updates for 6.9-rc1 2024-03-21 13:21:31 -07:00
infiniband RDMA v6.9 2024-03-18 15:34:03 -07:00
input TTY/Serial driver update for 6.9-rc1 2024-03-21 12:44:10 -07:00
interconnect interconnect changes for 6.9 2024-03-06 14:03:31 +00:00
iommu dma-mapping fixes for Linux 6.9 2024-03-24 10:45:31 -07:00
ipack ipack: make ipack_bus_type const 2024-03-07 20:32:47 +00:00
irqchip irqchip/renesas-rzg2l: Do not set TIEN and TINT source at the same time 2024-03-18 21:09:02 +01:00
isdn isdn: capi: make capi_class constant 2024-03-07 20:26:24 -08:00
leds - Kuan-Wei Chiu has developed the well-named series "lib min_heap: Min 2024-03-14 18:03:09 -07:00
macintosh powerpc updates for 6.9 2024-03-15 17:53:48 -07:00
mailbox imx: add support for i.MX95 ELE/V2X MU 2024-03-13 12:23:36 -07:00
mcb mcb: constify the struct device_type usage 2024-03-07 20:38:15 +00:00
md - Fix a memory leak in DM integrity recheck code that was added during 2024-03-22 12:34:26 -07:00
media Linux 6.8 2024-03-18 17:30:46 +00:00
memory Char/Misc and other driver subsystem updates for 6.9-rc1 2024-03-21 13:21:31 -07:00
memstick MMC core: 2024-03-13 10:59:28 -07:00
message scsi: message: fusion: Remove redundant pointer 'hd' 2024-01-23 21:39:21 -05:00
mfd TTY/Serial driver update for 6.9-rc1 2024-03-21 12:44:10 -07:00
misc hardening fixes for v6.9-rc1 2024-03-23 08:43:21 -07:00
mmc Linux 6.8 2024-03-18 17:30:46 +00:00
most most: core: make mostbus const 2024-03-07 20:32:38 +00:00
mtd This pull request contains updates for UBI and UBIFS: 2024-03-21 15:09:29 -07:00
mux mux: mmio: use reg property when parent device is not a syscon 2024-01-04 17:01:14 +01:00
net hardening fixes for v6.9-rc1 2024-03-23 08:43:21 -07:00
nfc treewide, serdev: change receive_buf() return type to size_t 2024-01-27 18:13:53 -08:00
ntb NTB: fix possible name leak in ntb_register_device() 2024-02-16 16:13:38 +05:30
nubus nubus: Make nubus_bus_type static and constant 2024-01-03 13:33:59 +01:00
nvdimm libnvdimm updates for v6.9 2024-03-15 11:58:32 -07:00
nvme nvme updates for Linux 6.9 2024-03-21 13:23:07 -06:00
nvmem nvmem: core: Print error on wrong bits DT property 2024-03-07 20:21:53 +00:00
of Driver core changes for 6.9-rc1 2024-03-21 13:34:15 -07:00
opp OPP: Extend dev_pm_opp_data with turbo support 2024-03-11 10:39:24 +05:30
parisc parisc: led: Convert to platform remove callback returning void 2024-03-08 10:00:07 +01:00
parport parport: sunbpp: Convert to platform remove callback returning void 2024-03-07 21:50:06 +00:00
pci pci-v6.9-changes 2024-03-14 10:58:27 -07:00
pcmcia pcmcia: cs: make pcmcia_socket_class constant 2024-03-10 09:07:00 +01:00
peci Update peci-next for v6.6-rc1 2023-08-08 10:53:30 +02:00
perf RISC-V Patches for the 6.9 Merge Window 2024-03-22 10:41:13 -07:00
phy USB/Thunderbolt changes for 6.9-rc1 2024-03-21 12:35:20 -07:00
pinctrl phy-for-6.9 2024-03-16 11:24:51 -07:00
platform Char/Misc and other driver subsystem updates for 6.9-rc1 2024-03-21 13:21:31 -07:00
pmdomain Core: 2024-03-13 11:33:10 -07:00
pnp More ACPI updates for 6.8-rc1 2024-01-17 14:37:40 -08:00
power power supply and reset changes for the 6.9 series 2024-03-14 10:19:48 -07:00
powercap powercap: intel_rapl: Convert to platform remove callback returning void 2024-03-13 20:45:54 +01:00
pps pps: use cflags-y instead of EXTRA_CFLAGS 2024-03-07 21:51:39 +00:00
ps3 driver/ps3: Include <video/cmdline.h> for mode parsing 2023-02-20 14:56:51 +01:00
ptp Networking changes for 6.9. 2024-03-12 17:44:08 -07:00
pwm pwm: imx-tpm: fix probe crash due to access registers without clock 2024-03-04 11:45:22 +01:00
rapidio rapidio/tsi721: fix kernel-doc warnings 2023-12-20 15:02:57 -08:00
ras - Add a FRU (Field Replaceable Unit) memory poison manager which 2024-03-11 18:14:06 -07:00
regulator regulator: Fix for v6.9 2024-03-22 09:52:37 -07:00
remoteproc remoteproc updates for v6.9 2024-03-21 10:37:39 -07:00
reset reset: Instantiate reset GPIO controller for shared reset-gpios 2024-02-21 11:53:25 +01:00
rpmsg rpmsg: core: Make rpmsg_bus const 2024-02-05 13:43:22 -07:00
rtc RTC for 6.9 2024-03-21 17:16:46 -07:00
s390 more s390 updates for 6.9 merge window 2024-03-19 11:38:27 -07:00
sbus This includes the following changes related to sparc for v6.9: 2024-03-15 12:47:21 -07:00
scsi SCSI misc on 20240322 2024-03-22 13:31:07 -07:00
sh sh: intc: Make intc_subsys const 2024-02-15 18:12:01 +01:00
siox SIOX changes for 6.9-rc1 2024-03-21 15:18:18 -07:00
slimbus slimbus: core: make slimbus_bus const 2024-03-07 20:21:39 +00:00
soc Including fixes from CAN, netfilter, wireguard and IPsec. 2024-03-21 14:50:39 -07:00
soundwire soundwire updates for 6.9 2024-03-15 12:22:52 -07:00
spi spi: Fixes for v6.9 2024-03-22 09:57:00 -07:00
spmi spmi: mediatek: add device id check 2023-12-15 17:27:04 +01:00
ssb ssb: make ssb_bustype const 2024-02-06 20:07:12 +02:00
staging Staging driver cleanups for 6.9-rc1 2024-03-21 13:03:44 -07:00
target SCSI misc on 20240316 2024-03-16 16:31:12 -07:00
tc tc: make tc_bus_type const 2024-02-20 13:36:34 +01:00
tee ARM: SoC drivers for 6.9 2024-03-12 10:35:24 -07:00
thermal - Fix memory leak in the error path at probe time in the Mediatek LVTS 2024-03-13 20:35:48 +01:00
thunderbolt USB/Thunderbolt changes for 6.9-rc1 2024-03-21 12:35:20 -07:00
tty TTY/Serial driver update for 6.9-rc1 2024-03-21 12:44:10 -07:00
ufs SCSI misc on 20240316 2024-03-16 16:31:12 -07:00
uio uio_dmem_genirq: UIO_MEM_DMA_COHERENT conversion 2024-03-07 21:52:59 +00:00
usb USB/Thunderbolt changes for 6.9-rc1 2024-03-21 12:35:20 -07:00
vdpa vDPA: report virtio-blk flush info to user space 2024-03-19 02:45:51 -04:00
vfio VFIO updates for v6.9-rc1 2024-03-15 13:21:13 -07:00
vhost virtio: features, fixes 2024-03-19 08:57:39 -07:00
video fbdev fixes and cleanups for 6.9-rc1: 2024-03-22 10:09:08 -07:00
virt virt: efi_secret: Convert to platform remove callback returning void 2024-03-09 11:37:18 +01:00
virtio virtio: packed: fix unmap leak for indirect desc table 2024-03-19 03:19:22 -04:00
w1 w1: w1-gpio: Convert to platform remove callback returning void 2024-02-20 11:24:34 +01:00
watchdog linux-watchdog 6.9-rc1 tag 2024-03-17 12:06:10 -07:00
xen xen: branch for v6.9-rc1 2024-03-19 08:48:09 -07:00
zorro zorro: Make zorro_bus_type const 2024-02-19 11:10:55 +01:00
Kconfig - removed AR7 platform support 2023-11-10 09:19:46 -08:00
Makefile Revert "leds: Only descend into leds directory when CONFIG_NEW_LEDS is set" 2024-03-07 08:48:10 +00:00