Compare commits
64 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| baaff00068 | |||
| 78c7cd1268 | |||
| cddb60ba98 | |||
| 190eaba617 | |||
| 5b3d3093ca | |||
| fc1f1bcf33 | |||
| 0cc6238b6a | |||
| 95f0dbdf95 | |||
| 6d55ef4204 | |||
| 35ae23b799 | |||
| d560c5ab1f | |||
| 3941d44fc1 | |||
| 8035e345a3 | |||
| bcc5f56bff | |||
| 5a9bd9e526 | |||
| 194f0e8cd1 | |||
| 5c65ad73e4 | |||
| 555e0089c9 | |||
| 85685cd8cc | |||
| dd3e28d69a | |||
| ccc9ec8625 | |||
| fc515da43f | |||
| ac522e5498 | |||
| 7a06daf86e | |||
| 924f2ef793 | |||
| a853ae6e5c | |||
| c9327c4346 | |||
| 72807eeeb0 | |||
| 7c0c6c37b2 | |||
| 51f08b8f16 | |||
| 996ac366f8 | |||
| 37f415cc04 | |||
| 6607727e2f | |||
| 6c95b2e31c | |||
| 899fd8d0aa | |||
| 3ea6393f63 | |||
| dbe708a919 | |||
| fda70d3865 | |||
| 92e753f360 | |||
| 25aba572ca | |||
| 43414bd219 | |||
| 38c898a1b6 | |||
| db84324aab | |||
| 1f9eca1c7a | |||
| 4e5a919c13 | |||
| 46951972bc | |||
| 23caf6a578 | |||
| 7956d7d5b2 | |||
| 7d04290406 | |||
| 4fce12053e | |||
| 7ceb3b1224 | |||
| 68145b3f84 | |||
| fb9edd57ac | |||
| 68481eb746 | |||
| 5d60271071 | |||
| 5e8e351552 | |||
| aaf2b2c31b | |||
| c8bbfe0d9f | |||
| 58d428de99 | |||
| 9ac8d8ec39 | |||
| 3edc172ef3 | |||
| df6168ebe5 | |||
| 2445fd0873 | |||
| 4f243ed063 |
+3
-3
@@ -1,6 +1,6 @@
|
||||
[submodule "submodules/zfsonlinux"]
|
||||
path = submodules/zfsonlinux
|
||||
url = ../zfsonlinux
|
||||
[submodule "submodules/ubuntu-hirsute"]
|
||||
path = submodules/ubuntu-hirsute
|
||||
url = ../mirror_ubuntu-hirsute-kernel
|
||||
[submodule "submodules/ubuntu-impish"]
|
||||
path = submodules/ubuntu-impish
|
||||
url = ../mirror_ubuntu-impish-kernel
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
# also bump pve-kernel-meta if either of MAJ.MIN, PATCHLEVEL or KREL change
|
||||
KERNEL_MAJ=5
|
||||
KERNEL_MIN=11
|
||||
KERNEL_PATCHLEVEL=22
|
||||
KERNEL_MIN=13
|
||||
KERNEL_PATCHLEVEL=19
|
||||
# increment KREL if the ABI changes (abicheck target in debian/rules)
|
||||
# rebuild packages with new KREL and run 'make abiupdate'
|
||||
KREL=4
|
||||
KREL=6
|
||||
|
||||
PKGREL=9
|
||||
PKGREL=14
|
||||
|
||||
KERNEL_MAJMIN=$(KERNEL_MAJ).$(KERNEL_MIN)
|
||||
KERNEL_VER=$(KERNEL_MAJMIN).$(KERNEL_PATCHLEVEL)
|
||||
@@ -31,7 +31,7 @@ SKIPABI=0
|
||||
|
||||
BUILD_DIR=build
|
||||
|
||||
KERNEL_SRC=ubuntu-hirsute
|
||||
KERNEL_SRC=ubuntu-impish
|
||||
KERNEL_SRC_SUBMODULE=submodules/$(KERNEL_SRC)
|
||||
KERNEL_CFG_ORG=config-${KERNEL_VER}.org
|
||||
|
||||
|
||||
@@ -3,11 +3,15 @@ KERNEL SOURCE:
|
||||
|
||||
We currently use the Ubuntu kernel sources, available from:
|
||||
|
||||
http://kernel.ubuntu.com/git/ubuntu/ubuntu-hirsute.git/
|
||||
http://kernel.ubuntu.com/git/ubuntu/ubuntu-impish.git/
|
||||
|
||||
Ubuntu will maintain those kernels till:
|
||||
|
||||
https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable
|
||||
or
|
||||
https://pve.proxmox.com/pve-docs/chapter-pve-faq.html#faq-support-table
|
||||
|
||||
whatever happens to be earlier.
|
||||
|
||||
|
||||
Additional/Updated Modules:
|
||||
@@ -31,7 +35,7 @@ get applied with the `patch` tool. From a git point-of-view, the copied
|
||||
directory remains clean even with extra patches applied since it does not
|
||||
contain a .git directory, but a reference to the (still pristine) submodule:
|
||||
|
||||
$ cat build/ubuntu-hirsute/.git
|
||||
$ cat build/ubuntu-impish/.git
|
||||
|
||||
If you mistakenly cloned the upstream repo as "normal" clone (not via the
|
||||
submodule mechanics) this means that you have a real .git directory with its
|
||||
@@ -60,7 +64,7 @@ pve-kernel-meta
|
||||
---------------
|
||||
|
||||
depends on latest kernel and header package within a certain kernel series,
|
||||
e.g., pve-kernel-4.15 / pve-headers-4.15
|
||||
e.g., pve-kernel-5.11 / pve-headers-5.11
|
||||
|
||||
git clone git://git.proxmox.com/git/pve-kernel-meta.git
|
||||
|
||||
@@ -138,45 +142,34 @@ NOTE: For the exact and current list see debian/rules (PVE_CONFIG_OPTS)
|
||||
CONFIG_BLK_DEV_RBD=m
|
||||
|
||||
- enable IBM JFS file system as module
|
||||
|
||||
enable it as requested by users (bug #64)
|
||||
requested by users (bug #64)
|
||||
|
||||
- enable apple HFS and HFSPLUS as module
|
||||
|
||||
enable it as requested by users
|
||||
requested by users
|
||||
|
||||
- enable CONFIG_BCACHE=m (requested by user)
|
||||
|
||||
- enable CONFIG_BRIDGE=y
|
||||
|
||||
Else we get warnings on boot, that
|
||||
net.bridge.bridge-nf-call-iptables is an unknown key
|
||||
to avoid warnings on boot, e.g. that net.bridge.bridge-nf-call-iptables is an unknown key
|
||||
|
||||
- enable CONFIG_DEFAULT_SECURITY_APPARMOR
|
||||
|
||||
We need this for lxc
|
||||
|
||||
- set CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
|
||||
|
||||
because if not set, it can give some dynamic memory or cpu frequencies
|
||||
change, and vms can crash (mainly windows guest).
|
||||
|
||||
see http://forum.proxmox.com/threads/18238-Windows-7-x64-VMs-crashing-randomly-during-process-termination?p=93273#post93273
|
||||
|
||||
- use 'deadline' as default scheduler
|
||||
|
||||
This is the suggested setting for KVM. We also measure bad fsync
|
||||
performance with ext4 and cfq.
|
||||
This is the suggested setting for KVM. We also measure bad fsync performance with ext4 and cfq.
|
||||
|
||||
- disable CONFIG_INPUT_EVBUG
|
||||
|
||||
Module evbug is not blacklisted on debian, so we simply disable it
|
||||
to avoid key-event logs (which is a big security problem)
|
||||
Module evbug is not blacklisted on debian, so we simply disable it to avoid
|
||||
key-event logs (which is a big security problem)
|
||||
|
||||
- enable CONFIG_MODVERSIONS (needed for ABI tracking)
|
||||
|
||||
- switch default UNWINDER to FRAME_POINTER
|
||||
|
||||
the recently introduced ORC_UNWINDER is not 100% stable yet, especially in combination with ZFS
|
||||
|
||||
- enable CONFIG_PAGE_TABLE_ISOLATION (Meltdown mitigation)
|
||||
|
||||
-25441
File diff suppressed because it is too large
Load Diff
+25907
File diff suppressed because it is too large
Load Diff
Vendored
+112
@@ -1,3 +1,115 @@
|
||||
pve-kernel (5.13.19-14) bullseye; urgency=medium
|
||||
|
||||
* update to Ubuntu-5.13.0-36.41
|
||||
|
||||
* bump ABI to 5.13.19-6
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Thu, 10 Mar 2022 16:24:52 +0100
|
||||
|
||||
pve-kernel (5.13.19-13) bullseye; urgency=medium
|
||||
|
||||
* backport "KVM: VMX: prepare sync_pir_to_irr for running with APICv
|
||||
disabled" to avoid breaking some Windows VMs startup
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Tue, 08 Mar 2022 07:32:25 +0100
|
||||
|
||||
pve-kernel (5.13.19-12) bullseye; urgency=medium
|
||||
|
||||
* Revert "PCI/MSI: Mask MSI-X vectors only on success" as it's causing PCI-E
|
||||
initialization failures on some systems.
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Mon, 07 Mar 2022 15:54:28 +0100
|
||||
|
||||
pve-kernel (5.13.19-11) bullseye; urgency=medium
|
||||
|
||||
* backport "lib/iov_iter: initialize "flags" in new pipe_buffer" fixing
|
||||
CVE-2022-0847 "dirty pipe"
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Mon, 07 Mar 2022 13:28:22 +0100
|
||||
|
||||
pve-kernel (5.13.19-10) bullseye; urgency=medium
|
||||
|
||||
* update to Ubuntu-5.13.0-31.34
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Mon, 21 Feb 2022 09:26:12 +0100
|
||||
|
||||
pve-kernel (5.13.19-9) bullseye; urgency=medium
|
||||
|
||||
* update to Ubuntu-5.13.0-30.33
|
||||
revert a problematic patch causing issues with releasing block devices
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Mon, 07 Feb 2022 11:01:14 +0100
|
||||
|
||||
pve-kernel (5.13.19-8) bullseye; urgency=medium
|
||||
|
||||
* update sources to Ubuntu-5.13.0-29.32
|
||||
|
||||
* bump ABI to 5.13.19-4
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Mon, 31 Jan 2022 10:09:37 +0100
|
||||
|
||||
pve-kernel (5.13.19-7) bullseye; urgency=medium
|
||||
|
||||
* backport "vfs: fs_context: fix up param length parsing in
|
||||
legacy_parse_param"
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Thu, 20 Jan 2022 16:37:56 +0100
|
||||
|
||||
pve-kernel (5.13.19-6) bullseye; urgency=medium
|
||||
|
||||
* update sources to Ubuntu-5.13.0-24.24
|
||||
|
||||
* bump ABI to 5.13.19-3
|
||||
|
||||
* update ZFS to 2.1.2
|
||||
|
||||
* ZFS: cherry-pick lock-inversion patch for zvol_open
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Tue, 11 Jan 2022 16:44:47 +0100
|
||||
|
||||
pve-kernel (5.13.19-4) bullseye; urgency=medium
|
||||
|
||||
* update sources to Ubuntu-5.13.0-23.23
|
||||
|
||||
* bump ABI to 5.13.19-2
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Mon, 29 Nov 2021 12:10:09 +0100
|
||||
|
||||
pve-kernel (5.13.19-3) bullseye; urgency=medium
|
||||
|
||||
* backport two io-wq fixes relevant for io_uring
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Tue, 23 Nov 2021 13:31:19 +0100
|
||||
|
||||
pve-kernel (5.13.19-2) bullseye; urgency=medium
|
||||
|
||||
* re-enable retrying to get a blockdev on ERESTARTSYS to work around
|
||||
ZFS still depending on that
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Tue, 09 Nov 2021 12:59:38 +0100
|
||||
|
||||
pve-kernel (5.13.19-1) bullseye; urgency=medium
|
||||
|
||||
* update sources to Ubuntu-5.13.0-22.22
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Sat, 06 Nov 2021 13:08:30 +0100
|
||||
|
||||
pve-kernel (5.13.18-1) bullseye; urgency=medium
|
||||
|
||||
* update sources to Ubuntu-5.13.0-21.21
|
||||
|
||||
* bump ABI to 5.13.18-1
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Tue, 19 Oct 2021 13:42:26 +0200
|
||||
|
||||
pve-kernel (5.13.14-1) bullseye; urgency=medium
|
||||
|
||||
* update kernel-base to Ubuntu 21.10 Impish kernel
|
||||
|
||||
* update ZFS to 2.1.1
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Tue, 28 Sep 2021 06:16:44 +0200
|
||||
|
||||
pve-kernel (5.11.22-9) bullseye; urgency=medium
|
||||
|
||||
* backport "blk-mq: fix kernel panic during iterating over flush
|
||||
|
||||
Vendored
+4
-3
@@ -32,7 +32,8 @@ Build-Depends: asciidoc-base,
|
||||
sphinx-common,
|
||||
tar,
|
||||
xmlto,
|
||||
zlib1g-dev
|
||||
zlib1g-dev,
|
||||
zstd,
|
||||
Build-Conflicts: pve-headers-@KVNAME@
|
||||
Vcs-Git: git://git.proxmox.com/git/pve-kernel
|
||||
Vcs-Browser: https://git.proxmox.com/?p=pve-kernel.git
|
||||
@@ -50,7 +51,7 @@ Package: pve-headers-@KVNAME@
|
||||
Section: devel
|
||||
Priority: optional
|
||||
Architecture: any
|
||||
Provides: linux-headers
|
||||
Provides: linux-headers-@KVNAME@-amd64
|
||||
Depends: coreutils | fileutils (>= 4.0)
|
||||
Description: The Proxmox PVE Kernel Headers
|
||||
This package contains the linux kernel headers
|
||||
@@ -59,7 +60,7 @@ Package: pve-kernel-@KVNAME@
|
||||
Section: admin
|
||||
Priority: optional
|
||||
Architecture: any
|
||||
Provides: linux-image
|
||||
Provides: linux-image-@KVNAME@-amd64
|
||||
Suggests: pve-firmware
|
||||
Depends: busybox, initramfs-tools
|
||||
Recommends: grub-pc | grub-efi-amd64 | grub-efi-ia32 | grub-efi-arm64
|
||||
|
||||
+58
-43
@@ -17,9 +17,16 @@ aic94xx-seq.fw kernel/drivers/scsi/aic94xx/aic94xx.ko
|
||||
amd/amd_sev_fam17h_model0xh.sbin kernel/drivers/crypto/ccp/ccp.ko
|
||||
amd/amd_sev_fam17h_model3xh.sbin kernel/drivers/crypto/ccp/ccp.ko
|
||||
amd/amd_sev_fam19h_model0xh.sbin kernel/drivers/crypto/ccp/ccp.ko
|
||||
amdgpu/aldebaran_mec2.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/aldebaran_mec.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/aldebaran_rlc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/aldebaran_sdma.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/aldebaran_smc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/aldebaran_sos.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/aldebaran_ta.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/aldebaran_vcn.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/arcturus_asd.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/arcturus_gpu_info.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/arcturus_mec2.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/arcturus_mec.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/arcturus_rlc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/arcturus_sdma.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
@@ -311,7 +318,6 @@ amdgpu/renoir_ce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/renoir_dmcub.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/renoir_gpu_info.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/renoir_me.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/renoir_mec2.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/renoir_mec.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/renoir_pfp.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/renoir_rlc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
@@ -567,8 +573,6 @@ bnx2x/bnx2x-e1h-7.13.15.0.fw kernel/drivers/net/ethernet/broadcom/bnx2x/bnx2x.ko
|
||||
bnx2x/bnx2x-e2-7.13.15.0.fw kernel/drivers/net/ethernet/broadcom/bnx2x/bnx2x.ko
|
||||
brcm/bcm43xx-0.fw kernel/drivers/net/wireless/broadcom/brcm80211/brcmsmac/brcmsmac.ko
|
||||
brcm/bcm43xx_hdr-0.fw kernel/drivers/net/wireless/broadcom/brcm80211/brcmsmac/brcmsmac.ko
|
||||
brcm/brcm/brcmfmac*-pcie.*.txt kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcm/brcmfmac*-sdio.*.txt kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac43012-sdio.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac43143.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac43143-sdio.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
@@ -607,6 +611,8 @@ brcm/brcmfmac4366c-pcie.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmf
|
||||
brcm/brcmfmac4371-pcie.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac4373.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac4373-sdio.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac*-pcie.*.txt kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac*-sdio.*.txt kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
BT3CPCC.bin kernel/drivers/bluetooth/bt3c_cs.ko
|
||||
c218tunx.cod kernel/drivers/tty/moxa.ko
|
||||
c320tunx.cod kernel/drivers/tty/moxa.ko
|
||||
@@ -634,7 +640,7 @@ cis/tamarack.cis kernel/drivers/net/ethernet/8390/pcnet_cs.ko
|
||||
cmmb_ming_app.inp kernel/drivers/media/common/siano/smsmdtv.ko
|
||||
cmmb_vega_12mhz.inp kernel/drivers/media/common/siano/smsmdtv.ko
|
||||
cmmb_venice_12mhz.inp kernel/drivers/media/common/siano/smsmdtv.ko
|
||||
comedi/jr3pci.idm kernel/drivers/staging/comedi/drivers/jr3_pci.ko
|
||||
comedi/jr3pci.idm kernel/drivers/comedi/drivers/jr3_pci.ko
|
||||
cp204unx.cod kernel/drivers/tty/moxa.ko
|
||||
cpia2/stv0672_vp4.bin kernel/drivers/media/usb/cpia2/cpia2.ko
|
||||
cs46xx/cwc4630 kernel/sound/pci/cs46xx/snd-cs46xx.ko
|
||||
@@ -660,8 +666,7 @@ cxgb4/t5fw.bin kernel/drivers/net/ethernet/chelsio/cxgb4/cxgb4.ko
|
||||
cxgb4/t5fw.bin kernel/drivers/scsi/csiostor/csiostor.ko
|
||||
cxgb4/t6fw.bin kernel/drivers/net/ethernet/chelsio/cxgb4/cxgb4.ko
|
||||
cxgb4/t6fw.bin kernel/drivers/scsi/csiostor/csiostor.ko
|
||||
cyzfirm.bin kernel/drivers/tty/cyclades.ko
|
||||
daqboard2000_firmware.bin kernel/drivers/staging/comedi/drivers/daqboard2000.ko
|
||||
daqboard2000_firmware.bin kernel/drivers/comedi/drivers/daqboard2000.ko
|
||||
digiface_firmware.bin kernel/sound/pci/rme9652/snd-hdsp.ko
|
||||
digiface_firmware_rev11.bin kernel/sound/pci/rme9652/snd-hdsp.ko
|
||||
dvb-cx18-mpc718-mt352.fw kernel/drivers/media/pci/cx18/cx18.ko
|
||||
@@ -670,6 +675,7 @@ dvb-demod-m88ds3103.fw kernel/drivers/media/dvb-frontends/m88ds3103.ko
|
||||
dvb-demod-m88rs6000.fw kernel/drivers/media/dvb-frontends/m88ds3103.ko
|
||||
dvb-demod-mn88472-02.fw kernel/drivers/media/dvb-frontends/mn88472.ko
|
||||
dvb-demod-mn88473-01.fw kernel/drivers/media/dvb-frontends/mn88473.ko
|
||||
dvb-demod-mxl692.fw kernel/drivers/media/dvb-frontends/mxl692.ko
|
||||
dvb-demod-si2165.fw kernel/drivers/media/dvb-frontends/si2165.ko
|
||||
dvb-demod-si2168-a20-01.fw kernel/drivers/media/dvb-frontends/si2168.ko
|
||||
dvb-demod-si2168-a30-01.fw kernel/drivers/media/dvb-frontends/si2168.ko
|
||||
@@ -796,8 +802,7 @@ hfi1_dc8051.fw kernel/drivers/infiniband/hw/hfi1/hfi1.ko
|
||||
hfi1_fabric.fw kernel/drivers/infiniband/hw/hfi1/hfi1.ko
|
||||
hfi1_pcie.fw kernel/drivers/infiniband/hw/hfi1/hfi1.ko
|
||||
hfi1_sbus.fw kernel/drivers/infiniband/hw/hfi1/hfi1.ko
|
||||
i2400m-fw-usb-1.5.sbcf kernel/drivers/staging/wimax/i2400m/i2400m-usb.ko
|
||||
i6050-fw-usb-1.5.sbcf kernel/drivers/staging/wimax/i2400m/i2400m-usb.ko
|
||||
i915/adls_dmc_ver2_01.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/bxt_dmc_ver1_07.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/bxt_guc_49.0.1.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/bxt_huc_2.0.0.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
@@ -841,11 +846,6 @@ isdbt_nova_12mhz.inp kernel/drivers/media/common/siano/smsmdtv.ko
|
||||
isdbt_pele.inp kernel/drivers/media/common/siano/smsmdtv.ko
|
||||
isdbt_rio.inp kernel/drivers/media/common/siano/smsmdtv.ko
|
||||
isdn/ISAR.BIN kernel/drivers/isdn/hardware/mISDN/speedfax.ko
|
||||
isi4608.bin kernel/drivers/tty/isicom.ko
|
||||
isi4616.bin kernel/drivers/tty/isicom.ko
|
||||
isi608.bin kernel/drivers/tty/isicom.ko
|
||||
isi608em.bin kernel/drivers/tty/isicom.ko
|
||||
isi616em.bin kernel/drivers/tty/isicom.ko
|
||||
isight.fw kernel/drivers/usb/misc/isight_firmware.ko
|
||||
isl3886pci kernel/drivers/net/wireless/intersil/p54/p54pci.ko
|
||||
isl3886usb kernel/drivers/net/wireless/intersil/p54/p54usb.ko
|
||||
@@ -873,24 +873,31 @@ iwlwifi-8000C-36.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-8265-36.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-9000-pu-b0-jf-b0-46.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-9260-th-b0-jf-b0-46.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-cc-a0-59.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-ma-a0-gf-a0-59.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-ma-a0-mr-a0-59.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-Qu-b0-hr-b0-59.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-Qu-b0-jf-b0-59.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-Qu-c0-hr-b0-59.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-QuQnj-b0-hr-b0-59.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-QuQnj-b0-jf-b0-59.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-QuZ-a0-hr-b0-59.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-QuZ-a0-jf-b0-59.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-so-a0-gf-a0-59.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-so-a0-hr-b0-59.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-so-a0-jf-b0-59.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-SoSnj-a0-gf4-a0-59.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-SoSnj-a0-gf-a0-59.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-SoSnj-a0-hr-b0-59.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-SoSnj-a0-mr-a0-59.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-ty-a0-gf-a0-59.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-bz-a0-gf4-a0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-bz-a0-gf-a0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-bz-a0-hr-b0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-bz-a0-mr-a0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-cc-a0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-ma-a0-gf4-a0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-ma-a0-gf-a0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-ma-a0-hr-b0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-ma-a0-mr-a0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-Qu-b0-hr-b0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-Qu-b0-jf-b0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-Qu-c0-hr-b0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-QuQnj-b0-hr-b0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-QuQnj-b0-jf-b0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-QuZ-a0-hr-b0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-QuZ-a0-jf-b0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-so-a0-gf-a0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-so-a0-hr-b0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-so-a0-jf-b0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-SoSnj-a0-gf4-a0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-SoSnj-a0-gf-a0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-SoSnj-a0-hr-b0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-SoSnj-a0-jf-b0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-SoSnj-a0-mr-a0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-ty-a0-gf-a0-63.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
kaweth/new_code.bin kernel/drivers/net/usb/kaweth.ko
|
||||
kaweth/new_code_fix.bin kernel/drivers/net/usb/kaweth.ko
|
||||
kaweth/trigger_code.bin kernel/drivers/net/usb/kaweth.ko
|
||||
@@ -952,8 +959,8 @@ liquidio/lio_210nv_nic.bin kernel/drivers/net/ethernet/cavium/liquidio/liquidio.
|
||||
liquidio/lio_210sv_nic.bin kernel/drivers/net/ethernet/cavium/liquidio/liquidio.ko
|
||||
liquidio/lio_23xx_nic.bin kernel/drivers/net/ethernet/cavium/liquidio/liquidio.ko
|
||||
liquidio/lio_410nv_nic.bin kernel/drivers/net/ethernet/cavium/liquidio/liquidio.ko
|
||||
me2600_firmware.bin kernel/drivers/staging/comedi/drivers/me_daq.ko
|
||||
me4000_firmware.bin kernel/drivers/staging/comedi/drivers/me4000.ko
|
||||
me2600_firmware.bin kernel/drivers/comedi/drivers/me_daq.ko
|
||||
me4000_firmware.bin kernel/drivers/comedi/drivers/me4000.ko
|
||||
mediatek/mt7610e.bin kernel/drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0e.ko
|
||||
mediatek/mt7610e.bin kernel/drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0u.ko
|
||||
mediatek/mt7610u.bin kernel/drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0u.ko
|
||||
@@ -983,9 +990,13 @@ mediatek/mt7668pr2h.bin kernel/drivers/bluetooth/btusb.ko
|
||||
mediatek/mt7915_rom_patch.bin kernel/drivers/net/wireless/mediatek/mt76/mt7915/mt7915e.ko
|
||||
mediatek/mt7915_wa.bin kernel/drivers/net/wireless/mediatek/mt76/mt7915/mt7915e.ko
|
||||
mediatek/mt7915_wm.bin kernel/drivers/net/wireless/mediatek/mt76/mt7915/mt7915e.ko
|
||||
mellanox/mlxsw_spectrum-13.2008.2018.mfa2 kernel/drivers/net/ethernet/mellanox/mlxsw/mlxsw_spectrum.ko
|
||||
mellanox/mlxsw_spectrum2-29.2008.2018.mfa2 kernel/drivers/net/ethernet/mellanox/mlxsw/mlxsw_spectrum.ko
|
||||
mellanox/mlxsw_spectrum3-30.2008.2018.mfa2 kernel/drivers/net/ethernet/mellanox/mlxsw/mlxsw_spectrum.ko
|
||||
mediatek/WIFI_MT7922_patch_mcu_1_1_hdr.bin kernel/drivers/net/wireless/mediatek/mt76/mt7921/mt7921e.ko
|
||||
mediatek/WIFI_MT7961_patch_mcu_1_2_hdr.bin kernel/drivers/net/wireless/mediatek/mt76/mt7921/mt7921e.ko
|
||||
mediatek/WIFI_RAM_CODE_MT7922_1.bin kernel/drivers/net/wireless/mediatek/mt76/mt7921/mt7921e.ko
|
||||
mediatek/WIFI_RAM_CODE_MT7961_1.bin kernel/drivers/net/wireless/mediatek/mt76/mt7921/mt7921e.ko
|
||||
mellanox/mlxsw_spectrum-13.2008.2406.mfa2 kernel/drivers/net/ethernet/mellanox/mlxsw/mlxsw_spectrum.ko
|
||||
mellanox/mlxsw_spectrum2-29.2008.2406.mfa2 kernel/drivers/net/ethernet/mellanox/mlxsw/mlxsw_spectrum.ko
|
||||
mellanox/mlxsw_spectrum3-30.2008.2406.mfa2 kernel/drivers/net/ethernet/mellanox/mlxsw/mlxsw_spectrum.ko
|
||||
mixart/miXart8AES.xlx kernel/sound/pci/mixart/snd-mixart.ko
|
||||
mixart/miXart8.elf kernel/sound/pci/mixart/snd-mixart.ko
|
||||
mixart/miXart8.xlx kernel/sound/pci/mixart/snd-mixart.ko
|
||||
@@ -1053,9 +1064,9 @@ netronome/nic_AMDA0097-0001_8x10.nffw kernel/drivers/net/ethernet/netronome/nfp/
|
||||
netronome/nic_AMDA0099-0001_1x10_1x25.nffw kernel/drivers/net/ethernet/netronome/nfp/nfp.ko
|
||||
netronome/nic_AMDA0099-0001_2x10.nffw kernel/drivers/net/ethernet/netronome/nfp/nfp.ko
|
||||
netronome/nic_AMDA0099-0001_2x25.nffw kernel/drivers/net/ethernet/netronome/nfp/nfp.ko
|
||||
ni6534a.bin kernel/drivers/staging/comedi/drivers/ni_pcidio.ko
|
||||
niscrb01.bin kernel/drivers/staging/comedi/drivers/ni_pcidio.ko
|
||||
niscrb02.bin kernel/drivers/staging/comedi/drivers/ni_pcidio.ko
|
||||
ni6534a.bin kernel/drivers/comedi/drivers/ni_pcidio.ko
|
||||
niscrb01.bin kernel/drivers/comedi/drivers/ni_pcidio.ko
|
||||
niscrb02.bin kernel/drivers/comedi/drivers/ni_pcidio.ko
|
||||
nvidia/gm200/acr/bl.bin kernel/drivers/gpu/drm/nouveau/nouveau.ko
|
||||
nvidia/gm200/acr/ucode_load.bin kernel/drivers/gpu/drm/nouveau/nouveau.ko
|
||||
nvidia/gm200/acr/ucode_unload.bin kernel/drivers/gpu/drm/nouveau/nouveau.ko
|
||||
@@ -1673,6 +1684,9 @@ rtl_nic/rtl8153a-2.fw kernel/drivers/net/usb/r8152.ko
|
||||
rtl_nic/rtl8153a-3.fw kernel/drivers/net/usb/r8152.ko
|
||||
rtl_nic/rtl8153a-4.fw kernel/drivers/net/usb/r8152.ko
|
||||
rtl_nic/rtl8153b-2.fw kernel/drivers/net/usb/r8152.ko
|
||||
rtl_nic/rtl8153c-1.fw kernel/drivers/net/usb/r8152.ko
|
||||
rtl_nic/rtl8156a-2.fw kernel/drivers/net/usb/r8152.ko
|
||||
rtl_nic/rtl8156b-2.fw kernel/drivers/net/usb/r8152.ko
|
||||
rtl_nic/rtl8168d-1.fw kernel/drivers/net/ethernet/realtek/r8169.ko
|
||||
rtl_nic/rtl8168d-2.fw kernel/drivers/net/ethernet/realtek/r8169.ko
|
||||
rtl_nic/rtl8168e-1.fw kernel/drivers/net/ethernet/realtek/r8169.ko
|
||||
@@ -1720,6 +1734,7 @@ rtw88/rtw8821c_fw.bin kernel/drivers/net/wireless/realtek/rtw88/rtw88_8821c.ko
|
||||
rtw88/rtw8822b_fw.bin kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822b.ko
|
||||
rtw88/rtw8822c_fw.bin kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822c.ko
|
||||
rtw88/rtw8822c_wow_fw.bin kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822c.ko
|
||||
rtw89/rtw8852a_fw.bin kernel/drivers/net/wireless/realtek/rtw89/rtw89_core.ko
|
||||
s5k4ecgx.bin kernel/drivers/media/i2c/s5k4ecgx.ko
|
||||
sd8385.bin kernel/drivers/net/wireless/marvell/libertas/libertas_sdio.ko
|
||||
sd8385_helper.bin kernel/drivers/net/wireless/marvell/libertas/libertas_sdio.ko
|
||||
@@ -1794,9 +1809,9 @@ ueagle-atm/eagleII.fw kernel/drivers/usb/atm/ueagle-atm.ko
|
||||
ueagle-atm/eagleIII.fw kernel/drivers/usb/atm/ueagle-atm.ko
|
||||
ueagle-atm/eagleIV.fw kernel/drivers/usb/atm/ueagle-atm.ko
|
||||
usb8388.bin kernel/drivers/net/wireless/marvell/libertas/usb8xxx.ko
|
||||
usbduxfast_firmware.bin kernel/drivers/staging/comedi/drivers/usbduxfast.ko
|
||||
usbdux_firmware.bin kernel/drivers/staging/comedi/drivers/usbdux.ko
|
||||
usbduxsigma_firmware.bin kernel/drivers/staging/comedi/drivers/usbduxsigma.ko
|
||||
usbduxfast_firmware.bin kernel/drivers/comedi/drivers/usbduxfast.ko
|
||||
usbdux_firmware.bin kernel/drivers/comedi/drivers/usbdux.ko
|
||||
usbduxsigma_firmware.bin kernel/drivers/comedi/drivers/usbduxsigma.ko
|
||||
v4l-cx231xx-avcore-01.fw kernel/drivers/media/i2c/cx25840/cx25840.ko
|
||||
v4l-cx23418-apu.fw kernel/drivers/media/pci/cx18/cx18.ko
|
||||
v4l-cx23418-cpu.fw kernel/drivers/media/pci/cx18/cx18.ko
|
||||
|
||||
@@ -21,7 +21,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
1 file changed, 7 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/scripts/mkcompile_h b/scripts/mkcompile_h
|
||||
index 4ae735039daf..5a1abe7b4169 100755
|
||||
index a72b154de7b0..4dd111086466 100755
|
||||
--- a/scripts/mkcompile_h
|
||||
+++ b/scripts/mkcompile_h
|
||||
@@ -24,10 +24,14 @@ else
|
||||
|
||||
@@ -55,10 +55,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
2 files changed, 111 insertions(+)
|
||||
|
||||
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
|
||||
index ee85be64b680..a38a8e44422e 100644
|
||||
index 550f341daf99..478530b48cf1 100644
|
||||
--- a/Documentation/admin-guide/kernel-parameters.txt
|
||||
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||
@@ -3653,6 +3653,15 @@
|
||||
@@ -3814,6 +3814,15 @@
|
||||
Also, it enforces the PCI Local Bus spec
|
||||
rule that those bits should be 0 in system reset
|
||||
events (useful for kexec/kdump cases).
|
||||
@@ -75,10 +75,10 @@ index ee85be64b680..a38a8e44422e 100644
|
||||
Safety option to keep boot IRQs enabled. This
|
||||
should never be necessary.
|
||||
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
|
||||
index f32e521ade1e..4f3558d0c00a 100644
|
||||
index 444ba11f3e79..5843ba2cad8e 100644
|
||||
--- a/drivers/pci/quirks.c
|
||||
+++ b/drivers/pci/quirks.c
|
||||
@@ -192,6 +192,106 @@ static int __init pci_apply_final_quirks(void)
|
||||
@@ -193,6 +193,106 @@ static int __init pci_apply_final_quirks(void)
|
||||
}
|
||||
fs_initcall_sync(pci_apply_final_quirks);
|
||||
|
||||
@@ -185,8 +185,8 @@ index f32e521ade1e..4f3558d0c00a 100644
|
||||
/*
|
||||
* Decoding should be disabled for a PCI device during BAR sizing to avoid
|
||||
* conflict. But doing so may cause problems on host bridge and perhaps other
|
||||
@@ -4857,6 +4957,8 @@ static const struct pci_dev_acs_enabled {
|
||||
{ PCI_VENDOR_ID_CAVIUM, PCI_ANY_ID, pci_quirk_cavium_acs },
|
||||
@@ -4876,6 +4976,8 @@ static const struct pci_dev_acs_enabled {
|
||||
{ PCI_VENDOR_ID_CAVIUM, 0xA060, pci_quirk_mf_endpoint_acs },
|
||||
/* APM X-Gene */
|
||||
{ PCI_VENDOR_ID_AMCC, 0xE004, pci_quirk_xgene_acs },
|
||||
+ /* Enable overrides for missing ACS capabilities */
|
||||
|
||||
@@ -13,10 +13,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
|
||||
index 14e6c73a6031..c191c9e50735 100644
|
||||
index b86d4bce9793..946643fa1aa1 100644
|
||||
--- a/virt/kvm/kvm_main.c
|
||||
+++ b/virt/kvm/kvm_main.c
|
||||
@@ -77,7 +77,7 @@ module_param(halt_poll_ns, uint, 0644);
|
||||
@@ -78,7 +78,7 @@ module_param(halt_poll_ns, uint, 0644);
|
||||
EXPORT_SYMBOL_GPL(halt_poll_ns);
|
||||
|
||||
/* Default doubles per-vcpu halt_poll_ns. */
|
||||
|
||||
@@ -10,13 +10,13 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/net/core/dev.c b/net/core/dev.c
|
||||
index b91b76890cbc..cb7ffc3e848b 100644
|
||||
index 7bac7947d8b8..4196ce468b10 100644
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -10365,7 +10365,7 @@ static void netdev_wait_allrefs(struct net_device *dev)
|
||||
refcnt = netdev_refcnt_read(dev);
|
||||
|
||||
if (refcnt && time_after(jiffies, warning_time + 10 * HZ)) {
|
||||
@@ -10533,7 +10533,7 @@ static void netdev_wait_allrefs(struct net_device *dev)
|
||||
if (refcnt != 1 &&
|
||||
time_after(jiffies, warning_time +
|
||||
netdev_unregister_timeout_secs * HZ)) {
|
||||
- pr_emerg("unregister_netdevice: waiting for %s to become free. Usage count = %d\n",
|
||||
+ pr_err("unregister_netdevice: waiting for %s to become free. Usage count = %d\n",
|
||||
dev->name, refcnt);
|
||||
|
||||
+16
-13
@@ -1,24 +1,25 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= <f.gruenbichler@proxmox.com>
|
||||
Date: Mon, 2 Aug 2021 10:22:30 +0200
|
||||
From: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
Date: Mon, 27 Sep 2021 11:28:39 +0200
|
||||
Subject: [PATCH] Revert "PCI: Coalesce host bridge contiguous apertures"
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This reverts commit c2ff8072deba40887560dc73dd2e558ec539ea09.
|
||||
This reverts commit ab20e43b20b60f5cc8e2ea3763ffa388158469ac.
|
||||
|
||||
was reverted upstream because of reports similar to
|
||||
|
||||
Link: https://bugzilla.proxmox.com/show_bug.cgi?id=3552
|
||||
Link: https://lore.kernel.org/r/20210709231529.GA3270116@roeck-us.net
|
||||
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
|
||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
---
|
||||
drivers/pci/probe.c | 49 ++++-----------------------------------------
|
||||
1 file changed, 4 insertions(+), 45 deletions(-)
|
||||
drivers/pci/probe.c | 52 +++++----------------------------------------
|
||||
1 file changed, 5 insertions(+), 47 deletions(-)
|
||||
|
||||
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
|
||||
index 04664d4fe4be..be51670572fa 100644
|
||||
index 59ef93f1d953..b38a345c5df6 100644
|
||||
--- a/drivers/pci/probe.c
|
||||
+++ b/drivers/pci/probe.c
|
||||
@@ -19,7 +19,6 @@
|
||||
@@ -29,11 +30,12 @@ index 04664d4fe4be..be51670572fa 100644
|
||||
#include "pci.h"
|
||||
|
||||
#define CARDBUS_LATENCY_TIMER 176 /* secondary latency timer */
|
||||
@@ -875,30 +874,14 @@ static void pci_set_bus_msi_domain(struct pci_bus *bus)
|
||||
@@ -875,31 +874,14 @@ static void pci_set_bus_msi_domain(struct pci_bus *bus)
|
||||
dev_set_msi_domain(&bus->dev, d);
|
||||
}
|
||||
|
||||
-static int res_cmp(void *priv, struct list_head *a, struct list_head *b)
|
||||
-static int res_cmp(void *priv, const struct list_head *a,
|
||||
- const struct list_head *b)
|
||||
-{
|
||||
- struct resource_entry *entry1, *entry2;
|
||||
-
|
||||
@@ -63,7 +65,7 @@ index 04664d4fe4be..be51670572fa 100644
|
||||
char addr[64], *fmt;
|
||||
const char *name;
|
||||
int err;
|
||||
@@ -976,35 +959,11 @@ static int pci_register_host_bridge(struct pci_host_bridge *bridge)
|
||||
@@ -979,35 +961,11 @@ static int pci_register_host_bridge(struct pci_host_bridge *bridge)
|
||||
if (nr_node_ids > 1 && pcibus_to_node(bus) == NUMA_NO_NODE)
|
||||
dev_warn(&bus->dev, "Unknown NUMA node; performance will be reduced\n");
|
||||
|
||||
@@ -90,13 +92,14 @@ index 04664d4fe4be..be51670572fa 100644
|
||||
-
|
||||
/* Add initial resources to the bus */
|
||||
resource_list_for_each_entry_safe(window, n, &resources) {
|
||||
+ list_move_tail(&window->node, &bridge->windows);
|
||||
offset = window->offset;
|
||||
res = window->res;
|
||||
- offset = window->offset;
|
||||
- res = window->res;
|
||||
- if (!res->end)
|
||||
- continue;
|
||||
-
|
||||
- list_move_tail(&window->node, &bridge->windows);
|
||||
list_move_tail(&window->node, &bridge->windows);
|
||||
+ offset = window->offset;
|
||||
+ res = window->res;
|
||||
|
||||
if (res->flags & IORESOURCE_BUS)
|
||||
pci_bus_insert_busn_res(bus, bus->number, res->end);
|
||||
@@ -1,68 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Wolfgang Bumiller <w.bumiller@proxmox.com>
|
||||
Date: Fri, 2 Jul 2021 14:07:36 +0200
|
||||
Subject: [PATCH] net: bridge: sync fdb to new unicast-filtering ports
|
||||
|
||||
Since commit 2796d0c648c9 ("bridge: Automatically manage
|
||||
port promiscuous mode.")
|
||||
bridges with `vlan_filtering 1` and only 1 auto-port don't
|
||||
set IFF_PROMISC for unicast-filtering-capable ports.
|
||||
|
||||
Normally on port changes `br_manage_promisc` is called to
|
||||
update the promisc flags and unicast filters if necessary,
|
||||
but it cannot distinguish between *new* ports and ones
|
||||
losing their promisc flag, and new ports end up not
|
||||
receiving the MAC address list.
|
||||
|
||||
Fix this by calling `br_fdb_sync_static` in `br_add_if`
|
||||
after the port promisc flags are updated and the unicast
|
||||
filter was supposed to have been filled.
|
||||
|
||||
Fixes: 2796d0c648c9 ("bridge: Automatically manage port promiscuous mode.")
|
||||
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
|
||||
---
|
||||
net/bridge/br_if.c | 17 ++++++++++++++++-
|
||||
1 file changed, 16 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
|
||||
index f7d2f472ae24..6e4a32354a13 100644
|
||||
--- a/net/bridge/br_if.c
|
||||
+++ b/net/bridge/br_if.c
|
||||
@@ -562,7 +562,7 @@ int br_add_if(struct net_bridge *br, struct net_device *dev,
|
||||
struct net_bridge_port *p;
|
||||
int err = 0;
|
||||
unsigned br_hr, dev_hr;
|
||||
- bool changed_addr;
|
||||
+ bool changed_addr, fdb_synced = false;
|
||||
|
||||
/* Don't allow bridging non-ethernet like devices. */
|
||||
if ((dev->flags & IFF_LOOPBACK) ||
|
||||
@@ -652,6 +652,19 @@ int br_add_if(struct net_bridge *br, struct net_device *dev,
|
||||
list_add_rcu(&p->list, &br->port_list);
|
||||
|
||||
nbp_update_port_count(br);
|
||||
+ if (!br_promisc_port(p) && (p->dev->priv_flags & IFF_UNICAST_FLT)) {
|
||||
+ /* When updating the port count we also update all ports'
|
||||
+ * promiscuous mode.
|
||||
+ * A port leaving promiscuous mode normally gets the bridge's
|
||||
+ * fdb synced to the unicast filter (if supported), however,
|
||||
+ * `br_port_clear_promisc` does not distinguish between
|
||||
+ * non-promiscuous ports and *new* ports, so we need to
|
||||
+ * sync explicitly here.
|
||||
+ */
|
||||
+ fdb_synced = br_fdb_sync_static(br, p) == 0;
|
||||
+ if (!fdb_synced)
|
||||
+ netdev_err(dev, "failed to sync bridge static fdb addresses to this port\n");
|
||||
+ }
|
||||
|
||||
netdev_update_features(br->dev);
|
||||
|
||||
@@ -701,6 +714,8 @@ int br_add_if(struct net_bridge *br, struct net_device *dev,
|
||||
return 0;
|
||||
|
||||
err7:
|
||||
+ if (fdb_synced)
|
||||
+ br_fdb_unsync_static(br, p);
|
||||
list_del_rcu(&p->list);
|
||||
br_fdb_delete_by_port(br, p, 0, 1);
|
||||
nbp_update_port_count(br);
|
||||
+10
-8
@@ -50,12 +50,13 @@ Cc: Guenter Roeck <linux@roeck-us.net>
|
||||
Suggested-by: Bjorn Helgaas <bhelgaas@google.com>
|
||||
Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
|
||||
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
|
||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
---
|
||||
drivers/pci/probe.c | 31 +++++++++++++++++++++++++++----
|
||||
1 file changed, 27 insertions(+), 4 deletions(-)
|
||||
drivers/pci/probe.c | 33 ++++++++++++++++++++++++++++-----
|
||||
1 file changed, 28 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
|
||||
index be51670572fa..133f5d2b189d 100644
|
||||
index b38a345c5df6..485167ca62a1 100644
|
||||
--- a/drivers/pci/probe.c
|
||||
+++ b/drivers/pci/probe.c
|
||||
@@ -877,11 +877,11 @@ static void pci_set_bus_msi_domain(struct pci_bus *bus)
|
||||
@@ -73,7 +74,7 @@ index be51670572fa..133f5d2b189d 100644
|
||||
char addr[64], *fmt;
|
||||
const char *name;
|
||||
int err;
|
||||
@@ -959,11 +959,34 @@ static int pci_register_host_bridge(struct pci_host_bridge *bridge)
|
||||
@@ -961,11 +961,34 @@ static int pci_register_host_bridge(struct pci_host_bridge *bridge)
|
||||
if (nr_node_ids > 1 && pcibus_to_node(bus) == NUMA_NO_NODE)
|
||||
dev_warn(&bus->dev, "Unknown NUMA node; performance will be reduced\n");
|
||||
|
||||
@@ -99,13 +100,14 @@ index be51670572fa..133f5d2b189d 100644
|
||||
+
|
||||
/* Add initial resources to the bus */
|
||||
resource_list_for_each_entry_safe(window, n, &resources) {
|
||||
- list_move_tail(&window->node, &bridge->windows);
|
||||
offset = window->offset;
|
||||
res = window->res;
|
||||
+ offset = window->offset;
|
||||
+ res = window->res;
|
||||
+ if (!res->end)
|
||||
+ continue;
|
||||
+
|
||||
+ list_move_tail(&window->node, &bridge->windows);
|
||||
list_move_tail(&window->node, &bridge->windows);
|
||||
- offset = window->offset;
|
||||
- res = window->res;
|
||||
|
||||
if (res->flags & IORESOURCE_BUS)
|
||||
pci_bus_insert_busn_res(bus, bus->number, res->end);
|
||||
@@ -1,46 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Fabian Ebner <f.ebner@proxmox.com>
|
||||
Date: Wed, 28 Jul 2021 08:55:31 +0200
|
||||
Subject: [PATCH] io_uring: don't block level reissue off completion path
|
||||
|
||||
Some setups, like SCSI, can throw spurious -EAGAIN off the softirq
|
||||
completion path. Normally we expect this to happen inline as part
|
||||
of submission, but apparently SCSI has a weird corner case where it
|
||||
can happen as part of normal completions.
|
||||
|
||||
This should be solved by having the -EAGAIN bubble back up the stack
|
||||
as part of submission, but previous attempts at this failed and we're
|
||||
not just quite there yet. Instead we currently use REQ_F_REISSUE to
|
||||
handle this case.
|
||||
|
||||
For now, catch it in io_rw_should_reissue() and prevent a reissue
|
||||
from a bogus path.
|
||||
|
||||
Upstream mail:
|
||||
https://lore.kernel.org/io-uring/20210727165811.284510-3-axboe@kernel.dk/T/#u
|
||||
|
||||
Originally-by: Jens Axboe <axboe@kernel.dk>
|
||||
[backport]
|
||||
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
|
||||
---
|
||||
fs/io_uring.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/fs/io_uring.c b/fs/io_uring.c
|
||||
index a0d42aea3aa1..ce5cf51a5667 100644
|
||||
--- a/fs/io_uring.c
|
||||
+++ b/fs/io_uring.c
|
||||
@@ -2731,6 +2731,13 @@ static bool io_rw_reissue(struct io_kiocb *req, long res)
|
||||
if (percpu_ref_is_dying(&req->ctx->refs))
|
||||
return false;
|
||||
|
||||
+ /*
|
||||
+ * Play it safe and assume not safe to re-import and reissue if we're
|
||||
+ * not in the original thread group (or in task context).
|
||||
+ */
|
||||
+ if (!same_thread_group(req->task, current) || !in_task())
|
||||
+ return false;
|
||||
+
|
||||
lockdep_assert_held(&req->ctx->uring_lock);
|
||||
|
||||
ret = io_sq_thread_acquire_mm_files(req->ctx, req);
|
||||
@@ -0,0 +1,418 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jens Axboe <axboe@kernel.dk>
|
||||
Date: Tue, 31 Aug 2021 13:57:32 -0600
|
||||
Subject: [PATCH] io-wq: split bounded and unbounded work into separate lists
|
||||
|
||||
We've got a few issues that all boil down to the fact that we have one
|
||||
list of pending work items, yet two different types of workers to
|
||||
serve them. This causes some oddities around workers switching type and
|
||||
even hashed work vs regular work on the same bounded list.
|
||||
|
||||
Just separate them out cleanly, similarly to how we already do
|
||||
accounting of what is running. That provides a clean separation and
|
||||
removes some corner cases that can cause stalls when handling IO
|
||||
that is punted to io-wq.
|
||||
|
||||
Fixes: ecc53c48c13d ("io-wq: check max_worker limits if a worker transitions bound state")
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
[backport]
|
||||
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
|
||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
---
|
||||
fs/io-wq.c | 160 +++++++++++++++++++++++------------------------------
|
||||
1 file changed, 70 insertions(+), 90 deletions(-)
|
||||
|
||||
diff --git a/fs/io-wq.c b/fs/io-wq.c
|
||||
index ba7aaf2b95d0..6710da3d4445 100644
|
||||
--- a/fs/io-wq.c
|
||||
+++ b/fs/io-wq.c
|
||||
@@ -34,7 +34,7 @@ enum {
|
||||
};
|
||||
|
||||
enum {
|
||||
- IO_WQE_FLAG_STALLED = 1, /* stalled on hash */
|
||||
+ IO_ACCT_STALLED_BIT = 0, /* stalled on hash */
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -73,26 +73,25 @@ struct io_wqe_acct {
|
||||
unsigned max_workers;
|
||||
int index;
|
||||
atomic_t nr_running;
|
||||
+ struct io_wq_work_list work_list;
|
||||
+ unsigned long flags;
|
||||
};
|
||||
|
||||
enum {
|
||||
IO_WQ_ACCT_BOUND,
|
||||
IO_WQ_ACCT_UNBOUND,
|
||||
+ IO_WQ_ACCT_NR,
|
||||
};
|
||||
|
||||
/*
|
||||
* Per-node worker thread pool
|
||||
*/
|
||||
struct io_wqe {
|
||||
- struct {
|
||||
- raw_spinlock_t lock;
|
||||
- struct io_wq_work_list work_list;
|
||||
- unsigned flags;
|
||||
- } ____cacheline_aligned_in_smp;
|
||||
-
|
||||
- int node;
|
||||
+ raw_spinlock_t lock;
|
||||
struct io_wqe_acct acct[2];
|
||||
|
||||
+ int node;
|
||||
+
|
||||
struct hlist_nulls_head free_list;
|
||||
struct list_head all_list;
|
||||
|
||||
@@ -196,11 +195,10 @@ static void io_worker_exit(struct io_worker *worker)
|
||||
do_exit(0);
|
||||
}
|
||||
|
||||
-static inline bool io_wqe_run_queue(struct io_wqe *wqe)
|
||||
- __must_hold(wqe->lock)
|
||||
+static inline bool io_acct_run_queue(struct io_wqe_acct *acct)
|
||||
{
|
||||
- if (!wq_list_empty(&wqe->work_list) &&
|
||||
- !(wqe->flags & IO_WQE_FLAG_STALLED))
|
||||
+ if (!wq_list_empty(&acct->work_list) &&
|
||||
+ !test_bit(IO_ACCT_STALLED_BIT, &acct->flags))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
@@ -209,7 +207,8 @@ static inline bool io_wqe_run_queue(struct io_wqe *wqe)
|
||||
* Check head of free list for an available worker. If one isn't available,
|
||||
* caller must create one.
|
||||
*/
|
||||
-static bool io_wqe_activate_free_worker(struct io_wqe *wqe)
|
||||
+static bool io_wqe_activate_free_worker(struct io_wqe *wqe,
|
||||
+ struct io_wqe_acct *acct)
|
||||
__must_hold(RCU)
|
||||
{
|
||||
struct hlist_nulls_node *n;
|
||||
@@ -223,6 +222,10 @@ static bool io_wqe_activate_free_worker(struct io_wqe *wqe)
|
||||
hlist_nulls_for_each_entry_rcu(worker, n, &wqe->free_list, nulls_node) {
|
||||
if (!io_worker_get(worker))
|
||||
continue;
|
||||
+ if (io_wqe_get_acct(worker) != acct) {
|
||||
+ io_worker_release(worker);
|
||||
+ continue;
|
||||
+ }
|
||||
if (wake_up_process(worker->task)) {
|
||||
io_worker_release(worker);
|
||||
return true;
|
||||
@@ -341,7 +344,7 @@ static void io_wqe_dec_running(struct io_worker *worker)
|
||||
if (!(worker->flags & IO_WORKER_F_UP))
|
||||
return;
|
||||
|
||||
- if (atomic_dec_and_test(&acct->nr_running) && io_wqe_run_queue(wqe)) {
|
||||
+ if (atomic_dec_and_test(&acct->nr_running) && io_acct_run_queue(acct)) {
|
||||
atomic_inc(&acct->nr_running);
|
||||
atomic_inc(&wqe->wq->worker_refs);
|
||||
io_queue_worker_create(wqe, worker, acct);
|
||||
@@ -356,29 +359,10 @@ static void __io_worker_busy(struct io_wqe *wqe, struct io_worker *worker,
|
||||
struct io_wq_work *work)
|
||||
__must_hold(wqe->lock)
|
||||
{
|
||||
- bool worker_bound, work_bound;
|
||||
-
|
||||
- BUILD_BUG_ON((IO_WQ_ACCT_UNBOUND ^ IO_WQ_ACCT_BOUND) != 1);
|
||||
-
|
||||
if (worker->flags & IO_WORKER_F_FREE) {
|
||||
worker->flags &= ~IO_WORKER_F_FREE;
|
||||
hlist_nulls_del_init_rcu(&worker->nulls_node);
|
||||
}
|
||||
-
|
||||
- /*
|
||||
- * If worker is moving from bound to unbound (or vice versa), then
|
||||
- * ensure we update the running accounting.
|
||||
- */
|
||||
- worker_bound = (worker->flags & IO_WORKER_F_BOUND) != 0;
|
||||
- work_bound = (work->flags & IO_WQ_WORK_UNBOUND) == 0;
|
||||
- if (worker_bound != work_bound) {
|
||||
- int index = work_bound ? IO_WQ_ACCT_UNBOUND : IO_WQ_ACCT_BOUND;
|
||||
- io_wqe_dec_running(worker);
|
||||
- worker->flags ^= IO_WORKER_F_BOUND;
|
||||
- wqe->acct[index].nr_workers--;
|
||||
- wqe->acct[index ^ 1].nr_workers++;
|
||||
- io_wqe_inc_running(worker);
|
||||
- }
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -420,44 +404,23 @@ static bool io_wait_on_hash(struct io_wqe *wqe, unsigned int hash)
|
||||
return ret;
|
||||
}
|
||||
|
||||
-/*
|
||||
- * We can always run the work if the worker is currently the same type as
|
||||
- * the work (eg both are bound, or both are unbound). If they are not the
|
||||
- * same, only allow it if incrementing the worker count would be allowed.
|
||||
- */
|
||||
-static bool io_worker_can_run_work(struct io_worker *worker,
|
||||
- struct io_wq_work *work)
|
||||
-{
|
||||
- struct io_wqe_acct *acct;
|
||||
-
|
||||
- if (!(worker->flags & IO_WORKER_F_BOUND) !=
|
||||
- !(work->flags & IO_WQ_WORK_UNBOUND))
|
||||
- return true;
|
||||
-
|
||||
- /* not the same type, check if we'd go over the limit */
|
||||
- acct = io_work_get_acct(worker->wqe, work);
|
||||
- return acct->nr_workers < acct->max_workers;
|
||||
-}
|
||||
-
|
||||
-static struct io_wq_work *io_get_next_work(struct io_wqe *wqe,
|
||||
+static struct io_wq_work *io_get_next_work(struct io_wqe_acct *acct,
|
||||
struct io_worker *worker)
|
||||
__must_hold(wqe->lock)
|
||||
{
|
||||
struct io_wq_work_node *node, *prev;
|
||||
struct io_wq_work *work, *tail;
|
||||
unsigned int stall_hash = -1U;
|
||||
+ struct io_wqe *wqe = worker->wqe;
|
||||
|
||||
- wq_list_for_each(node, prev, &wqe->work_list) {
|
||||
+ wq_list_for_each(node, prev, &acct->work_list) {
|
||||
unsigned int hash;
|
||||
|
||||
work = container_of(node, struct io_wq_work, list);
|
||||
|
||||
- if (!io_worker_can_run_work(worker, work))
|
||||
- break;
|
||||
-
|
||||
/* not hashed, can run anytime */
|
||||
if (!io_wq_is_hashed(work)) {
|
||||
- wq_list_del(&wqe->work_list, node, prev);
|
||||
+ wq_list_del(&acct->work_list, node, prev);
|
||||
return work;
|
||||
}
|
||||
|
||||
@@ -468,7 +431,7 @@ static struct io_wq_work *io_get_next_work(struct io_wqe *wqe,
|
||||
/* hashed, can run if not already running */
|
||||
if (!test_and_set_bit(hash, &wqe->wq->hash->map)) {
|
||||
wqe->hash_tail[hash] = NULL;
|
||||
- wq_list_cut(&wqe->work_list, &tail->list, prev);
|
||||
+ wq_list_cut(&acct->work_list, &tail->list, prev);
|
||||
return work;
|
||||
}
|
||||
if (stall_hash == -1U)
|
||||
@@ -484,12 +447,12 @@ static struct io_wq_work *io_get_next_work(struct io_wqe *wqe,
|
||||
* Set this before dropping the lock to avoid racing with new
|
||||
* work being added and clearing the stalled bit.
|
||||
*/
|
||||
- wqe->flags |= IO_WQE_FLAG_STALLED;
|
||||
+ set_bit(IO_ACCT_STALLED_BIT, &acct->flags);
|
||||
raw_spin_unlock(&wqe->lock);
|
||||
unstalled = io_wait_on_hash(wqe, stall_hash);
|
||||
raw_spin_lock(&wqe->lock);
|
||||
if (unstalled) {
|
||||
- wqe->flags &= ~IO_WQE_FLAG_STALLED;
|
||||
+ clear_bit(IO_ACCT_STALLED_BIT, &acct->flags);
|
||||
if (wq_has_sleeper(&wqe->wq->hash->wait))
|
||||
wake_up(&wqe->wq->hash->wait);
|
||||
}
|
||||
@@ -526,6 +489,7 @@ static void io_wqe_enqueue(struct io_wqe *wqe, struct io_wq_work *work);
|
||||
static void io_worker_handle_work(struct io_worker *worker)
|
||||
__releases(wqe->lock)
|
||||
{
|
||||
+ struct io_wqe_acct *acct = io_wqe_get_acct(worker);
|
||||
struct io_wqe *wqe = worker->wqe;
|
||||
struct io_wq *wq = wqe->wq;
|
||||
bool do_kill = test_bit(IO_WQ_BIT_EXIT, &wq->state);
|
||||
@@ -540,7 +504,7 @@ static void io_worker_handle_work(struct io_worker *worker)
|
||||
* can't make progress, any work completion or insertion will
|
||||
* clear the stalled flag.
|
||||
*/
|
||||
- work = io_get_next_work(wqe, worker);
|
||||
+ work = io_get_next_work(acct, worker);
|
||||
if (work)
|
||||
__io_worker_busy(wqe, worker, work);
|
||||
|
||||
@@ -576,7 +540,7 @@ static void io_worker_handle_work(struct io_worker *worker)
|
||||
/* serialize hash clear with wake_up() */
|
||||
spin_lock_irq(&wq->hash->wait.lock);
|
||||
clear_bit(hash, &wq->hash->map);
|
||||
- wqe->flags &= ~IO_WQE_FLAG_STALLED;
|
||||
+ clear_bit(IO_ACCT_STALLED_BIT, &acct->flags);
|
||||
spin_unlock_irq(&wq->hash->wait.lock);
|
||||
if (wq_has_sleeper(&wq->hash->wait))
|
||||
wake_up(&wq->hash->wait);
|
||||
@@ -595,6 +559,7 @@ static void io_worker_handle_work(struct io_worker *worker)
|
||||
static int io_wqe_worker(void *data)
|
||||
{
|
||||
struct io_worker *worker = data;
|
||||
+ struct io_wqe_acct *acct = io_wqe_get_acct(worker);
|
||||
struct io_wqe *wqe = worker->wqe;
|
||||
struct io_wq *wq = wqe->wq;
|
||||
char buf[TASK_COMM_LEN];
|
||||
@@ -610,7 +575,7 @@ static int io_wqe_worker(void *data)
|
||||
set_current_state(TASK_INTERRUPTIBLE);
|
||||
loop:
|
||||
raw_spin_lock_irq(&wqe->lock);
|
||||
- if (io_wqe_run_queue(wqe)) {
|
||||
+ if (io_acct_run_queue(acct)) {
|
||||
io_worker_handle_work(worker);
|
||||
goto loop;
|
||||
}
|
||||
@@ -636,7 +601,7 @@ static int io_wqe_worker(void *data)
|
||||
|
||||
if (test_bit(IO_WQ_BIT_EXIT, &wq->state)) {
|
||||
raw_spin_lock_irq(&wqe->lock);
|
||||
- if (!wq_list_empty(&wqe->work_list))
|
||||
+ if (!wq_list_empty(&acct->work_list))
|
||||
io_worker_handle_work(worker);
|
||||
else
|
||||
raw_spin_unlock_irq(&wqe->lock);
|
||||
@@ -782,12 +747,13 @@ static void io_run_cancel(struct io_wq_work *work, struct io_wqe *wqe)
|
||||
|
||||
static void io_wqe_insert_work(struct io_wqe *wqe, struct io_wq_work *work)
|
||||
{
|
||||
+ struct io_wqe_acct *acct = io_work_get_acct(wqe, work);
|
||||
unsigned int hash;
|
||||
struct io_wq_work *tail;
|
||||
|
||||
if (!io_wq_is_hashed(work)) {
|
||||
append:
|
||||
- wq_list_add_tail(&work->list, &wqe->work_list);
|
||||
+ wq_list_add_tail(&work->list, &acct->work_list);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -797,7 +763,7 @@ static void io_wqe_insert_work(struct io_wqe *wqe, struct io_wq_work *work)
|
||||
if (!tail)
|
||||
goto append;
|
||||
|
||||
- wq_list_add_after(&work->list, &tail->list, &wqe->work_list);
|
||||
+ wq_list_add_after(&work->list, &tail->list, &acct->work_list);
|
||||
}
|
||||
|
||||
static void io_wqe_enqueue(struct io_wqe *wqe, struct io_wq_work *work)
|
||||
@@ -819,10 +785,10 @@ static void io_wqe_enqueue(struct io_wqe *wqe, struct io_wq_work *work)
|
||||
|
||||
raw_spin_lock_irqsave(&wqe->lock, flags);
|
||||
io_wqe_insert_work(wqe, work);
|
||||
- wqe->flags &= ~IO_WQE_FLAG_STALLED;
|
||||
+ clear_bit(IO_ACCT_STALLED_BIT, &acct->flags);
|
||||
|
||||
rcu_read_lock();
|
||||
- do_create = !io_wqe_activate_free_worker(wqe);
|
||||
+ do_create = !io_wqe_activate_free_worker(wqe, acct);
|
||||
rcu_read_unlock();
|
||||
|
||||
raw_spin_unlock_irqrestore(&wqe->lock, flags);
|
||||
@@ -875,6 +841,7 @@ static inline void io_wqe_remove_pending(struct io_wqe *wqe,
|
||||
struct io_wq_work *work,
|
||||
struct io_wq_work_node *prev)
|
||||
{
|
||||
+ struct io_wqe_acct *acct = io_work_get_acct(wqe, work);
|
||||
unsigned int hash = io_get_work_hash(work);
|
||||
struct io_wq_work *prev_work = NULL;
|
||||
|
||||
@@ -886,7 +853,7 @@ static inline void io_wqe_remove_pending(struct io_wqe *wqe,
|
||||
else
|
||||
wqe->hash_tail[hash] = NULL;
|
||||
}
|
||||
- wq_list_del(&wqe->work_list, &work->list, prev);
|
||||
+ wq_list_del(&acct->work_list, &work->list, prev);
|
||||
}
|
||||
|
||||
static void io_wqe_cancel_pending_work(struct io_wqe *wqe,
|
||||
@@ -895,22 +862,27 @@ static void io_wqe_cancel_pending_work(struct io_wqe *wqe,
|
||||
struct io_wq_work_node *node, *prev;
|
||||
struct io_wq_work *work;
|
||||
unsigned long flags;
|
||||
+ int i;
|
||||
|
||||
retry:
|
||||
raw_spin_lock_irqsave(&wqe->lock, flags);
|
||||
- wq_list_for_each(node, prev, &wqe->work_list) {
|
||||
- work = container_of(node, struct io_wq_work, list);
|
||||
- if (!match->fn(work, match->data))
|
||||
- continue;
|
||||
- io_wqe_remove_pending(wqe, work, prev);
|
||||
- raw_spin_unlock_irqrestore(&wqe->lock, flags);
|
||||
- io_run_cancel(work, wqe);
|
||||
- match->nr_pending++;
|
||||
- if (!match->cancel_all)
|
||||
- return;
|
||||
+ for (i = 0; i < IO_WQ_ACCT_NR; i++) {
|
||||
+ struct io_wqe_acct *acct = io_get_acct(wqe, i == 0);
|
||||
|
||||
- /* not safe to continue after unlock */
|
||||
- goto retry;
|
||||
+ wq_list_for_each(node, prev, &acct->work_list) {
|
||||
+ work = container_of(node, struct io_wq_work, list);
|
||||
+ if (!match->fn(work, match->data))
|
||||
+ continue;
|
||||
+ io_wqe_remove_pending(wqe, work, prev);
|
||||
+ raw_spin_unlock_irqrestore(&wqe->lock, flags);
|
||||
+ io_run_cancel(work, wqe);
|
||||
+ match->nr_pending++;
|
||||
+ if (!match->cancel_all)
|
||||
+ return;
|
||||
+
|
||||
+ /* not safe to continue after unlock */
|
||||
+ goto retry;
|
||||
+ }
|
||||
}
|
||||
raw_spin_unlock_irqrestore(&wqe->lock, flags);
|
||||
}
|
||||
@@ -971,18 +943,24 @@ static int io_wqe_hash_wake(struct wait_queue_entry *wait, unsigned mode,
|
||||
int sync, void *key)
|
||||
{
|
||||
struct io_wqe *wqe = container_of(wait, struct io_wqe, wait);
|
||||
+ int i;
|
||||
|
||||
list_del_init(&wait->entry);
|
||||
|
||||
rcu_read_lock();
|
||||
- io_wqe_activate_free_worker(wqe);
|
||||
+ for (i = 0; i < IO_WQ_ACCT_NR; i++) {
|
||||
+ struct io_wqe_acct *acct = &wqe->acct[i];
|
||||
+
|
||||
+ if (test_and_clear_bit(IO_ACCT_STALLED_BIT, &acct->flags))
|
||||
+ io_wqe_activate_free_worker(wqe, acct);
|
||||
+ }
|
||||
rcu_read_unlock();
|
||||
return 1;
|
||||
}
|
||||
|
||||
struct io_wq *io_wq_create(unsigned bounded, struct io_wq_data *data)
|
||||
{
|
||||
- int ret = -ENOMEM, node;
|
||||
+ int ret, node, i;
|
||||
struct io_wq *wq;
|
||||
|
||||
if (WARN_ON_ONCE(!data->free_work || !data->do_work))
|
||||
@@ -1019,18 +997,20 @@ struct io_wq *io_wq_create(unsigned bounded, struct io_wq_data *data)
|
||||
goto err;
|
||||
wq->wqes[node] = wqe;
|
||||
wqe->node = alloc_node;
|
||||
- wqe->acct[IO_WQ_ACCT_BOUND].index = IO_WQ_ACCT_BOUND;
|
||||
- wqe->acct[IO_WQ_ACCT_UNBOUND].index = IO_WQ_ACCT_UNBOUND;
|
||||
wqe->acct[IO_WQ_ACCT_BOUND].max_workers = bounded;
|
||||
- atomic_set(&wqe->acct[IO_WQ_ACCT_BOUND].nr_running, 0);
|
||||
wqe->acct[IO_WQ_ACCT_UNBOUND].max_workers =
|
||||
task_rlimit(current, RLIMIT_NPROC);
|
||||
- atomic_set(&wqe->acct[IO_WQ_ACCT_UNBOUND].nr_running, 0);
|
||||
- wqe->wait.func = io_wqe_hash_wake;
|
||||
INIT_LIST_HEAD(&wqe->wait.entry);
|
||||
+ wqe->wait.func = io_wqe_hash_wake;
|
||||
+ for (i = 0; i < IO_WQ_ACCT_NR; i++) {
|
||||
+ struct io_wqe_acct *acct = &wqe->acct[i];
|
||||
+
|
||||
+ acct->index = i;
|
||||
+ atomic_set(&acct->nr_running, 0);
|
||||
+ INIT_WQ_LIST(&acct->work_list);
|
||||
+ }
|
||||
wqe->wq = wq;
|
||||
raw_spin_lock_init(&wqe->lock);
|
||||
- INIT_WQ_LIST(&wqe->work_list);
|
||||
INIT_HLIST_NULLS_HEAD(&wqe->free_list, 0);
|
||||
INIT_LIST_HEAD(&wqe->all_list);
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= <f.gruenbichler@proxmox.com>
|
||||
Date: Thu, 14 Sep 2017 11:09:58 +0200
|
||||
Subject: [PATCH] do not generate split BTF type info per default
|
||||
|
||||
This reverts commit a8ed1a0607cfa5478ff6009539f44790c4d0956d.
|
||||
|
||||
It breaks ZFS sometimes:
|
||||
https://github.com/openzfs/zfs/issues/12301#issuecomment-873303739
|
||||
|
||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
---
|
||||
lib/Kconfig.debug | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
|
||||
index 25dc20175bba..7ff51a3f65e6 100644
|
||||
--- a/lib/Kconfig.debug
|
||||
+++ b/lib/Kconfig.debug
|
||||
@@ -314,7 +314,7 @@ config PAHOLE_HAS_SPLIT_BTF
|
||||
def_bool $(success, test `$(PAHOLE) --version | sed -E 's/v([0-9]+)\.([0-9]+)/\1\2/'` -ge "119")
|
||||
|
||||
config DEBUG_INFO_BTF_MODULES
|
||||
- def_bool y
|
||||
+ def_bool n
|
||||
depends on DEBUG_INFO_BTF && MODULES && PAHOLE_HAS_SPLIT_BTF
|
||||
help
|
||||
Generate compact split BTF type information for kernel modules.
|
||||
@@ -0,0 +1,90 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Bonzini <pbonzini@redhat.com>
|
||||
Date: Mon, 22 Nov 2021 19:43:09 -0500
|
||||
Subject: [PATCH] KVM: VMX: prepare sync_pir_to_irr for running with APICv
|
||||
disabled
|
||||
|
||||
If APICv is disabled for this vCPU, assigned devices may still attempt to
|
||||
post interrupts. In that case, we need to cancel the vmentry and deliver
|
||||
the interrupt with KVM_REQ_EVENT. Extend the existing code that handles
|
||||
injection of L1 interrupts into L2 to cover this case as well.
|
||||
|
||||
vmx_hwapic_irr_update is only called when APICv is active so it would be
|
||||
confusing to add a check for vcpu->arch.apicv_active in there. Instead,
|
||||
just use vmx_set_rvi directly in vmx_sync_pir_to_irr.
|
||||
|
||||
Cc: stable@vger.kernel.org
|
||||
Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
|
||||
Reviewed-by: David Matlack <dmatlack@google.com>
|
||||
Reviewed-by: Sean Christopherson <seanjc@google.com>
|
||||
Message-Id: <20211123004311.2954158-3-pbonzini@redhat.com>
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
(cherry picked from commit 7e1901f6c86c896acff6609e0176f93f756d8b2a)
|
||||
[ T: reused WARN instead of newer KVM_BUG_ON for minimal change ]
|
||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
---
|
||||
arch/x86/kvm/vmx/vmx.c | 39 +++++++++++++++++++++++++--------------
|
||||
1 file changed, 25 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
|
||||
index fc6fbaba1cb5..2f6db087e243 100644
|
||||
--- a/arch/x86/kvm/vmx/vmx.c
|
||||
+++ b/arch/x86/kvm/vmx/vmx.c
|
||||
@@ -6331,9 +6331,9 @@ static int vmx_sync_pir_to_irr(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
struct vcpu_vmx *vmx = to_vmx(vcpu);
|
||||
int max_irr;
|
||||
- bool max_irr_updated;
|
||||
+ bool got_posted_interrupt;
|
||||
|
||||
- WARN_ON(!vcpu->arch.apicv_active);
|
||||
+ WARN_ON(!enable_apicv);
|
||||
if (pi_test_on(&vmx->pi_desc)) {
|
||||
pi_clear_on(&vmx->pi_desc);
|
||||
/*
|
||||
@@ -6341,22 +6341,33 @@ static int vmx_sync_pir_to_irr(struct kvm_vcpu *vcpu)
|
||||
* But on x86 this is just a compiler barrier anyway.
|
||||
*/
|
||||
smp_mb__after_atomic();
|
||||
- max_irr_updated =
|
||||
+ got_posted_interrupt =
|
||||
kvm_apic_update_irr(vcpu, vmx->pi_desc.pir, &max_irr);
|
||||
-
|
||||
- /*
|
||||
- * If we are running L2 and L1 has a new pending interrupt
|
||||
- * which can be injected, this may cause a vmexit or it may
|
||||
- * be injected into L2. Either way, this interrupt will be
|
||||
- * processed via KVM_REQ_EVENT, not RVI, because we do not use
|
||||
- * virtual interrupt delivery to inject L1 interrupts into L2.
|
||||
- */
|
||||
- if (is_guest_mode(vcpu) && max_irr_updated)
|
||||
- kvm_make_request(KVM_REQ_EVENT, vcpu);
|
||||
} else {
|
||||
max_irr = kvm_lapic_find_highest_irr(vcpu);
|
||||
+ got_posted_interrupt = false;
|
||||
}
|
||||
- vmx_hwapic_irr_update(vcpu, max_irr);
|
||||
+
|
||||
+ /*
|
||||
+ * Newly recognized interrupts are injected via either virtual interrupt
|
||||
+ * delivery (RVI) or KVM_REQ_EVENT. Virtual interrupt delivery is
|
||||
+ * disabled in two cases:
|
||||
+ *
|
||||
+ * 1) If L2 is running and the vCPU has a new pending interrupt. If L1
|
||||
+ * wants to exit on interrupts, KVM_REQ_EVENT is needed to synthesize a
|
||||
+ * VM-Exit to L1. If L1 doesn't want to exit, the interrupt is injected
|
||||
+ * into L2, but KVM doesn't use virtual interrupt delivery to inject
|
||||
+ * interrupts into L2, and so KVM_REQ_EVENT is again needed.
|
||||
+ *
|
||||
+ * 2) If APICv is disabled for this vCPU, assigned devices may still
|
||||
+ * attempt to post interrupts. The posted interrupt vector will cause
|
||||
+ * a VM-Exit and the subsequent entry will call sync_pir_to_irr.
|
||||
+ */
|
||||
+ if (!is_guest_mode(vcpu) && kvm_vcpu_apicv_active(vcpu))
|
||||
+ vmx_set_rvi(max_irr);
|
||||
+ else if (got_posted_interrupt)
|
||||
+ kvm_make_request(KVM_REQ_EVENT, vcpu);
|
||||
+
|
||||
return max_irr;
|
||||
}
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Ming Lei <ming.lei@redhat.com>
|
||||
Date: Fri, 10 Sep 2021 14:30:15 +0200
|
||||
Subject: [PATCH] blk-mq: fix kernel panic during iterating over flush request
|
||||
|
||||
commit c2da19ed50554ce52ecbad3655c98371fe58599f upstream.
|
||||
|
||||
For fixing use-after-free during iterating over requests, we grabbed
|
||||
request's refcount before calling ->fn in commit 2e315dc07df0 ("blk-mq:
|
||||
grab rq->refcount before calling ->fn in blk_mq_tagset_busy_iter").
|
||||
Turns out this way may cause kernel panic when iterating over one flush
|
||||
request:
|
||||
|
||||
1) old flush request's tag is just released, and this tag is reused by
|
||||
one new request, but ->rqs[] isn't updated yet
|
||||
|
||||
2) the flush request can be re-used for submitting one new flush command,
|
||||
so blk_rq_init() is called at the same time
|
||||
|
||||
3) meantime blk_mq_queue_tag_busy_iter() is called, and old flush request
|
||||
is retrieved from ->rqs[tag]; when blk_mq_put_rq_ref() is called,
|
||||
flush_rq->end_io may not be updated yet, so NULL pointer dereference
|
||||
is triggered in blk_mq_put_rq_ref().
|
||||
|
||||
Fix the issue by calling refcount_set(&flush_rq->ref, 1) after
|
||||
flush_rq->end_io is set. So far the only other caller of blk_rq_init() is
|
||||
scsi_ioctl_reset() in which the request doesn't enter block IO stack and
|
||||
the request reference count isn't used, so the change is safe.
|
||||
|
||||
Fixes: 2e315dc07df0 ("blk-mq: grab rq->refcount before calling ->fn in blk_mq_tagset_busy_iter")
|
||||
Reported-by: "Blank-Burian, Markus, Dr." <blankburian@uni-muenster.de>
|
||||
Tested-by: "Blank-Burian, Markus, Dr." <blankburian@uni-muenster.de>
|
||||
Signed-off-by: Ming Lei <ming.lei@redhat.com>
|
||||
Reviewed-by: Christoph Hellwig <hch@lst.de>
|
||||
Reviewed-by: John Garry <john.garry@huawei.com>
|
||||
Link: https://lore.kernel.org/r/20210811142624.618598-1-ming.lei@redhat.com
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
Cc: Yi Zhang <yi.zhang@redhat.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
block/blk-core.c | 1 -
|
||||
block/blk-flush.c | 8 ++++++++
|
||||
2 files changed, 8 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/block/blk-core.c b/block/blk-core.c
|
||||
index 7663a9b94b80..debdf9b0bf30 100644
|
||||
--- a/block/blk-core.c
|
||||
+++ b/block/blk-core.c
|
||||
@@ -121,7 +121,6 @@ void blk_rq_init(struct request_queue *q, struct request *rq)
|
||||
rq->internal_tag = BLK_MQ_NO_TAG;
|
||||
rq->start_time_ns = ktime_get_ns();
|
||||
rq->part = NULL;
|
||||
- refcount_set(&rq->ref, 1);
|
||||
blk_crypto_rq_set_defaults(rq);
|
||||
}
|
||||
EXPORT_SYMBOL(blk_rq_init);
|
||||
diff --git a/block/blk-flush.c b/block/blk-flush.c
|
||||
index e89d007dbf6a..8b11ab3b3762 100644
|
||||
--- a/block/blk-flush.c
|
||||
+++ b/block/blk-flush.c
|
||||
@@ -329,6 +329,14 @@ static void blk_kick_flush(struct request_queue *q, struct blk_flush_queue *fq,
|
||||
flush_rq->rq_flags |= RQF_FLUSH_SEQ;
|
||||
flush_rq->rq_disk = first_rq->rq_disk;
|
||||
flush_rq->end_io = flush_end_io;
|
||||
+ /*
|
||||
+ * Order WRITE ->end_io and WRITE rq->ref, and its pair is the one
|
||||
+ * implied in refcount_inc_not_zero() called from
|
||||
+ * blk_mq_find_and_get_req(), which orders WRITE/READ flush_rq->ref
|
||||
+ * and READ flush_rq->end_io
|
||||
+ */
|
||||
+ smp_wmb();
|
||||
+ refcount_set(&flush_rq->ref, 1);
|
||||
|
||||
blk_flush_queue_rq(flush_rq, false);
|
||||
}
|
||||
@@ -1,91 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Ming Lei <ming.lei@redhat.com>
|
||||
Date: Fri, 10 Sep 2021 14:30:16 +0200
|
||||
Subject: [PATCH] blk-mq: fix is_flush_rq
|
||||
|
||||
commit a9ed27a764156929efe714033edb3e9023c5f321 upstream.
|
||||
|
||||
is_flush_rq() is called from bt_iter()/bt_tags_iter(), and runs the
|
||||
following check:
|
||||
|
||||
hctx->fq->flush_rq == req
|
||||
|
||||
but the passed hctx from bt_iter()/bt_tags_iter() may be NULL because:
|
||||
|
||||
1) memory re-order in blk_mq_rq_ctx_init():
|
||||
|
||||
rq->mq_hctx = data->hctx;
|
||||
...
|
||||
refcount_set(&rq->ref, 1);
|
||||
|
||||
OR
|
||||
|
||||
2) tag re-use and ->rqs[] isn't updated with new request.
|
||||
|
||||
Fix the issue by re-writing is_flush_rq() as:
|
||||
|
||||
return rq->end_io == flush_end_io;
|
||||
|
||||
which turns out simpler to follow and immune to data race since we have
|
||||
ordered WRITE rq->end_io and refcount_set(&rq->ref, 1).
|
||||
|
||||
Fixes: 2e315dc07df0 ("blk-mq: grab rq->refcount before calling ->fn in blk_mq_tagset_busy_iter")
|
||||
Cc: "Blank-Burian, Markus, Dr." <blankburian@uni-muenster.de>
|
||||
Cc: Yufen Yu <yuyufen@huawei.com>
|
||||
Signed-off-by: Ming Lei <ming.lei@redhat.com>
|
||||
Link: https://lore.kernel.org/r/20210818010925.607383-1-ming.lei@redhat.com
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
Cc: Yi Zhang <yi.zhang@redhat.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
block/blk-flush.c | 5 +++++
|
||||
block/blk-mq.c | 2 +-
|
||||
block/blk.h | 6 +-----
|
||||
3 files changed, 7 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/block/blk-flush.c b/block/blk-flush.c
|
||||
index 8b11ab3b3762..705ee6c99020 100644
|
||||
--- a/block/blk-flush.c
|
||||
+++ b/block/blk-flush.c
|
||||
@@ -262,6 +262,11 @@ static void flush_end_io(struct request *flush_rq, blk_status_t error)
|
||||
spin_unlock_irqrestore(&fq->mq_flush_lock, flags);
|
||||
}
|
||||
|
||||
+bool is_flush_rq(struct request *rq)
|
||||
+{
|
||||
+ return rq->end_io == flush_end_io;
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* blk_kick_flush - consider issuing flush request
|
||||
* @q: request_queue being kicked
|
||||
diff --git a/block/blk-mq.c b/block/blk-mq.c
|
||||
index cb619ec8aaf2..601e40204d06 100644
|
||||
--- a/block/blk-mq.c
|
||||
+++ b/block/blk-mq.c
|
||||
@@ -937,7 +937,7 @@ static bool blk_mq_req_expired(struct request *rq, unsigned long *next)
|
||||
|
||||
void blk_mq_put_rq_ref(struct request *rq)
|
||||
{
|
||||
- if (is_flush_rq(rq, rq->mq_hctx))
|
||||
+ if (is_flush_rq(rq))
|
||||
rq->end_io(rq, 0);
|
||||
else if (refcount_dec_and_test(&rq->ref))
|
||||
__blk_mq_free_request(rq);
|
||||
diff --git a/block/blk.h b/block/blk.h
|
||||
index 7550364c326c..4a4ffd992790 100644
|
||||
--- a/block/blk.h
|
||||
+++ b/block/blk.h
|
||||
@@ -43,11 +43,7 @@ static inline void __blk_get_queue(struct request_queue *q)
|
||||
kobject_get(&q->kobj);
|
||||
}
|
||||
|
||||
-static inline bool
|
||||
-is_flush_rq(struct request *req, struct blk_mq_hw_ctx *hctx)
|
||||
-{
|
||||
- return hctx->fq->flush_rq == req;
|
||||
-}
|
||||
+bool is_flush_rq(struct request *req);
|
||||
|
||||
struct blk_flush_queue *blk_alloc_flush_queue(int node, int cmd_size,
|
||||
gfp_t flags);
|
||||
Submodule submodules/ubuntu-hirsute deleted from 9fb3242fa6
Submodule
+1
Submodule submodules/ubuntu-impish added at 168d1231d9
+1
-1
Submodule submodules/zfsonlinux updated: e697cc5992...531eac3304
Reference in New Issue
Block a user