linux/drivers
Jason A. Donenfeld 748bc4dd9e random: use expired timer rather than wq for mixing fast pool
Previously, the fast pool was dumped into the main pool periodically in
the fast pool's hard IRQ handler. This worked fine and there weren't
problems with it, until RT came around. Since RT converts spinlocks into
sleeping locks, problems cropped up. Rather than switching to raw
spinlocks, the RT developers preferred we make the transformation from
originally doing:

    do_some_stuff()
    spin_lock()
    do_some_other_stuff()
    spin_unlock()

to doing:

    do_some_stuff()
    queue_work_on(some_other_stuff_worker)

This is an ordinary pattern done all over the kernel. However, Sherry
noticed a 10% performance regression in qperf TCP over a 40gbps
InfiniBand card. Quoting her message:

> MT27500 Family [ConnectX-3] cards:
> Infiniband device 'mlx4_0' port 1 status:
> default gid: fe80:0000:0000:0000:0010:e000:0178:9eb1
> base lid: 0x6
> sm lid: 0x1
> state: 4: ACTIVE
> phys state: 5: LinkUp
> rate: 40 Gb/sec (4X QDR)
> link_layer: InfiniBand
>
> Cards are configured with IP addresses on private subnet for IPoIB
> performance testing.
> Regression identified in this bug is in TCP latency in this stack as reported
> by qperf tcp_lat metric:
>
> We have one system listen as a qperf server:
> [root@yourQperfServer ~]# qperf
>
> Have the other system connect to qperf server as a client (in this
> case, it’s X7 server with Mellanox card):
> [root@yourQperfClient ~]# numactl -m0 -N0 qperf 20.20.20.101 -v -uu -ub --time 60 --wait_server 20 -oo msg_size:4K:1024K:*2 tcp_lat

Rather than incur the scheduling latency from queue_work_on, we can
instead switch to running on the next timer tick, on the same core. This
also batches things a bit more -- once per jiffy -- which is okay now
that mix_interrupt_randomness() can credit multiple bits at once.

Reported-by: Sherry Yang <sherry.yang@oracle.com>
Tested-by: Paul Webb <paul.x.webb@oracle.com>
Cc: Sherry Yang <sherry.yang@oracle.com>
Cc: Phillip Goerl <phillip.goerl@oracle.com>
Cc: Jack Vogel <jack.vogel@oracle.com>
Cc: Nicky Veitch <nicky.veitch@oracle.com>
Cc: Colm Harrington <colm.harrington@oracle.com>
Cc: Ramanan Govindarajan <ramanan.govindarajan@oracle.com>
Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: Dominik Brodowski <linux@dominikbrodowski.net>
Cc: Tejun Heo <tj@kernel.org>
Cc: Sultan Alsawaf <sultan@kerneltoast.com>
Cc: stable@vger.kernel.org
Fixes: 58340f8e95 ("random: defer fast pool mixing to worker")
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2022-09-28 18:17:53 +02:00
..
accessibility TTY / Serial driver changes for 6.0-rc1 2022-08-08 11:31:40 -07:00
acpi Merge branch 'acpi-processor' into acpi 2022-08-27 14:43:18 +02:00
amba ARM: 9229/1: amba: Fix use-after-free in amba_read_periphid() 2022-08-30 11:12:52 +01:00
android Char/Misc driver fixes for 6.0-rc4 2022-09-02 10:50:08 -07:00
ata ata: libata-eh: Add missing command name 2022-08-16 05:42:51 +09:00
atm atm: idt77252: fix use-after-free bugs caused by tst_timer 2022-08-08 20:51:59 -07:00
auxdisplay
base Driver core fixes for 6.0-rc5 2022-09-09 15:08:40 -04:00
bcma
block xen: branch for v6.0-rc4 2022-09-03 13:23:11 -07:00
bluetooth SPDX changes for 6.0-rc1 2022-08-04 12:12:54 -07:00
bus bus: mhi: host: Fix up null pointer access in mhi_irq_handler 2022-08-29 22:33:46 +05:30
cdrom
char random: use expired timer rather than wq for mixing fast pool 2022-09-28 18:17:53 +02:00
clk Revert "clk: core: Honor CLK_OPS_PARENT_ENABLE for clk gate ops" 2022-08-31 12:06:46 -07:00
clocksource RISC-V: Add Sstc extension support 2022-08-11 14:41:52 -07:00
comedi pci-v5.20-changes 2022-08-04 19:30:35 -07:00
connector
counter counter: 104-quad-8: Implement and utilize register structures 2022-07-14 19:17:41 +02:00
cpufreq cpufreq: check only freq_table in __resolve_freq() 2022-08-23 20:00:52 +02:00
cpuidle More power management updates for 5.20-rc1 2022-08-08 14:29:00 -07:00
crypto This update includes the following changes: 2022-08-02 17:45:14 -07:00
cxl cxl/hdm: Fix skip allocations vs multiple pmem allocations 2022-08-05 16:11:38 -07:00
dax dax: introduce holder for dax_device 2022-07-17 17:14:30 -07:00
dca
devfreq More power management updates for 5.20-rc1 2022-08-08 14:29:00 -07:00
dio
dma dmaengine: zynqmp_dma: Typecast with enum to fix the coverity warning 2022-09-05 11:54:50 +05:30
dma-buf dma-buf/dma-resv: check if the new fence is really later 2022-08-25 13:10:30 +02:00
edac powerpc updates for 6.0 2022-08-06 16:38:17 -07:00
eisa
extcon extcon: Add EXTCON_DISP_CVBS and EXTCON_DISP_EDP 2022-07-15 11:37:41 +09:00
firewire firewire: net: Make use of get_unaligned_be48(), put_unaligned_be48() 2022-07-28 22:21:54 -07:00
firmware EFI fixes (take #2) 2022-09-22 10:27:38 -07:00
fpga
fsi
gnss
gpio gpiolib: cdev: Set lineevent_state::irq after IRQ register successfully 2022-09-21 09:32:11 +02:00
gpu drm fixes for v6.0-rc6 2022-09-16 06:45:19 -07:00
greybus
hid for-linus-2022083101 2022-08-31 09:54:14 -07:00
hsi
hte
hv Drivers: hv: Never allocate anything besides framebuffer from framebuffer memory region 2022-09-05 17:02:15 +00:00
hwmon hwmon: (asus-ec-sensors) autoload module via DMI data 2022-09-09 10:45:08 -07:00
hwspinlock hwspinlock: qcom: Add support for mmio usage to sfpb-mutex 2022-07-16 21:47:44 -05:00
hwtracing asm-generic: updates for 6.0 2022-08-05 10:07:23 -07:00
i2c i2c: imx: Make sure to unregister adapter on remove() 2022-08-21 10:27:33 +02:00
i3c
idle Power management updates for 5.20-rc1 2022-08-02 11:17:00 -07:00
iio iio: light: cm32181: make cm32181_pm_ops static 2022-08-21 18:24:16 +01:00
infiniband RDMA/irdma: Report RNR NAK generation in device caps 2022-09-07 11:22:18 +03:00
input Input updates for v6.0-rc3 2022-09-03 13:09:46 -07:00
interconnect Merge branch 'icc-rpm' into icc-next 2022-07-15 17:56:31 +03:00
iommu iommu/vt-d: Check correct capability for sagaw determination 2022-09-21 10:22:54 +02:00
ipack
irqchip irqchip fixes for 6.0, take #1 2022-08-18 17:37:22 +02:00
isdn
leds LED updates for 5.20: new driver for bcm63138, is31fl319x updates, 2022-08-08 11:36:21 -07:00
macintosh macintosh/adb: fix oob read in do_adb_query() function 2022-07-20 22:06:30 +10:00
mailbox - mtk: use rx_callback instead of cmdq_task_cb. 2022-08-08 10:19:40 -07:00
mcb drivers: mcb: directly use ida_alloc()/free() 2022-07-12 09:04:55 +02:00
md block-6.0-2022-08-26 2022-08-26 11:05:54 -07:00
media media: mceusb: Use new usb_control_msg_*() routines 2022-08-30 15:32:07 +02:00
memory More power management updates for 5.20-rc1 2022-08-08 14:29:00 -07:00
memstick MMC core: 2022-08-04 19:41:09 -07:00
message
mfd - Core Frameworks 2022-08-06 10:25:16 -07:00
misc misc: fastrpc: increase maximum session count 2022-09-01 16:13:07 +02:00
mmc MMC core: 2022-09-02 15:03:12 -07:00
most
mtd MTD core changes: 2022-08-05 14:13:45 -07:00
mux
net Including fixes from wifi, netfilter and can. 2022-09-22 10:58:13 -07:00
nfc nfc: pn533: Fix use-after-free bugs caused by pn532_cmd_timeout 2022-08-22 14:51:30 +01:00
ntb NTB: epf: Allow more flexibility in the memory BAR map method 2022-08-09 17:54:03 -04:00
nubus
nvdimm virtio: fatures, fixes 2022-08-12 09:50:34 -07:00
nvme block-6.0-2022-09-09 2022-09-09 15:03:08 -04:00
nvmem SPDX changes for 6.0-rc1 2022-08-04 12:12:54 -07:00
of of: fdt: fix off-by-one error in unflatten_dt_nodes() 2022-08-16 11:29:57 -06:00
opp OPP updates for 5.20-rc1 2022-08-03 17:49:38 +02:00
parisc parisc: remove obsolete manual allocation aligning in iosapic 2022-09-15 07:33:26 +02:00
parport
pci Fix of heap data and clang warnings, support for a new Intel NTB device, 2022-08-13 14:00:45 -07:00
pcmcia
peci peci: cpu: Fix use-after-free in adev_release() 2022-08-15 20:31:35 +02:00
perf RISC-V Fixes for 6.0-rc5 2022-09-09 14:06:10 -04:00
phy pci-v5.20-changes 2022-08-04 19:30:35 -07:00
pinctrl pinctrl: ocelot: Fix interrupt controller 2022-09-14 15:00:16 +02:00
platform platform-drivers-x86 for v6.0-2 2022-09-02 10:35:51 -07:00
pnp PCI: Remove pci_get_legacy_ide_irq() and asm-generic/pci.h 2022-07-22 17:23:45 -05:00
power power supply and reset changes for the v6.0 series 2022-08-12 09:37:33 -07:00
powercap Power management updates for 5.20-rc1 2022-08-02 11:17:00 -07:00
pps
ps3
ptp SPDX changes for 6.0-rc1 2022-08-04 12:12:54 -07:00
pwm SPDX changes for 6.0-rc1 2022-08-04 12:12:54 -07:00
rapidio
ras
regulator regulator: Fixes for v6.0 2022-09-08 12:56:20 -04:00
remoteproc virtio: Revert "virtio: find_vqs() add arg sizes" 2022-08-16 01:40:24 -04:00
reset ARM: SoC: late updates for 6.0 2022-08-05 10:02:33 -07:00
rpmsg rpmsg: convert sysfs snprintf to sysfs_emit 2022-07-16 23:08:47 -05:00
rtc rtc: spear: set range max 2022-08-09 00:56:41 +02:00
s390 s390 updates for 6.0-rc2 2022-08-20 11:29:01 -07:00
sbus
scsi scsi: mpt3sas: Fix use-after-free warning 2022-09-06 22:31:05 -04:00
sh
siox
slimbus
soc soc: fsl: select FSL_GUTS driver for DPIO 2022-09-02 11:28:40 +02:00
soundwire soundwire: qcom: fix device status array range 2022-09-01 14:26:44 +05:30
spi spi: Fixes for v6.0 2022-09-08 13:13:47 -04:00
spmi
ssb
staging staging: rtl8712: fix use after free bugs 2022-08-30 17:15:16 +02:00
target SCSI misc on 20220813 2022-08-13 13:41:48 -07:00
tc
tee tee: fix compiler warning in tee_shm_register() 2022-08-25 11:40:06 +02:00
thermal Merge branch 'thermal-core' 2022-08-27 15:07:58 +02:00
thunderbolt linux-kselftest-kunit-fixes-6.0-rc5 2022-09-09 14:13:36 -04:00
tty tty: n_gsm: avoid call of sleeping functions from atomic context 2022-08-30 14:40:17 +02:00
ufs scsi: ufs: core: Reduce the power mode change timeout 2022-08-19 21:34:36 -04:00
uio
usb Revert "usb: gadget: udc-xilinx: replace memcpy with memcpy_toio" 2022-09-02 09:10:08 +02:00
vdpa vdpa/mlx5: Fix possible uninitialized return value 2022-08-11 10:00:36 -04:00
vfio VFIO fix for v6.0-rc5 2022-09-09 07:44:33 -04:00
vhost virtio: fatures, fixes 2022-08-12 09:50:34 -07:00
video hyperv-fixes for v6.0-rc6 2022-09-12 18:33:55 -04:00
virt kunit: fix Kconfig for build-in tests USB4 and Nitro Enclaves 2022-09-01 13:00:48 -06:00
virtio virtio: kerneldocs fixes and enhancements 2022-08-16 01:40:24 -04:00
vlynq
w1
watchdog linux-watchdog 5.20-rc1 tag 2022-08-08 15:04:04 -07:00
xen xen: branch for v6.0-rc4 2022-09-03 13:23:11 -07:00
zorro
Kconfig
Makefile Staging driver patches for 6.0-rc1 2022-08-04 12:01:42 -07:00