Compare commits
142 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 35fcdb4df4 | |||
| d9c8122ccc | |||
| 1d6ab3c1ca | |||
| 16f4d03eb4 | |||
| 0141ea157c | |||
| 0ffb6ba51a | |||
| 00d66e9633 | |||
| d12013ce56 | |||
| 2a624c23cd | |||
| 32bc81fb69 | |||
| 5214c210a2 | |||
| e450e254a2 | |||
| a61c6773b5 | |||
| 044258547b | |||
| ddff189f90 | |||
| 198fde3a16 | |||
| 401e4a8b30 | |||
| e020b057d4 | |||
| f6d0c333b9 | |||
| dab9b0c8a9 | |||
| 8ce40beedd | |||
| b6a4a13b2e | |||
| ed7d3489df | |||
| f04548e789 | |||
| 9bc835d4c3 | |||
| 03b3d0d7b7 | |||
| 4fc427d906 | |||
| 43b801ba8b | |||
| 2f1b0dd29f | |||
| 998c6ae1d6 | |||
| 54ebe3cb9b | |||
| e134df3bfb | |||
| c05b69d890 | |||
| 13d55d8e4e | |||
| 4f993f3c8d | |||
| 03f275ed36 | |||
| 0e82bcd140 | |||
| 2bebed5935 | |||
| 4fa95e6fc2 | |||
| 997b257f9f | |||
| 3ae8384f6f | |||
| c94439e479 | |||
| 176be3a33d | |||
| dcf4761c93 | |||
| 542f4bf33f | |||
| bb7155fd8f | |||
| 96f7973c9b | |||
| 5453b9a966 | |||
| 81d8ba874e | |||
| 832507353a | |||
| c441cab322 | |||
| 35fd42877f | |||
| 81dd154811 | |||
| f6df304f26 | |||
| aa04318f19 | |||
| da0f51338f | |||
| 6e8f6ca9a5 | |||
| f663b7d85c | |||
| db4c7dbbba | |||
| e2197b715c | |||
| f85cb245b4 | |||
| f09c6fa2b2 | |||
| 4af054d560 | |||
| 8f995224af | |||
| 9932c8650b | |||
| ce418f2f12 | |||
| 28be8fe9f4 | |||
| 0594faab65 | |||
| c2793ff7ec | |||
| 37e459b0b2 | |||
| ad0a766ee2 | |||
| 4a8e848f62 | |||
| b8b75b2ff6 | |||
| c8298fb299 | |||
| c1964433a1 | |||
| 044c70fd78 | |||
| b321611251 | |||
| c9fb416fa5 | |||
| eea5de8e26 | |||
| f483bc2cf3 | |||
| f722fe4712 | |||
| bd84eca209 | |||
| 6ef2b41a1e | |||
| ce41152248 | |||
| c406c352b8 | |||
| 842d7097a9 | |||
| f03e2d42b8 | |||
| c9275e3a2e | |||
| fe53f932a0 | |||
| 73e4912f3d | |||
| 16268bafdb | |||
| 3ee3114846 | |||
| 1615b3ee92 | |||
| d74cf6e596 | |||
| 3b601a2ab5 | |||
| b2e8d482c2 | |||
| d03ea6b3bd | |||
| 77d9581228 | |||
| fab03f123b | |||
| 629d8797f9 | |||
| f641ad1603 | |||
| 40f544e7f5 | |||
| 3697562564 | |||
| 74eb34c8f9 | |||
| 78d3164c4f | |||
| d016128d1f | |||
| 15d1081010 | |||
| 09d62646a4 | |||
| 525ea48834 | |||
| 3dd8e02d2d | |||
| 90723103d8 | |||
| 23de619687 | |||
| 3611ac5c5b | |||
| 0185292098 | |||
| 0380f07491 | |||
| 55227d53ae | |||
| 6a9017af4b | |||
| 512f455615 | |||
| fc0472a18f | |||
| 60e804189a | |||
| f75dea1c0d | |||
| e3c945b9dd | |||
| b15c05bd57 | |||
| dc95ab3ddd | |||
| 9e9ee77277 | |||
| 76ce1e5017 | |||
| 290da2bec6 | |||
| 75d6cb4562 | |||
| 51eaefb494 | |||
| 0a77aa18e1 | |||
| ef7f6d2402 | |||
| 818dfceac5 | |||
| 51eb9bd351 | |||
| 71e32d4690 | |||
| 7ffd90ef3e | |||
| dd539d4154 | |||
| bc1d191389 | |||
| 7c4bae5665 | |||
| 892a5d3219 | |||
| f6163ca84c | |||
| 4be20d430b | |||
| 74962917c2 |
+3
-3
@@ -1,6 +1,6 @@
|
||||
[submodule "submodules/zfsonlinux"]
|
||||
path = submodules/zfsonlinux
|
||||
url = ../zfsonlinux
|
||||
[submodule "submodules/ubuntu-impish"]
|
||||
path = submodules/ubuntu-impish
|
||||
url = ../mirror_ubuntu-impish-kernel
|
||||
[submodule "submodules/ubuntu-kernel"]
|
||||
path = submodules/ubuntu-kernel
|
||||
url = ../mirror_ubuntu-kernels
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
# also bump pve-kernel-meta if either of MAJ.MIN, PATCHLEVEL or KREL change
|
||||
KERNEL_MAJ=5
|
||||
KERNEL_MIN=13
|
||||
KERNEL_PATCHLEVEL=19
|
||||
KERNEL_MIN=19
|
||||
KERNEL_PATCHLEVEL=17
|
||||
# increment KREL if the ABI changes (abicheck target in debian/rules)
|
||||
# rebuild packages with new KREL and run 'make abiupdate'
|
||||
KREL=6
|
||||
KREL=2
|
||||
|
||||
PKGREL=14
|
||||
PKGREL=2
|
||||
|
||||
KERNEL_MAJMIN=$(KERNEL_MAJ).$(KERNEL_MIN)
|
||||
KERNEL_VER=$(KERNEL_MAJMIN).$(KERNEL_PATCHLEVEL)
|
||||
@@ -31,7 +31,7 @@ SKIPABI=0
|
||||
|
||||
BUILD_DIR=build
|
||||
|
||||
KERNEL_SRC=ubuntu-impish
|
||||
KERNEL_SRC=ubuntu-kernel
|
||||
KERNEL_SRC_SUBMODULE=submodules/$(KERNEL_SRC)
|
||||
KERNEL_CFG_ORG=config-${KERNEL_VER}.org
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ KERNEL SOURCE:
|
||||
|
||||
We currently use the Ubuntu kernel sources, available from:
|
||||
|
||||
http://kernel.ubuntu.com/git/ubuntu/ubuntu-impish.git/
|
||||
http://kernel.ubuntu.com/git/ubuntu/ubuntu-jammy.git/
|
||||
|
||||
Ubuntu will maintain those kernels till:
|
||||
|
||||
@@ -35,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-impish/.git
|
||||
$ cat build/ubuntu-jammy/.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
|
||||
@@ -64,7 +64,7 @@ pve-kernel-meta
|
||||
---------------
|
||||
|
||||
depends on latest kernel and header package within a certain kernel series,
|
||||
e.g., pve-kernel-5.11 / pve-headers-5.11
|
||||
e.g., pve-kernel-5.15 / pve-headers-5.15
|
||||
|
||||
git clone git://git.proxmox.com/git/pve-kernel-meta.git
|
||||
|
||||
|
||||
-25907
File diff suppressed because it is too large
Load Diff
+27059
File diff suppressed because it is too large
Load Diff
Vendored
+187
-34
@@ -1,71 +1,224 @@
|
||||
pve-kernel (5.13.19-14) bullseye; urgency=medium
|
||||
pve-kernel (5.19.17-2) bullseye; urgency=medium
|
||||
|
||||
* update to Ubuntu-5.13.0-36.41
|
||||
* update submodule to Ubuntu-5.19.0-31.32
|
||||
|
||||
* bump ABI to 5.13.19-6
|
||||
* bump ABI to 5.19.17-2
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Thu, 10 Mar 2022 16:24:52 +0100
|
||||
* note that this is likely the last release for Proxmox's 5.19 based kernel
|
||||
|
||||
pve-kernel (5.13.19-13) bullseye; urgency=medium
|
||||
-- Proxmox Support Team <support@proxmox.com> Sat, 28 Jan 2023 16:40:25 +0100
|
||||
|
||||
* backport "KVM: VMX: prepare sync_pir_to_irr for running with APICv
|
||||
disabled" to avoid breaking some Windows VMs startup
|
||||
pve-kernel (5.19.17-1) bullseye; urgency=medium
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Tue, 08 Mar 2022 07:32:25 +0100
|
||||
* update to Ubuntu-5.19.0-24.25
|
||||
|
||||
pve-kernel (5.13.19-12) bullseye; urgency=medium
|
||||
* bump ABI to 5.19.17-1
|
||||
|
||||
* 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, 14 Nov 2022 20:25:12 +0100
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Mon, 07 Mar 2022 15:54:28 +0100
|
||||
pve-kernel (5.19.7-2) bullseye; urgency=medium
|
||||
|
||||
pve-kernel (5.13.19-11) bullseye; urgency=medium
|
||||
* update ZFS to 2.1.6
|
||||
|
||||
* backport "lib/iov_iter: initialize "flags" in new pipe_buffer" fixing
|
||||
CVE-2022-0847 "dirty pipe"
|
||||
* update to Ubuntu-5.19.0-19.19
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Mon, 07 Mar 2022 13:28:22 +0100
|
||||
* bump ABI to 5.19.7-2
|
||||
|
||||
pve-kernel (5.13.19-10) bullseye; urgency=medium
|
||||
-- Proxmox Support Team <support@proxmox.com> Tue, 04 Oct 2022 17:18:40 +0200
|
||||
|
||||
* update to Ubuntu-5.13.0-31.34
|
||||
pve-kernel (5.19.7-1) bullseye; urgency=medium
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Mon, 21 Feb 2022 09:26:12 +0100
|
||||
* update to 5.19.7 based on Ubuntu-5.19.0-16.16
|
||||
|
||||
pve-kernel (5.13.19-9) bullseye; urgency=medium
|
||||
-- Proxmox Support Team <support@proxmox.com> Tue, 06 Sep 2022 07:54:58 +0200
|
||||
|
||||
* update to Ubuntu-5.13.0-30.33
|
||||
revert a problematic patch causing issues with releasing block devices
|
||||
pve-kernel (5.19.0-1) bullseye; urgency=medium
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Mon, 07 Feb 2022 11:01:14 +0100
|
||||
* update to 5.19.0 based from Ubuntu-5.19.0-14.14
|
||||
|
||||
pve-kernel (5.13.19-8) bullseye; urgency=medium
|
||||
-- Proxmox Support Team <support@proxmox.com> Tue, 02 Aug 2022 09:18:39 +0200
|
||||
|
||||
* update sources to Ubuntu-5.13.0-29.32
|
||||
pve-kernel (5.19.0-1~rc8+2) bullseye; urgency=medium
|
||||
|
||||
* bump ABI to 5.13.19-4
|
||||
* backport smm fixes
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Mon, 31 Jan 2022 10:09:37 +0100
|
||||
-- Proxmox Support Team <support@proxmox.com> Wed, 27 Jul 2022 11:27:10 +0200
|
||||
|
||||
pve-kernel (5.13.19-7) bullseye; urgency=medium
|
||||
pve-kernel (5.19.0-1~rc8+1) bullseye; urgency=medium
|
||||
|
||||
* update to 5.19.0-rc8 based from Ubuntu-5.19.0-11.11
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Tue, 26 Jul 2022 11:47:30 +0200
|
||||
|
||||
pve-kernel (5.15.53-1) bullseye; urgency=medium
|
||||
|
||||
* update to Ubuntu-5.15.0-48.54
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Fri, 26 Aug 2022 16:53:52 +0200
|
||||
|
||||
pve-kernel (5.15.39-4) bullseye; urgency=medium
|
||||
|
||||
* update "SMM emulation and interrupt shadow fixes" to v3
|
||||
|
||||
* bump ABI to 5.15.35-4
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Mon, 08 Aug 2022 15:11:15 +0200
|
||||
|
||||
pve-kernel (5.15.39-3) bullseye; urgency=medium
|
||||
|
||||
* backport "SMM emulation and interrupt shadow fixes"
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Wed, 27 Jul 2022 13:45:39 +0200
|
||||
|
||||
pve-kernel (5.15.39-2) bullseye; urgency=medium
|
||||
|
||||
* update to Ubuntu-5.15.0-45.48
|
||||
|
||||
* update ZFS to 2.1.5
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Wed, 20 Jul 2022 17:22:19 +0200
|
||||
|
||||
pve-kernel (5.15.39-1) bullseye; urgency=medium
|
||||
|
||||
* update to Ubuntu-5.15.0-41.44
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Wed, 22 Jun 2022 17:22:00 +0200
|
||||
|
||||
pve-kernel (5.15.35-6) bullseye; urgency=medium
|
||||
|
||||
* update to Ubuntu-5.15.0-40.43
|
||||
|
||||
* bump ABI to 5.15.35-3
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Fri, 17 Jun 2022 13:42:35 +0200
|
||||
|
||||
pve-kernel (5.15.35-5) bullseye; urgency=medium
|
||||
|
||||
* backport netfilter nf_table sanitiation fixes
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Wed, 08 Jun 2022 15:02:51 +0200
|
||||
|
||||
pve-kernel (5.15.35-4) bullseye; urgency=medium
|
||||
|
||||
* update to Ubuntu-5.15.0-36.37
|
||||
|
||||
* fix #4083: backport "EDAC/amd64: Add PCI device IDs for family 19h
|
||||
model 50h"
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Thu, 02 Jun 2022 13:48:41 +0200
|
||||
|
||||
pve-kernel (5.15.35-3) bullseye; urgency=medium
|
||||
|
||||
* fix #4039: backport aquantia atlantic NIC fixes
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Wed, 11 May 2022 07:57:51 +0200
|
||||
|
||||
pve-kernel (5.15.35-2) bullseye; urgency=medium
|
||||
|
||||
* cherry pick "NFSv4.1 provide mount option to toggle trunking discovery"
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Thu, 05 May 2022 13:54:35 +0200
|
||||
|
||||
pve-kernel (5.15.35-1) bullseye; urgency=medium
|
||||
|
||||
* update to Ubuntu-5.15.0-29.30
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Wed, 04 May 2022 12:32:49 +0200
|
||||
|
||||
pve-kernel (5.15.30-3) bullseye; urgency=medium
|
||||
|
||||
* backport "io_uring: fix race between timeout flush and removal"
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Fri, 22 Apr 2022 18:08:27 +0200
|
||||
|
||||
pve-kernel (5.15.30-2) bullseye; urgency=medium
|
||||
|
||||
* update sources to Ubuntu-5.15.0-27.28
|
||||
|
||||
* bump ABI to 5.15.30-2
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Fri, 22 Apr 2022 11:15:56 +0200
|
||||
|
||||
pve-kernel (5.15.30-1) bullseye; urgency=medium
|
||||
|
||||
* update sources to Ubuntu-5.15.0-24.24 based on 5.15.30
|
||||
|
||||
* update ZFS to 2.1.4
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Tue, 29 Mar 2022 10:36:02 +0200
|
||||
|
||||
pve-kernel (5.15.27-1) bullseye; urgency=medium
|
||||
|
||||
* update sources to Ubuntu-5.15.0-23.23 based on 5.15.27
|
||||
|
||||
* update ZFS to 2.1.3
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Sat, 12 Mar 2022 15:16:17 +0100
|
||||
|
||||
pve-kernel (5.15.19-3) 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 16:23:02 +0100
|
||||
|
||||
pve-kernel (5.15.19-2) bullseye; urgency=medium
|
||||
|
||||
* backport fbdev memory region release improvements
|
||||
|
||||
* ensure 'simpledrm' module gets build, allowing it to take over any system
|
||||
VGA/VBE/EFI framebuffer directly
|
||||
|
||||
* bump ABI to 5.15.19-2
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Tue, 08 Feb 2022 11:19:02 +0100
|
||||
|
||||
pve-kernel (5.15.19-1) bullseye; urgency=medium
|
||||
|
||||
* update sources to Ubuntu-5.15.0-20.20 based on 5.15.19
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Fri, 04 Feb 2022 06:09:14 +0100
|
||||
|
||||
pve-kernel (5.15.17-1) bullseye; urgency=medium
|
||||
|
||||
* update sources to Ubuntu-5.15.0-19.19 based on 5.15.17
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Mon, 31 Jan 2022 09:41:30 +0100
|
||||
|
||||
pve-kernel (5.15.12-3) 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
|
||||
-- Proxmox Support Team <support@proxmox.com> Thu, 20 Jan 2022 16:36:44 +0100
|
||||
|
||||
pve-kernel (5.13.19-6) bullseye; urgency=medium
|
||||
pve-kernel (5.15.12-2) bullseye; urgency=medium
|
||||
|
||||
* update sources to Ubuntu-5.13.0-24.24
|
||||
|
||||
* bump ABI to 5.13.19-3
|
||||
* update sources to Ubuntu-5.15.0-16.16 based on 5.15.12
|
||||
|
||||
* 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
|
||||
* cherry-pick "blk-cgroup: always terminate io.stat lines"
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Tue, 11 Jan 2022 16:43:18 +0100
|
||||
|
||||
pve-kernel (5.15.7-1) bullseye; urgency=medium
|
||||
|
||||
* update to Ubuntu-5.15.0-14.14
|
||||
|
||||
* bump ABI to 5.15.7-1
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Tue, 14 Dec 2021 16:42:34 +0100
|
||||
|
||||
pve-kernel (5.15.5-1) bullseye; urgency=medium
|
||||
|
||||
* update to upcomming Ubuntu 22.04, Jammy Jellyfish kernel
|
||||
|
||||
* bump ABI to 5.15.5-1
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Mon, 29 Nov 2021 18:49:57 +0100
|
||||
|
||||
pve-kernel (5.13.19-4) bullseye; urgency=medium
|
||||
|
||||
|
||||
Vendored
+3
-3
@@ -53,7 +53,7 @@ Priority: optional
|
||||
Architecture: any
|
||||
Provides: linux-headers-@KVNAME@-amd64
|
||||
Depends: coreutils | fileutils (>= 4.0)
|
||||
Description: The Proxmox PVE Kernel Headers
|
||||
Description: Proxmox Kernel Headers
|
||||
This package contains the linux kernel headers
|
||||
|
||||
Package: pve-kernel-@KVNAME@
|
||||
@@ -64,7 +64,7 @@ Provides: linux-image-@KVNAME@-amd64
|
||||
Suggests: pve-firmware
|
||||
Depends: busybox, initramfs-tools
|
||||
Recommends: grub-pc | grub-efi-amd64 | grub-efi-ia32 | grub-efi-arm64
|
||||
Description: The Proxmox PVE Kernel Image
|
||||
Description: Proxmox Kernel Image
|
||||
This package contains the linux kernel and initial ramdisk used for booting
|
||||
|
||||
Package: pve-kernel-@KVNAME@-dbgsym
|
||||
@@ -73,7 +73,7 @@ Provides: linux-debug
|
||||
Section: devel
|
||||
Priority: optional
|
||||
Build-Profiles: <pkg.pve-kernel.debug>
|
||||
Description: The Proxmox PVE Kernel debug image
|
||||
Description: Proxmox Kernel debug image
|
||||
This package provides the kernel debug image for version @KVNAME@. The debug
|
||||
kernel image contained in this package is NOT meant to boot from - it is
|
||||
uncompressed, and unstripped, and suitable for use with crash/kdump-tools/..
|
||||
|
||||
Vendored
+3
-6
@@ -1,11 +1,8 @@
|
||||
This is a prepackaged version of the Linux kernel binary image.
|
||||
|
||||
This package was put together by Proxmox Server
|
||||
Solutions GmbH <support@proxmox.com>.
|
||||
|
||||
We use the RHEL7 kernel sources, available from:
|
||||
|
||||
ftp://ftp.redhat.com/redhat/rhel/
|
||||
For the packaging and all files in the debian/ folder consider:
|
||||
Copyright (C) 2007-2022 Proxmox Server Solutions GmbH
|
||||
Licensed under the AGPL-3.0-or-later
|
||||
|
||||
Linux is copyrighted by Linus Torvalds and others.
|
||||
|
||||
|
||||
Vendored
+2
-1
@@ -47,6 +47,8 @@ PVE_CONFIG_OPTS= \
|
||||
-d CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND \
|
||||
-d CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL \
|
||||
-e CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE \
|
||||
-e CONFIG_SYSFB_SIMPLEFB \
|
||||
-e CONFIG_DRM_SIMPLEDRM \
|
||||
-d CONFIG_MODULE_SIG \
|
||||
-d CONFIG_MEMCG_DISABLED \
|
||||
-e CONFIG_MEMCG_SWAP_ENABLED \
|
||||
@@ -235,7 +237,6 @@ endif
|
||||
.usr_headers_install_mark: .config_mark
|
||||
rm -rf '${PKG_DIR}'
|
||||
mkdir -p '${PKG_DIR}'
|
||||
$(MAKE) -C ${KERNEL_SRC} headers_check ARCH=$(KERNEL_HEADER_ARCH)
|
||||
$(MAKE) -C ${KERNEL_SRC} headers_install ARCH=$(KERNEL_HEADER_ARCH) INSTALL_HDR_PATH='$(CURDIR)'/$(OUT_DIR)
|
||||
rm -rf $(OUT_DIR)/include/drm $(OUT_DIR)/include/scsi
|
||||
find $(OUT_DIR)/include \( -name .install -o -name ..install.cmd \) -execdir rm {} +
|
||||
|
||||
Vendored
+1
-2
@@ -5,8 +5,7 @@ my $abiold = shift;
|
||||
my $skipabi = shift;
|
||||
|
||||
# to catch multiple abi-prev-* files being passed in
|
||||
die "invalid value for skipabi parameter\n"
|
||||
if (defined($skipabi) && $skipabi !~ /^[01]$/);
|
||||
die "invalid value '$skipabi' for skipabi parameter\n" if defined($skipabi) && $skipabi !~ /^[01]$/;
|
||||
|
||||
$abinew =~ /abi-(.*)/;
|
||||
my $abistr = $1;
|
||||
|
||||
Vendored
+1
-1
@@ -8,7 +8,7 @@ die "no directory to scan" if !$dir;
|
||||
|
||||
die "no such directory" if ! -d $dir;
|
||||
|
||||
die "strange directory name: $dir" if $dir !~ m|^(.*/)?(\d+.\d+.\d+\-\d+\-pve)(/+)?$|;
|
||||
warn "\n\nNOTE: strange directory name: $dir\n\n" if $dir !~ m|^(.*/)?(\d+.\d+.\d+\-\d+\-pve)(/+)?$|;
|
||||
|
||||
my $apiver = $2;
|
||||
|
||||
|
||||
+207
-58
@@ -17,6 +17,7 @@ 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_cap.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.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
|
||||
@@ -35,6 +36,18 @@ amdgpu/arcturus_sos.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/arcturus_ta.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/arcturus_vcn.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/banks_k_2_smc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/beige_goby_ce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/beige_goby_dmcub.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/beige_goby_me.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/beige_goby_mec2.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/beige_goby_mec.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/beige_goby_pfp.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/beige_goby_rlc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/beige_goby_sdma.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/beige_goby_smc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/beige_goby_sos.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/beige_goby_ta.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/beige_goby_vcn.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/bonaire_ce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/bonaire_k_smc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/bonaire_mc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
@@ -57,6 +70,16 @@ amdgpu/carrizo_sdma1.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/carrizo_sdma.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/carrizo_uvd.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/carrizo_vce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/cyan_skillfish2_ce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/cyan_skillfish2_me.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/cyan_skillfish2_mec2.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/cyan_skillfish2_mec.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/cyan_skillfish2_pfp.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/cyan_skillfish2_rlc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/cyan_skillfish2_sdma1.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/cyan_skillfish2_sdma.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/dcn_3_1_5_dmcub.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/dcn_3_1_6_dmcub.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/dimgrey_cavefish_ce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/dimgrey_cavefish_dmcub.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/dimgrey_cavefish_me.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
@@ -80,6 +103,40 @@ amdgpu/fiji_sdma.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/fiji_smc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/fiji_uvd.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/fiji_vce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_10_3_6_ce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_10_3_6_me.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_10_3_6_mec2.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_10_3_6_mec.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_10_3_6_pfp.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_10_3_6_rlc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_10_3_7_ce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_10_3_7_me.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_10_3_7_mec2.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_10_3_7_mec.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_10_3_7_pfp.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_10_3_7_rlc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_11_0_0_imu.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_11_0_0_me.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_11_0_0_mec.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_11_0_0_mes1.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_11_0_0_mes.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_11_0_0_pfp.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_11_0_0_rlc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_11_0_0_toc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_11_0_1_imu.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_11_0_1_me.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_11_0_1_mec.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_11_0_1_mes1.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_11_0_1_mes.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_11_0_1_pfp.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_11_0_1_rlc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_11_0_2_imu.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_11_0_2_me.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_11_0_2_mec.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_11_0_2_mes1.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_11_0_2_mes.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_11_0_2_pfp.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/gc_11_0_2_rlc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/green_sardine_asd.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/green_sardine_ce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/green_sardine_dmcub.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
@@ -110,6 +167,7 @@ amdgpu/hawaii_sdma.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/hawaii_smc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/hawaii_uvd.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/hawaii_vce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/ip_discovery.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/kabini_ce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/kabini_me.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/kabini_mec.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
@@ -140,7 +198,6 @@ amdgpu/mullins_uvd.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/mullins_vce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/navi10_asd.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/navi10_ce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/navi10_gpu_info.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/navi10_me.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/navi10_mec2.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/navi10_mec.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
@@ -154,6 +211,7 @@ amdgpu/navi10_sos.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/navi10_ta.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/navi10_vcn.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/navi12_asd.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/navi12_cap.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/navi12_ce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/navi12_dmcu.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/navi12_gpu_info.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
@@ -171,7 +229,6 @@ amdgpu/navi12_vcn.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/navi14_asd.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/navi14_ce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/navi14_ce_wks.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/navi14_gpu_info.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/navi14_me.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/navi14_mec2.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/navi14_mec2_wks.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
@@ -289,6 +346,12 @@ amdgpu/polaris12_sdma.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/polaris12_smc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/polaris12_uvd.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/polaris12_vce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/psp_13_0_0_sos.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/psp_13_0_5_ta.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/psp_13_0_5_toc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/psp_13_0_7_sos.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/psp_13_0_8_ta.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/psp_13_0_8_toc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/raven2_asd.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/raven2_ce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/raven2_gpu_info.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
@@ -316,7 +379,6 @@ amdgpu/raven_vcn.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/renoir_asd.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
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_mec.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/renoir_pfp.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
@@ -324,12 +386,19 @@ amdgpu/renoir_rlc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/renoir_sdma.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/renoir_ta.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/renoir_vcn.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/sdma_5_2_6.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/sdma_5_2_7.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/sdma_6_0_0.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/sdma_6_0_1.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/sdma_6_0_2.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/si58_mc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/sienna_cichlid_cap.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/sienna_cichlid_ce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/sienna_cichlid_dmcub.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/sienna_cichlid_me.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/sienna_cichlid_mec2.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/sienna_cichlid_mec.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/sienna_cichlid_mes1.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/sienna_cichlid_mes.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/sienna_cichlid_pfp.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/sienna_cichlid_rlc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
@@ -338,6 +407,8 @@ amdgpu/sienna_cichlid_smc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/sienna_cichlid_sos.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/sienna_cichlid_ta.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/sienna_cichlid_vcn.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/smu_13_0_0.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/smu_13_0_7.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/stoney_ce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/stoney_me.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/stoney_mec.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
@@ -379,7 +450,6 @@ amdgpu/topaz_smc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/vangogh_asd.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/vangogh_ce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/vangogh_dmcub.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/vangogh_gpu_info.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/vangogh_me.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/vangogh_mec2.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/vangogh_mec.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
@@ -388,8 +458,12 @@ amdgpu/vangogh_rlc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/vangogh_sdma.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/vangogh_toc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/vangogh_vcn.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/vcn_3_1_2.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/vcn_4_0_0.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/vcn_4_0_4.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/vega10_acg_smc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/vega10_asd.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/vega10_cap.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/vega10_ce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/vega10_gpu_info.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/vega10_me.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
@@ -450,6 +524,17 @@ amdgpu/verde_pfp.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/verde_rlc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/verde_smc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/verde_uvd.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/yellow_carp_ce.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/yellow_carp_dmcub.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/yellow_carp_me.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/yellow_carp_mec2.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/yellow_carp_mec.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/yellow_carp_pfp.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/yellow_carp_rlc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/yellow_carp_sdma.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/yellow_carp_ta.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/yellow_carp_toc.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
amdgpu/yellow_carp_vcn.bin kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko
|
||||
ar5523.bin kernel/drivers/net/wireless/ath/ar5523/ar5523.ko
|
||||
asihpi/dsp5000.bin kernel/sound/pci/asihpi/snd-asihpi.ko
|
||||
asihpi/dsp6200.bin kernel/sound/pci/asihpi/snd-asihpi.ko
|
||||
@@ -538,9 +623,8 @@ atmel_at76c505-rfmd.bin kernel/drivers/net/wireless/atmel/at76c50x-usb.ko
|
||||
atmel_at76c506.bin kernel/drivers/net/wireless/atmel/atmel.ko
|
||||
atmel_at76c506-wpa.bin kernel/drivers/net/wireless/atmel/atmel.ko
|
||||
atmel/wilc1000_wifi_firmware-1.bin kernel/drivers/net/wireless/microchip/wilc1000/wilc1000.ko
|
||||
atmsar11.fw kernel/drivers/atm/ambassador.ko
|
||||
atsc_denver.inp kernel/drivers/media/common/siano/smsmdtv.ko
|
||||
av7110/bootcode.bin kernel/drivers/media/pci/ttpci/dvb-ttpci.ko
|
||||
av7110/bootcode.bin kernel/drivers/staging/media/av7110/dvb-ttpci.ko
|
||||
b43legacy/ucode2.fw kernel/drivers/net/wireless/broadcom/b43legacy/b43legacy.ko
|
||||
b43legacy/ucode4.fw kernel/drivers/net/wireless/broadcom/b43legacy/b43legacy.ko
|
||||
b43/ucode11.fw kernel/drivers/net/wireless/broadcom/b43/b43.ko
|
||||
@@ -569,11 +653,15 @@ bnx2/bnx2-rv2p-06-6.0.15.fw kernel/drivers/net/ethernet/broadcom/bnx2.ko
|
||||
bnx2/bnx2-rv2p-09-6.0.17.fw kernel/drivers/net/ethernet/broadcom/bnx2.ko
|
||||
bnx2/bnx2-rv2p-09ax-6.0.17.fw kernel/drivers/net/ethernet/broadcom/bnx2.ko
|
||||
bnx2x/bnx2x-e1-7.13.15.0.fw kernel/drivers/net/ethernet/broadcom/bnx2x/bnx2x.ko
|
||||
bnx2x/bnx2x-e1-7.13.21.0.fw kernel/drivers/net/ethernet/broadcom/bnx2x/bnx2x.ko
|
||||
bnx2x/bnx2x-e1h-7.13.15.0.fw kernel/drivers/net/ethernet/broadcom/bnx2x/bnx2x.ko
|
||||
bnx2x/bnx2x-e1h-7.13.21.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
|
||||
bnx2x/bnx2x-e2-7.13.21.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/brcmfmac43012-sdio.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac43012-sdio.clm_blob 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
|
||||
brcm/brcmfmac43236b.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
@@ -589,16 +677,23 @@ brcm/brcmfmac4335-sdio.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfm
|
||||
brcm/brcmfmac43362-sdio.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac4339-sdio.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac43430a0-sdio.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac43430b0-sdio.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac43430-sdio.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac43430-sdio.clm_blob kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac43455-sdio.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac43455-sdio.clm_blob kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac43456-sdio.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac4350c2-pcie.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac4350-pcie.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac4354-sdio.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac4354-sdio.clm_blob kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac43569.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac4356-pcie.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac4356-pcie.clm_blob kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac4356-sdio.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac4356-sdio.clm_blob kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac43570-pcie.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac43570-pcie.clm_blob kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac4358-pcie.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac4359-pcie.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac4359-sdio.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
@@ -611,7 +706,13 @@ 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/brcmfmac4373-sdio.clm_blob kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac43752-sdio.bin kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac43752-sdio.clm_blob kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac*-pcie.*.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*-pcie.txt kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
brcm/brcmfmac*-sdio.*.bin 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
|
||||
@@ -681,6 +782,16 @@ 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
|
||||
dvb-demod-si2168-b40-01.fw kernel/drivers/media/dvb-frontends/si2168.ko
|
||||
dvb-demod-si2168-d60-01.fw kernel/drivers/media/dvb-frontends/si2168.ko
|
||||
dvb_driver_si2141_rom60.fw kernel/drivers/media/tuners/si2157.ko
|
||||
dvb_driver_si2141_rom61.fw kernel/drivers/media/tuners/si2157.ko
|
||||
dvb_driver_si2146_rom11.fw kernel/drivers/media/tuners/si2157.ko
|
||||
dvb_driver_si2147_rom50.fw kernel/drivers/media/tuners/si2157.ko
|
||||
dvb_driver_si2148_rom32.fw kernel/drivers/media/tuners/si2157.ko
|
||||
dvb_driver_si2148_rom33.fw kernel/drivers/media/tuners/si2157.ko
|
||||
dvb_driver_si2157_rom50.fw kernel/drivers/media/tuners/si2157.ko
|
||||
dvb_driver_si2158_rom51.fw kernel/drivers/media/tuners/si2157.ko
|
||||
dvb_driver_si2177_rom50.fw kernel/drivers/media/tuners/si2157.ko
|
||||
dvb_driver_si2178_rom50.fw kernel/drivers/media/tuners/si2157.ko
|
||||
dvb-fe-af9013.fw kernel/drivers/media/dvb-frontends/af9013.ko
|
||||
dvb-fe-cx24117.fw kernel/drivers/media/dvb-frontends/cx24117.ko
|
||||
dvb-fe-drxj-mc-1.0.8.fw kernel/drivers/media/dvb-frontends/drx39xyj/drx39xyj.ko
|
||||
@@ -802,38 +913,52 @@ 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
|
||||
i915/adlp_dmc_ver2_16.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/adlp_guc_69.0.3.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/adlp_guc_70.1.1.bin kernel/drivers/gpu/drm/i915/i915.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_guc_70.1.1.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/bxt_huc_2.0.0.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/cml_guc_49.0.1.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/cml_guc_70.1.1.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/cml_huc_4.0.0.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/cnl_dmc_ver1_07.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/dg1_dmc_ver2_02.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/ehl_guc_49.0.1.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/dg1_guc_70.1.1.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/dg1_huc_7.9.3.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/dg2_guc_70.1.2.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/ehl_guc_70.1.1.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/ehl_huc_9.0.0.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/glk_dmc_ver1_04.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/glk_guc_49.0.1.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/glk_guc_70.1.1.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/glk_huc_4.0.0.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/icl_dmc_ver1_09.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/icl_guc_49.0.1.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/icl_guc_70.1.1.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/icl_huc_9.0.0.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/kbl_dmc_ver1_04.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/kbl_guc_49.0.1.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/kbl_guc_70.1.1.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/kbl_huc_4.0.0.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/rkl_dmc_ver2_02.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/rkl_dmc_ver2_03.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/skl_dmc_ver1_27.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/skl_guc_49.0.1.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/skl_guc_70.1.1.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/skl_huc_2.0.0.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/tgl_dmc_ver2_08.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/tgl_guc_49.0.1.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/tgl_huc_7.5.0.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/tgl_dmc_ver2_12.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/tgl_guc_69.0.3.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/tgl_guc_70.1.1.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
i915/tgl_huc_7.9.3.bin kernel/drivers/gpu/drm/i915/i915.ko
|
||||
idt82p33xxx.bin kernel/drivers/ptp/ptp_idt82p33.ko
|
||||
ifpp.bin kernel/drivers/crypto/inside-secure/crypto_safexcel.ko
|
||||
inside-secure/eip197b/ifpp.bin kernel/drivers/crypto/inside-secure/crypto_safexcel.ko
|
||||
inside-secure/eip197b/ipue.bin kernel/drivers/crypto/inside-secure/crypto_safexcel.ko
|
||||
inside-secure/eip197d/ifpp.bin kernel/drivers/crypto/inside-secure/crypto_safexcel.ko
|
||||
inside-secure/eip197d/ipue.bin kernel/drivers/crypto/inside-secure/crypto_safexcel.ko
|
||||
inside-secure/eip197_minifw/ifpp.bin kernel/drivers/crypto/inside-secure/crypto_safexcel.ko
|
||||
inside-secure/eip197_minifw/ipue.bin kernel/drivers/crypto/inside-secure/crypto_safexcel.ko
|
||||
intel/ibt-11-5.ddc kernel/drivers/bluetooth/btintel.ko
|
||||
intel/ibt-11-5.sfi kernel/drivers/bluetooth/btintel.ko
|
||||
intel/ibt-12-16.ddc kernel/drivers/bluetooth/btintel.ko
|
||||
intel/ibt-12-16.sfi kernel/drivers/bluetooth/btintel.ko
|
||||
intel/ice/ddp/ice.pkg kernel/drivers/net/ethernet/intel/ice/ice.ko
|
||||
ipue.bin kernel/drivers/crypto/inside-secure/crypto_safexcel.ko
|
||||
ipw2100-1.3.fw kernel/drivers/net/wireless/intel/ipw2x00/ipw2100.ko
|
||||
ipw2100-1.3-i.fw kernel/drivers/net/wireless/intel/ipw2x00/ipw2100.ko
|
||||
ipw2100-1.3-p.fw kernel/drivers/net/wireless/intel/ipw2x00/ipw2100.ko
|
||||
@@ -873,31 +998,39 @@ 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-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
|
||||
iwlwifi-bz-a0-fm-a0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-bz-a0-gf4-a0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-bz-a0-gf-a0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-bz-a0-hr-b0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-bz-a0-mr-a0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-BzBnj-a0-fm4-a0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-BzBnj-a0-fm-a0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-BzBnj-a0-gf4-a0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-BzBnj-a0-gf-a0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-BzBnj-a0-hr-b0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-cc-a0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-gl-a0-fm-a0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-ma-a0-fm-a0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-ma-a0-gf4-a0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-ma-a0-gf-a0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-ma-a0-hr-b0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-ma-a0-mr-a0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-Qu-b0-hr-b0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-Qu-b0-jf-b0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-Qu-c0-hr-b0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-QuQnj-b0-hr-b0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-QuQnj-b0-jf-b0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-QuZ-a0-hr-b0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-QuZ-a0-jf-b0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-so-a0-gf-a0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-so-a0-hr-b0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-so-a0-jf-b0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-SoSnj-a0-gf4-a0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-SoSnj-a0-gf-a0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-SoSnj-a0-hr-b0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-SoSnj-a0-jf-b0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-SoSnj-a0-mr-a0-72.ucode kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
|
||||
iwlwifi-ty-a0-gf-a0-72.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
|
||||
@@ -961,13 +1094,14 @@ liquidio/lio_23xx_nic.bin kernel/drivers/net/ethernet/cavium/liquidio/liquidio.k
|
||||
liquidio/lio_410nv_nic.bin kernel/drivers/net/ethernet/cavium/liquidio/liquidio.ko
|
||||
me2600_firmware.bin kernel/drivers/comedi/drivers/me_daq.ko
|
||||
me4000_firmware.bin kernel/drivers/comedi/drivers/me4000.ko
|
||||
mediatek/BT_RAM_CODE_MT7961_1_2_hdr.bin kernel/drivers/bluetooth/btmtk.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
|
||||
mediatek/mt7615_cr4.bin kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7615e.ko
|
||||
mediatek/mt7615_n9.bin kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7615e.ko
|
||||
mediatek/mt7615_rom_patch.bin kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7615e.ko
|
||||
mediatek/mt7622pr2h.bin kernel/drivers/bluetooth/btmtkuart.ko
|
||||
mediatek/mt7622pr2h.bin kernel/drivers/bluetooth/btmtk.ko
|
||||
mediatek/mt7650e.bin kernel/drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0e.ko
|
||||
mediatek/mt7663_n9_rebb.bin kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7615e.ko
|
||||
mediatek/mt7663_n9_rebb.bin kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7663s.ko
|
||||
@@ -975,28 +1109,34 @@ mediatek/mt7663_n9_rebb.bin kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7
|
||||
mediatek/mt7663_n9_v3.bin kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7615e.ko
|
||||
mediatek/mt7663_n9_v3.bin kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7663s.ko
|
||||
mediatek/mt7663_n9_v3.bin kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7663u.ko
|
||||
mediatek/mt7663pr2h.bin kernel/drivers/bluetooth/btmtksdio.ko
|
||||
mediatek/mt7663pr2h.bin kernel/drivers/bluetooth/btmtkuart.ko
|
||||
mediatek/mt7663pr2h.bin kernel/drivers/bluetooth/btusb.ko
|
||||
mediatek/mt7663pr2h.bin kernel/drivers/bluetooth/btmtk.ko
|
||||
mediatek/mt7663pr2h.bin kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7615e.ko
|
||||
mediatek/mt7663pr2h.bin kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7663s.ko
|
||||
mediatek/mt7663pr2h.bin kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7663u.ko
|
||||
mediatek/mt7663pr2h_rebb.bin kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7615e.ko
|
||||
mediatek/mt7663pr2h_rebb.bin kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7663s.ko
|
||||
mediatek/mt7663pr2h_rebb.bin kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7663u.ko
|
||||
mediatek/mt7668pr2h.bin kernel/drivers/bluetooth/btmtksdio.ko
|
||||
mediatek/mt7668pr2h.bin kernel/drivers/bluetooth/btmtkuart.ko
|
||||
mediatek/mt7668pr2h.bin kernel/drivers/bluetooth/btusb.ko
|
||||
mediatek/mt7668pr2h.bin kernel/drivers/bluetooth/btmtk.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
|
||||
mediatek/mt7916_rom_patch.bin kernel/drivers/net/wireless/mediatek/mt76/mt7915/mt7915e.ko
|
||||
mediatek/mt7916_wa.bin kernel/drivers/net/wireless/mediatek/mt76/mt7915/mt7915e.ko
|
||||
mediatek/mt7916_wm.bin kernel/drivers/net/wireless/mediatek/mt76/mt7915/mt7915e.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_MT7961_patch_mcu_1_2_hdr.bin kernel/drivers/net/wireless/mediatek/mt76/mt7921/mt7921s.ko
|
||||
mediatek/WIFI_MT7961_patch_mcu_1_2_hdr.bin kernel/drivers/net/wireless/mediatek/mt76/mt7921/mt7921u.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
|
||||
mediatek/WIFI_RAM_CODE_MT7961_1.bin kernel/drivers/net/wireless/mediatek/mt76/mt7921/mt7921s.ko
|
||||
mediatek/WIFI_RAM_CODE_MT7961_1.bin kernel/drivers/net/wireless/mediatek/mt76/mt7921/mt7921u.ko
|
||||
mellanox/lc_ini_bundle_2010_1006.bin kernel/drivers/net/ethernet/mellanox/mlxsw/mlxsw_spectrum.ko
|
||||
mellanox/mlxsw_spectrum-13.2010.1006.mfa2 kernel/drivers/net/ethernet/mellanox/mlxsw/mlxsw_spectrum.ko
|
||||
mellanox/mlxsw_spectrum2-29.2010.1006.mfa2 kernel/drivers/net/ethernet/mellanox/mlxsw/mlxsw_spectrum.ko
|
||||
mellanox/mlxsw_spectrum3-30.2010.1006.mfa2 kernel/drivers/net/ethernet/mellanox/mlxsw/mlxsw_spectrum.ko
|
||||
microchip/mscc_vsc8574_revb_int8051_29e8.bin kernel/drivers/net/phy/mscc/mscc.ko
|
||||
microchip/mscc_vsc8584_revb_int8051_fb48.bin kernel/drivers/net/phy/mscc/mscc.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
|
||||
@@ -1018,6 +1158,7 @@ mrvl/sd8897_uapsta.bin kernel/drivers/bluetooth/btmrvl_sdio.ko
|
||||
mrvl/sd8897_uapsta.bin kernel/drivers/net/wireless/marvell/mwifiex/mwifiex_sdio.ko
|
||||
mrvl/sd8987_uapsta.bin kernel/drivers/bluetooth/btmrvl_sdio.ko
|
||||
mrvl/sd8987_uapsta.bin kernel/drivers/net/wireless/marvell/mwifiex/mwifiex_sdio.ko
|
||||
mrvl/sdiouart8997_combo_v4.bin kernel/drivers/net/wireless/marvell/mwifiex/mwifiex_sdio.ko
|
||||
mrvl/sdsd8977_combo_v2.bin kernel/drivers/bluetooth/btmrvl_sdio.ko
|
||||
mrvl/sdsd8977_combo_v2.bin kernel/drivers/net/wireless/marvell/mwifiex/mwifiex_sdio.ko
|
||||
mrvl/sdsd8997_combo_v4.bin kernel/drivers/bluetooth/btmrvl_sdio.ko
|
||||
@@ -1386,6 +1527,7 @@ pcxhr/xlxc924.dat kernel/sound/pci/pcxhr/snd-pcxhr.ko
|
||||
pcxhr/xlxint.dat kernel/sound/pci/pcxhr/snd-pcxhr.ko
|
||||
phanfw.bin kernel/drivers/net/ethernet/qlogic/netxen/netxen_nic.ko
|
||||
phanfw.bin kernel/drivers/net/ethernet/qlogic/qlcnic/qlcnic.ko
|
||||
plfxlc/lifi-x.bin kernel/drivers/net/wireless/purelifi/plfxlc/plfxlc.ko
|
||||
prism2_ru.fw kernel/drivers/staging/wlan-ng/prism2_usb.ko
|
||||
prism_ap_fw.bin kernel/drivers/net/wireless/intersil/orinoco/orinoco.ko
|
||||
prism_sta_fw.bin kernel/drivers/net/wireless/intersil/orinoco/orinoco.ko
|
||||
@@ -1397,7 +1539,7 @@ qat_c3xxx.bin kernel/drivers/crypto/qat/qat_c3xxx/qat_c3xxx.ko
|
||||
qat_c3xxx_mmp.bin kernel/drivers/crypto/qat/qat_c3xxx/qat_c3xxx.ko
|
||||
qat_c62x.bin kernel/drivers/crypto/qat/qat_c62x/qat_c62x.ko
|
||||
qat_c62x_mmp.bin kernel/drivers/crypto/qat/qat_c62x/qat_c62x.ko
|
||||
qed/qed_init_values_zipped-8.42.2.0.bin kernel/drivers/net/ethernet/qlogic/qed/qed.ko
|
||||
qed/qed_init_values_zipped-8.59.1.0.bin kernel/drivers/net/ethernet/qlogic/qed/qed.ko
|
||||
ql2100_fw.bin kernel/drivers/scsi/qla2xxx/qla2xxx.ko
|
||||
ql2200_fw.bin kernel/drivers/scsi/qla2xxx/qla2xxx.ko
|
||||
ql2300_fw.bin kernel/drivers/scsi/qla2xxx/qla2xxx.ko
|
||||
@@ -1640,6 +1782,8 @@ radeon/verde_rlc.bin kernel/drivers/gpu/drm/radeon/radeon.ko
|
||||
radeon/VERDE_rlc.bin kernel/drivers/gpu/drm/radeon/radeon.ko
|
||||
radeon/verde_smc.bin kernel/drivers/gpu/drm/radeon/radeon.ko
|
||||
radeon/VERDE_smc.bin kernel/drivers/gpu/drm/radeon/radeon.ko
|
||||
regulatory.db kernel/net/wireless/cfg80211.ko
|
||||
regulatory.db.p7s kernel/net/wireless/cfg80211.ko
|
||||
renesas_usb_fw.mem kernel/drivers/usb/host/xhci-pci.ko
|
||||
riptide.hex kernel/sound/pci/riptide/snd-riptide.ko
|
||||
rp2.fw kernel/drivers/tty/serial/rp2.ko
|
||||
@@ -1673,6 +1817,10 @@ rtl_bt/rtl8822b_config.bin kernel/drivers/bluetooth/btrtl.ko
|
||||
rtl_bt/rtl8822b_fw.bin kernel/drivers/bluetooth/btrtl.ko
|
||||
rtl_bt/rtl8852au_config.bin kernel/drivers/bluetooth/btrtl.ko
|
||||
rtl_bt/rtl8852au_fw.bin kernel/drivers/bluetooth/btrtl.ko
|
||||
rtl_bt/rtl8852bu_config.bin kernel/drivers/bluetooth/btrtl.ko
|
||||
rtl_bt/rtl8852bu_fw.bin kernel/drivers/bluetooth/btrtl.ko
|
||||
rtl_bt/rtl8852cu_config.bin kernel/drivers/bluetooth/btrtl.ko
|
||||
rtl_bt/rtl8852cu_fw.bin kernel/drivers/bluetooth/btrtl.ko
|
||||
rtl_nic/rtl8105e-1.fw kernel/drivers/net/ethernet/realtek/r8169.ko
|
||||
rtl_nic/rtl8106e-1.fw kernel/drivers/net/ethernet/realtek/r8169.ko
|
||||
rtl_nic/rtl8106e-2.fw kernel/drivers/net/ethernet/realtek/r8169.ko
|
||||
@@ -1703,7 +1851,7 @@ rtl_nic/rtl8402-1.fw kernel/drivers/net/ethernet/realtek/r8169.ko
|
||||
rtl_nic/rtl8411-1.fw kernel/drivers/net/ethernet/realtek/r8169.ko
|
||||
rtl_nic/rtl8411-2.fw kernel/drivers/net/ethernet/realtek/r8169.ko
|
||||
rtlwifi/rtl8188efw.bin kernel/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/rtl8188ee.ko
|
||||
rtlwifi/rtl8188eufw.bin kernel/drivers/staging/rtl8188eu/r8188eu.ko
|
||||
rtlwifi/rtl8188eufw.bin kernel/drivers/staging/r8188eu/r8188eu.ko
|
||||
rtlwifi/rtl8192cfw.bin kernel/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/rtl8192ce.ko
|
||||
rtlwifi/rtl8192cfwU_B.bin kernel/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/rtl8192ce.ko
|
||||
rtlwifi/rtl8192cfwU.bin kernel/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/rtl8192ce.ko
|
||||
@@ -1734,7 +1882,8 @@ 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
|
||||
rtw89/rtw8852a_fw.bin kernel/drivers/net/wireless/realtek/rtw89/rtw89_8852a.ko
|
||||
rtw89/rtw8852c_fw.bin kernel/drivers/net/wireless/realtek/rtw89/rtw89_8852c.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
|
||||
@@ -1853,9 +2002,9 @@ wil6210_sparrow_plus.fw kernel/drivers/net/wireless/ath/wil6210/wil6210.ko
|
||||
wil6436.brd kernel/drivers/net/wireless/ath/wil6210/wil6210.ko
|
||||
wil6436.fw kernel/drivers/net/wireless/ath/wil6210/wil6210.ko
|
||||
wlan/prima/WCNSS_qcom_wlan_nv.bin kernel/drivers/net/wireless/ath/wcn36xx/wcn36xx.ko
|
||||
xc3028L-v36.fw kernel/drivers/media/tuners/tuner-xc2028.ko
|
||||
xc3028L-v36.fw kernel/drivers/media/tuners/xc2028.ko
|
||||
xc3028-v27.fw kernel/drivers/media/pci/cx18/cx18.ko
|
||||
xc3028-v27.fw kernel/drivers/media/tuners/tuner-xc2028.ko
|
||||
xc3028-v27.fw kernel/drivers/media/tuners/xc2028.ko
|
||||
yam/1200.bin kernel/drivers/net/hamradio/yam.ko
|
||||
yam/9600.bin kernel/drivers/net/hamradio/yam.ko
|
||||
yamaha/ds1_ctrl.fw kernel/sound/pci/ymfpci/snd-ymfpci.ko
|
||||
|
||||
@@ -21,10 +21,10 @@ 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 a72b154de7b0..4dd111086466 100755
|
||||
index ca40a5258c87..6ae930a732f0 100755
|
||||
--- a/scripts/mkcompile_h
|
||||
+++ b/scripts/mkcompile_h
|
||||
@@ -24,10 +24,14 @@ else
|
||||
@@ -23,10 +23,14 @@ else
|
||||
VERSION=$KBUILD_BUILD_VERSION
|
||||
fi
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
1 file changed, 1 insertion(+), 4 deletions(-)
|
||||
|
||||
diff --git a/net/bridge/br_stp_if.c b/net/bridge/br_stp_if.c
|
||||
index ba55851fe132..82675e1ecfb8 100644
|
||||
index 75204d36d7f9..1fb5ff73ec1e 100644
|
||||
--- a/net/bridge/br_stp_if.c
|
||||
+++ b/net/bridge/br_stp_if.c
|
||||
@@ -265,10 +265,7 @@ bool br_stp_recalculate_bridge_id(struct net_bridge *br)
|
||||
|
||||
@@ -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 550f341daf99..478530b48cf1 100644
|
||||
index 364f1d6f4be4..02df36670b1f 100644
|
||||
--- a/Documentation/admin-guide/kernel-parameters.txt
|
||||
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||
@@ -3814,6 +3814,15 @@
|
||||
@@ -4098,6 +4098,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 550f341daf99..478530b48cf1 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 444ba11f3e79..5843ba2cad8e 100644
|
||||
index acf45f1f7264..7ab01acebf99 100644
|
||||
--- a/drivers/pci/quirks.c
|
||||
+++ b/drivers/pci/quirks.c
|
||||
@@ -193,6 +193,106 @@ static int __init pci_apply_final_quirks(void)
|
||||
@@ -194,6 +194,106 @@ static int __init pci_apply_final_quirks(void)
|
||||
}
|
||||
fs_initcall_sync(pci_apply_final_quirks);
|
||||
|
||||
@@ -185,7 +185,7 @@ index 444ba11f3e79..5843ba2cad8e 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
|
||||
@@ -4876,6 +4976,8 @@ static const struct pci_dev_acs_enabled {
|
||||
@@ -4928,6 +5028,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 },
|
||||
|
||||
@@ -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 b86d4bce9793..946643fa1aa1 100644
|
||||
index 27712d129f61..b609a08f1f52 100644
|
||||
--- a/virt/kvm/kvm_main.c
|
||||
+++ b/virt/kvm/kvm_main.c
|
||||
@@ -78,7 +78,7 @@ module_param(halt_poll_ns, uint, 0644);
|
||||
@@ -79,7 +79,7 @@ module_param(halt_poll_ns, uint, 0644);
|
||||
EXPORT_SYMBOL_GPL(halt_poll_ns);
|
||||
|
||||
/* Default doubles per-vcpu halt_poll_ns. */
|
||||
|
||||
@@ -10,15 +10,15 @@ 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 7bac7947d8b8..4196ce468b10 100644
|
||||
index 887e44dc2f2e..08578ddbb60e 100644
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -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);
|
||||
warning_time = jiffies;
|
||||
}
|
||||
@@ -10272,7 +10272,7 @@ static struct net_device *netdev_wait_allrefs_any(struct list_head *list)
|
||||
if (time_after(jiffies, warning_time +
|
||||
READ_ONCE(netdev_unregister_timeout_secs) * HZ)) {
|
||||
list_for_each_entry(dev, list, todo_list) {
|
||||
- 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, netdev_refcnt_read(dev));
|
||||
ref_tracker_dir_print(&dev->refcnt_tracker, 10);
|
||||
}
|
||||
|
||||
@@ -1,105 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
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 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 | 52 +++++----------------------------------------
|
||||
1 file changed, 5 insertions(+), 47 deletions(-)
|
||||
|
||||
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
|
||||
index 59ef93f1d953..b38a345c5df6 100644
|
||||
--- a/drivers/pci/probe.c
|
||||
+++ b/drivers/pci/probe.c
|
||||
@@ -19,7 +19,6 @@
|
||||
#include <linux/hypervisor.h>
|
||||
#include <linux/irqdomain.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
-#include <linux/list_sort.h>
|
||||
#include "pci.h"
|
||||
|
||||
#define CARDBUS_LATENCY_TIMER 176 /* secondary latency timer */
|
||||
@@ -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, const struct list_head *a,
|
||||
- const struct list_head *b)
|
||||
-{
|
||||
- struct resource_entry *entry1, *entry2;
|
||||
-
|
||||
- entry1 = container_of(a, struct resource_entry, node);
|
||||
- entry2 = container_of(b, struct resource_entry, node);
|
||||
-
|
||||
- if (entry1->res->flags != entry2->res->flags)
|
||||
- return entry1->res->flags > entry2->res->flags;
|
||||
-
|
||||
- if (entry1->offset != entry2->offset)
|
||||
- return entry1->offset > entry2->offset;
|
||||
-
|
||||
- return entry1->res->start > entry2->res->start;
|
||||
-}
|
||||
-
|
||||
static int pci_register_host_bridge(struct pci_host_bridge *bridge)
|
||||
{
|
||||
struct device *parent = bridge->dev.parent;
|
||||
- struct resource_entry *window, *next, *n;
|
||||
+ struct resource_entry *window, *n;
|
||||
struct pci_bus *bus, *b;
|
||||
- resource_size_t offset, next_offset;
|
||||
+ resource_size_t offset;
|
||||
LIST_HEAD(resources);
|
||||
- struct resource *res, *next_res;
|
||||
+ struct resource *res;
|
||||
char addr[64], *fmt;
|
||||
const char *name;
|
||||
int err;
|
||||
@@ -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");
|
||||
|
||||
- /* Sort and coalesce contiguous windows */
|
||||
- list_sort(NULL, &resources, res_cmp);
|
||||
- resource_list_for_each_entry_safe(window, n, &resources) {
|
||||
- if (list_is_last(&window->node, &resources))
|
||||
- break;
|
||||
-
|
||||
- next = list_next_entry(window, node);
|
||||
- offset = window->offset;
|
||||
- res = window->res;
|
||||
- next_offset = next->offset;
|
||||
- next_res = next->res;
|
||||
-
|
||||
- if (res->flags != next_res->flags || offset != next_offset)
|
||||
- continue;
|
||||
-
|
||||
- if (res->end + 1 == next_res->start) {
|
||||
- next_res->start = res->start;
|
||||
- res->flags = res->start = res->end = 0;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
/* Add initial resources to the bus */
|
||||
resource_list_for_each_entry_safe(window, n, &resources) {
|
||||
- offset = window->offset;
|
||||
- res = window->res;
|
||||
- if (!res->end)
|
||||
- continue;
|
||||
-
|
||||
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);
|
||||
+3
-3
@@ -14,11 +14,11 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
|
||||
index 25dc20175bba..7ff51a3f65e6 100644
|
||||
index 8c31c98f0bfc..470b78cd0134 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")
|
||||
@@ -365,7 +365,7 @@ config PAHOLE_HAS_BTF_TAG
|
||||
these attributes, so make the config depend on CC_IS_CLANG.
|
||||
|
||||
config DEBUG_INFO_BTF_MODULES
|
||||
- def_bool y
|
||||
@@ -1,113 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Kai-Heng Feng <kai.heng.feng@canonical.com>
|
||||
Date: Tue, 13 Jul 2021 20:50:07 +0800
|
||||
Subject: [PATCH] PCI: Reinstate "PCI: Coalesce host bridge contiguous
|
||||
apertures"
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Built-in graphics on HP EliteDesk 805 G6 doesn't work because graphics
|
||||
can't get the BAR it needs:
|
||||
pci_bus 0000:00: root bus resource [mem 0x10020200000-0x100303fffff window]
|
||||
pci_bus 0000:00: root bus resource [mem 0x10030400000-0x100401fffff window]
|
||||
|
||||
pci 0000:00:08.1: bridge window [mem 0xd2000000-0xd23fffff]
|
||||
pci 0000:00:08.1: bridge window [mem 0x10030000000-0x100401fffff 64bit pref]
|
||||
pci 0000:00:08.1: can't claim BAR 15 [mem 0x10030000000-0x100401fffff 64bit pref]: no compatible bridge window
|
||||
pci 0000:00:08.1: [mem 0x10030000000-0x100401fffff 64bit pref] clipped to [mem 0x10030000000-0x100303fffff 64bit pref]
|
||||
pci 0000:00:08.1: bridge window [mem 0x10030000000-0x100303fffff 64bit pref]
|
||||
pci 0000:07:00.0: can't claim BAR 0 [mem 0x10030000000-0x1003fffffff 64bit pref]: no compatible bridge window
|
||||
pci 0000:07:00.0: can't claim BAR 2 [mem 0x10040000000-0x100401fffff 64bit pref]: no compatible bridge window
|
||||
|
||||
However, the root bus has two contiguous apertures that can contain the
|
||||
child resource requested.
|
||||
|
||||
Coalesce contiguous apertures so we can allocate from the entire contiguous
|
||||
region.
|
||||
|
||||
This is the second take of commit 65db04053efe ("PCI: Coalesce host
|
||||
bridge contiguous apertures"). The original approach sorts the apertures
|
||||
by address, but that makes NVMe stop working on QEMU ppc:sam460ex:
|
||||
PCI host bridge to bus 0002:00
|
||||
pci_bus 0002:00: root bus resource [io 0x0000-0xffff]
|
||||
pci_bus 0002:00: root bus resource [mem 0xd80000000-0xdffffffff] (bus address [0x80000000-0xffffffff])
|
||||
pci_bus 0002:00: root bus resource [mem 0xc0ee00000-0xc0eefffff] (bus address [0x00000000-0x000fffff])
|
||||
|
||||
After the offending commit:
|
||||
PCI host bridge to bus 0002:00
|
||||
pci_bus 0002:00: root bus resource [io 0x0000-0xffff]
|
||||
pci_bus 0002:00: root bus resource [mem 0xc0ee00000-0xc0eefffff] (bus address [0x00000000-0x000fffff])
|
||||
pci_bus 0002:00: root bus resource [mem 0xd80000000-0xdffffffff] (bus address [0x80000000-0xffffffff])
|
||||
|
||||
Since the apertures on HP EliteDesk 805 G6 are already in ascending
|
||||
order, doing a precautious sorting is not necessary.
|
||||
|
||||
Remove the sorting part to avoid the regression on ppc:sam460ex.
|
||||
|
||||
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=212013
|
||||
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 | 33 ++++++++++++++++++++++++++++-----
|
||||
1 file changed, 28 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
|
||||
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)
|
||||
static int pci_register_host_bridge(struct pci_host_bridge *bridge)
|
||||
{
|
||||
struct device *parent = bridge->dev.parent;
|
||||
- struct resource_entry *window, *n;
|
||||
+ struct resource_entry *window, *next, *n;
|
||||
struct pci_bus *bus, *b;
|
||||
- resource_size_t offset;
|
||||
+ resource_size_t offset, next_offset;
|
||||
LIST_HEAD(resources);
|
||||
- struct resource *res;
|
||||
+ struct resource *res, *next_res;
|
||||
char addr[64], *fmt;
|
||||
const char *name;
|
||||
int err;
|
||||
@@ -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");
|
||||
|
||||
+ /* Coalesce contiguous windows */
|
||||
+ resource_list_for_each_entry_safe(window, n, &resources) {
|
||||
+ if (list_is_last(&window->node, &resources))
|
||||
+ break;
|
||||
+
|
||||
+ next = list_next_entry(window, node);
|
||||
+ offset = window->offset;
|
||||
+ res = window->res;
|
||||
+ next_offset = next->offset;
|
||||
+ next_res = next->res;
|
||||
+
|
||||
+ if (res->flags != next_res->flags || offset != next_offset)
|
||||
+ continue;
|
||||
+
|
||||
+ if (res->end + 1 == next_res->start) {
|
||||
+ next_res->start = res->start;
|
||||
+ res->flags = res->start = res->end = 0;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/* Add initial resources to the bus */
|
||||
resource_list_for_each_entry_safe(window, n, &resources) {
|
||||
+ offset = window->offset;
|
||||
+ res = window->res;
|
||||
+ if (!res->end)
|
||||
+ continue;
|
||||
+
|
||||
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);
|
||||
@@ -0,0 +1,31 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
Date: Sat, 12 Mar 2022 16:19:10 +0100
|
||||
Subject: [PATCH] Ubuntu: remove leftover reference to ubuntu/hio driver
|
||||
|
||||
A single reference to the hio driver was forgotten when it was removed
|
||||
recently. While this reference is not a problem for the build itself, it
|
||||
breaks the __clean target from 'scripts/Makefile.clean' here, as make
|
||||
cannot enter the "ubuntu/hio" folder for cleaning due to ENOENT.
|
||||
|
||||
Fixes: 4ea6dd9afa0a0d ("UBUNTU: Remove ubuntu/hio driver")
|
||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
---
|
||||
ubuntu/Makefile | 4 ----
|
||||
1 file changed, 4 deletions(-)
|
||||
|
||||
diff --git a/ubuntu/Makefile b/ubuntu/Makefile
|
||||
index 27fa95ba242a..3bfc4494c069 100644
|
||||
--- a/ubuntu/Makefile
|
||||
+++ b/ubuntu/Makefile
|
||||
@@ -15,10 +15,6 @@
|
||||
##
|
||||
##
|
||||
##
|
||||
-obj-$(CONFIG_HIO) += hio/
|
||||
-##
|
||||
-##
|
||||
-##
|
||||
obj-$(CONFIG_UBUNTU_HOST) += ubuntu-host/
|
||||
##
|
||||
##
|
||||
@@ -0,0 +1,53 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Maxim Levitsky <mlevitsk@redhat.com>
|
||||
Date: Wed, 3 Aug 2022 18:49:59 +0300
|
||||
Subject: [PATCH] bug: introduce ASSERT_STRUCT_OFFSET
|
||||
|
||||
ASSERT_STRUCT_OFFSET allows to assert during the build of
|
||||
the kernel that a field in a struct have an expected offset.
|
||||
|
||||
KVM used to have such macro, but there is almost nothing KVM specific
|
||||
in it so move it to build_bug.h, so that it can be used in other
|
||||
places in KVM.
|
||||
|
||||
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
|
||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
---
|
||||
arch/x86/kvm/vmx/vmcs12.h | 5 ++---
|
||||
include/linux/build_bug.h | 9 +++++++++
|
||||
2 files changed, 11 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kvm/vmx/vmcs12.h b/arch/x86/kvm/vmx/vmcs12.h
|
||||
index 746129ddd5ae..01936013428b 100644
|
||||
--- a/arch/x86/kvm/vmx/vmcs12.h
|
||||
+++ b/arch/x86/kvm/vmx/vmcs12.h
|
||||
@@ -208,9 +208,8 @@ struct __packed vmcs12 {
|
||||
/*
|
||||
* For save/restore compatibility, the vmcs12 field offsets must not change.
|
||||
*/
|
||||
-#define CHECK_OFFSET(field, loc) \
|
||||
- BUILD_BUG_ON_MSG(offsetof(struct vmcs12, field) != (loc), \
|
||||
- "Offset of " #field " in struct vmcs12 has changed.")
|
||||
+#define CHECK_OFFSET(field, loc) \
|
||||
+ ASSERT_STRUCT_OFFSET(struct vmcs12, field, loc)
|
||||
|
||||
static inline void vmx_check_vmcs12_offsets(void)
|
||||
{
|
||||
diff --git a/include/linux/build_bug.h b/include/linux/build_bug.h
|
||||
index e3a0be2c90ad..3aa3640f8c18 100644
|
||||
--- a/include/linux/build_bug.h
|
||||
+++ b/include/linux/build_bug.h
|
||||
@@ -77,4 +77,13 @@
|
||||
#define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr)
|
||||
#define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
|
||||
|
||||
+
|
||||
+/*
|
||||
+ * Compile time check that field has an expected offset
|
||||
+ */
|
||||
+#define ASSERT_STRUCT_OFFSET(type, field, expected_offset) \
|
||||
+ BUILD_BUG_ON_MSG(offsetof(type, field) != (expected_offset), \
|
||||
+ "Offset of " #field " in " #type " has changed.")
|
||||
+
|
||||
+
|
||||
#endif /* _LINUX_BUILD_BUG_H */
|
||||
@@ -1,418 +0,0 @@
|
||||
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,34 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Maxim Levitsky <mlevitsk@redhat.com>
|
||||
Date: Wed, 3 Aug 2022 18:50:02 +0300
|
||||
Subject: [PATCH] KVM: x86: emulator: update the emulation mode after rsm
|
||||
|
||||
This ensures that RIP will be correctly written back,
|
||||
because the RSM instruction can switch the CPU mode from
|
||||
32 bit (or less) to 64 bit.
|
||||
|
||||
This fixes a guest crash in case the #SMI is received
|
||||
while the guest runs a code from an address > 32 bit.
|
||||
|
||||
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
|
||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
---
|
||||
arch/x86/kvm/emulate.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
||||
index 533203fc424f..c19e782ecc54 100644
|
||||
--- a/arch/x86/kvm/emulate.c
|
||||
+++ b/arch/x86/kvm/emulate.c
|
||||
@@ -2654,6 +2654,11 @@ static int em_rsm(struct x86_emulate_ctxt *ctxt)
|
||||
if (ret != X86EMUL_CONTINUE)
|
||||
goto emulate_shutdown;
|
||||
|
||||
+
|
||||
+ ret = emulator_recalc_and_set_mode(ctxt);
|
||||
+ if (ret != X86EMUL_CONTINUE)
|
||||
+ goto emulate_shutdown;
|
||||
+
|
||||
/*
|
||||
* Note, the ctxt->ops callbacks are responsible for handling side
|
||||
* effects when writing MSRs and CRs, e.g. MMU context resets, CPUID
|
||||
@@ -1,90 +0,0 @@
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,280 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Maxim Levitsky <mlevitsk@redhat.com>
|
||||
Date: Wed, 3 Aug 2022 18:50:05 +0300
|
||||
Subject: [PATCH] KVM: x86: emulator/smm: add structs for KVM's smram layout
|
||||
|
||||
Those structs will be used to read/write the smram state image.
|
||||
|
||||
Also document the differences between KVM's SMRAM layout and SMRAM
|
||||
layout that is used by real Intel/AMD cpus.
|
||||
|
||||
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
|
||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
---
|
||||
arch/x86/kvm/emulate.c | 6 +
|
||||
arch/x86/kvm/kvm_emulate.h | 218 +++++++++++++++++++++++++++++++++++++
|
||||
arch/x86/kvm/x86.c | 1 +
|
||||
3 files changed, 225 insertions(+)
|
||||
|
||||
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
||||
index c19e782ecc54..48173cb63f7a 100644
|
||||
--- a/arch/x86/kvm/emulate.c
|
||||
+++ b/arch/x86/kvm/emulate.c
|
||||
@@ -5856,3 +5856,9 @@ bool emulator_can_use_gpa(struct x86_emulate_ctxt *ctxt)
|
||||
|
||||
return true;
|
||||
}
|
||||
+
|
||||
+void __init kvm_emulator_init(void)
|
||||
+{
|
||||
+ __check_smram32_offsets();
|
||||
+ __check_smram64_offsets();
|
||||
+}
|
||||
diff --git a/arch/x86/kvm/kvm_emulate.h b/arch/x86/kvm/kvm_emulate.h
|
||||
index 8dff25d267b7..0eb13204bbc2 100644
|
||||
--- a/arch/x86/kvm/kvm_emulate.h
|
||||
+++ b/arch/x86/kvm/kvm_emulate.h
|
||||
@@ -13,6 +13,7 @@
|
||||
#define _ASM_X86_KVM_X86_EMULATE_H
|
||||
|
||||
#include <asm/desc_defs.h>
|
||||
+#include <linux/build_bug.h>
|
||||
#include "fpu.h"
|
||||
|
||||
struct x86_emulate_ctxt;
|
||||
@@ -481,6 +482,223 @@ enum x86_intercept {
|
||||
nr_x86_intercepts
|
||||
};
|
||||
|
||||
+
|
||||
+/* 32 bit KVM's emulated SMM layout. Loosely based on Intel's layout */
|
||||
+
|
||||
+struct kvm_smm_seg_state_32 {
|
||||
+ u32 flags;
|
||||
+ u32 limit;
|
||||
+ u32 base;
|
||||
+} __packed;
|
||||
+
|
||||
+struct kvm_smram_state_32 {
|
||||
+ u32 reserved1[62];
|
||||
+ u32 smbase;
|
||||
+ u32 smm_revision;
|
||||
+ u32 reserved2[5];
|
||||
+ u32 cr4; /* CR4 is not present in Intel/AMD SMRAM image */
|
||||
+ u32 reserved3[5];
|
||||
+
|
||||
+ /*
|
||||
+ * Segment state is not present/documented in the Intel/AMD SMRAM image
|
||||
+ * Instead this area on Intel/AMD contains IO/HLT restart flags.
|
||||
+ */
|
||||
+ struct kvm_smm_seg_state_32 ds;
|
||||
+ struct kvm_smm_seg_state_32 fs;
|
||||
+ struct kvm_smm_seg_state_32 gs;
|
||||
+ struct kvm_smm_seg_state_32 idtr; /* IDTR has only base and limit */
|
||||
+ struct kvm_smm_seg_state_32 tr;
|
||||
+ u32 reserved;
|
||||
+ struct kvm_smm_seg_state_32 gdtr; /* GDTR has only base and limit */
|
||||
+ struct kvm_smm_seg_state_32 ldtr;
|
||||
+ struct kvm_smm_seg_state_32 es;
|
||||
+ struct kvm_smm_seg_state_32 cs;
|
||||
+ struct kvm_smm_seg_state_32 ss;
|
||||
+
|
||||
+ u32 es_sel;
|
||||
+ u32 cs_sel;
|
||||
+ u32 ss_sel;
|
||||
+ u32 ds_sel;
|
||||
+ u32 fs_sel;
|
||||
+ u32 gs_sel;
|
||||
+ u32 ldtr_sel;
|
||||
+ u32 tr_sel;
|
||||
+
|
||||
+ u32 dr7;
|
||||
+ u32 dr6;
|
||||
+ u32 gprs[8]; /* GPRS in the "natural" X86 order (EAX/ECX/EDX.../EDI) */
|
||||
+ u32 eip;
|
||||
+ u32 eflags;
|
||||
+ u32 cr3;
|
||||
+ u32 cr0;
|
||||
+} __packed;
|
||||
+
|
||||
+
|
||||
+static inline void __check_smram32_offsets(void)
|
||||
+{
|
||||
+#define __CHECK_SMRAM32_OFFSET(field, offset) \
|
||||
+ ASSERT_STRUCT_OFFSET(struct kvm_smram_state_32, field, offset - 0xFE00)
|
||||
+
|
||||
+ __CHECK_SMRAM32_OFFSET(reserved1, 0xFE00);
|
||||
+ __CHECK_SMRAM32_OFFSET(smbase, 0xFEF8);
|
||||
+ __CHECK_SMRAM32_OFFSET(smm_revision, 0xFEFC);
|
||||
+ __CHECK_SMRAM32_OFFSET(reserved2, 0xFF00);
|
||||
+ __CHECK_SMRAM32_OFFSET(cr4, 0xFF14);
|
||||
+ __CHECK_SMRAM32_OFFSET(reserved3, 0xFF18);
|
||||
+ __CHECK_SMRAM32_OFFSET(ds, 0xFF2C);
|
||||
+ __CHECK_SMRAM32_OFFSET(fs, 0xFF38);
|
||||
+ __CHECK_SMRAM32_OFFSET(gs, 0xFF44);
|
||||
+ __CHECK_SMRAM32_OFFSET(idtr, 0xFF50);
|
||||
+ __CHECK_SMRAM32_OFFSET(tr, 0xFF5C);
|
||||
+ __CHECK_SMRAM32_OFFSET(gdtr, 0xFF6C);
|
||||
+ __CHECK_SMRAM32_OFFSET(ldtr, 0xFF78);
|
||||
+ __CHECK_SMRAM32_OFFSET(es, 0xFF84);
|
||||
+ __CHECK_SMRAM32_OFFSET(cs, 0xFF90);
|
||||
+ __CHECK_SMRAM32_OFFSET(ss, 0xFF9C);
|
||||
+ __CHECK_SMRAM32_OFFSET(es_sel, 0xFFA8);
|
||||
+ __CHECK_SMRAM32_OFFSET(cs_sel, 0xFFAC);
|
||||
+ __CHECK_SMRAM32_OFFSET(ss_sel, 0xFFB0);
|
||||
+ __CHECK_SMRAM32_OFFSET(ds_sel, 0xFFB4);
|
||||
+ __CHECK_SMRAM32_OFFSET(fs_sel, 0xFFB8);
|
||||
+ __CHECK_SMRAM32_OFFSET(gs_sel, 0xFFBC);
|
||||
+ __CHECK_SMRAM32_OFFSET(ldtr_sel, 0xFFC0);
|
||||
+ __CHECK_SMRAM32_OFFSET(tr_sel, 0xFFC4);
|
||||
+ __CHECK_SMRAM32_OFFSET(dr7, 0xFFC8);
|
||||
+ __CHECK_SMRAM32_OFFSET(dr6, 0xFFCC);
|
||||
+ __CHECK_SMRAM32_OFFSET(gprs, 0xFFD0);
|
||||
+ __CHECK_SMRAM32_OFFSET(eip, 0xFFF0);
|
||||
+ __CHECK_SMRAM32_OFFSET(eflags, 0xFFF4);
|
||||
+ __CHECK_SMRAM32_OFFSET(cr3, 0xFFF8);
|
||||
+ __CHECK_SMRAM32_OFFSET(cr0, 0xFFFC);
|
||||
+#undef __CHECK_SMRAM32_OFFSET
|
||||
+}
|
||||
+
|
||||
+
|
||||
+/* 64 bit KVM's emulated SMM layout. Based on AMD64 layout */
|
||||
+
|
||||
+struct kvm_smm_seg_state_64 {
|
||||
+ u16 selector;
|
||||
+ u16 attributes;
|
||||
+ u32 limit;
|
||||
+ u64 base;
|
||||
+};
|
||||
+
|
||||
+struct kvm_smram_state_64 {
|
||||
+
|
||||
+ struct kvm_smm_seg_state_64 es;
|
||||
+ struct kvm_smm_seg_state_64 cs;
|
||||
+ struct kvm_smm_seg_state_64 ss;
|
||||
+ struct kvm_smm_seg_state_64 ds;
|
||||
+ struct kvm_smm_seg_state_64 fs;
|
||||
+ struct kvm_smm_seg_state_64 gs;
|
||||
+ struct kvm_smm_seg_state_64 gdtr; /* GDTR has only base and limit*/
|
||||
+ struct kvm_smm_seg_state_64 ldtr;
|
||||
+ struct kvm_smm_seg_state_64 idtr; /* IDTR has only base and limit*/
|
||||
+ struct kvm_smm_seg_state_64 tr;
|
||||
+
|
||||
+ /* I/O restart and auto halt restart are not implemented by KVM */
|
||||
+ u64 io_restart_rip;
|
||||
+ u64 io_restart_rcx;
|
||||
+ u64 io_restart_rsi;
|
||||
+ u64 io_restart_rdi;
|
||||
+ u32 io_restart_dword;
|
||||
+ u32 reserved1;
|
||||
+ u8 io_inst_restart;
|
||||
+ u8 auto_hlt_restart;
|
||||
+ u8 reserved2[6];
|
||||
+
|
||||
+ u64 efer;
|
||||
+
|
||||
+ /*
|
||||
+ * Two fields below are implemented on AMD only, to store
|
||||
+ * SVM guest vmcb address if the #SMI was received while in the guest mode.
|
||||
+ */
|
||||
+ u64 svm_guest_flag;
|
||||
+ u64 svm_guest_vmcb_gpa;
|
||||
+ u64 svm_guest_virtual_int; /* unknown purpose, not implemented */
|
||||
+
|
||||
+ u32 reserved3[3];
|
||||
+ u32 smm_revison;
|
||||
+ u32 smbase;
|
||||
+ u32 reserved4[5];
|
||||
+
|
||||
+ /* ssp and svm_* fields below are not implemented by KVM */
|
||||
+ u64 ssp;
|
||||
+ u64 svm_guest_pat;
|
||||
+ u64 svm_host_efer;
|
||||
+ u64 svm_host_cr4;
|
||||
+ u64 svm_host_cr3;
|
||||
+ u64 svm_host_cr0;
|
||||
+
|
||||
+ u64 cr4;
|
||||
+ u64 cr3;
|
||||
+ u64 cr0;
|
||||
+ u64 dr7;
|
||||
+ u64 dr6;
|
||||
+ u64 rflags;
|
||||
+ u64 rip;
|
||||
+ u64 gprs[16]; /* GPRS in a reversed "natural" X86 order (R15/R14/../RCX/RAX.) */
|
||||
+};
|
||||
+
|
||||
+
|
||||
+static inline void __check_smram64_offsets(void)
|
||||
+{
|
||||
+#define __CHECK_SMRAM64_OFFSET(field, offset) \
|
||||
+ ASSERT_STRUCT_OFFSET(struct kvm_smram_state_64, field, offset - 0xFE00)
|
||||
+
|
||||
+ __CHECK_SMRAM64_OFFSET(es, 0xFE00);
|
||||
+ __CHECK_SMRAM64_OFFSET(cs, 0xFE10);
|
||||
+ __CHECK_SMRAM64_OFFSET(ss, 0xFE20);
|
||||
+ __CHECK_SMRAM64_OFFSET(ds, 0xFE30);
|
||||
+ __CHECK_SMRAM64_OFFSET(fs, 0xFE40);
|
||||
+ __CHECK_SMRAM64_OFFSET(gs, 0xFE50);
|
||||
+ __CHECK_SMRAM64_OFFSET(gdtr, 0xFE60);
|
||||
+ __CHECK_SMRAM64_OFFSET(ldtr, 0xFE70);
|
||||
+ __CHECK_SMRAM64_OFFSET(idtr, 0xFE80);
|
||||
+ __CHECK_SMRAM64_OFFSET(tr, 0xFE90);
|
||||
+ __CHECK_SMRAM64_OFFSET(io_restart_rip, 0xFEA0);
|
||||
+ __CHECK_SMRAM64_OFFSET(io_restart_rcx, 0xFEA8);
|
||||
+ __CHECK_SMRAM64_OFFSET(io_restart_rsi, 0xFEB0);
|
||||
+ __CHECK_SMRAM64_OFFSET(io_restart_rdi, 0xFEB8);
|
||||
+ __CHECK_SMRAM64_OFFSET(io_restart_dword, 0xFEC0);
|
||||
+ __CHECK_SMRAM64_OFFSET(reserved1, 0xFEC4);
|
||||
+ __CHECK_SMRAM64_OFFSET(io_inst_restart, 0xFEC8);
|
||||
+ __CHECK_SMRAM64_OFFSET(auto_hlt_restart, 0xFEC9);
|
||||
+ __CHECK_SMRAM64_OFFSET(reserved2, 0xFECA);
|
||||
+ __CHECK_SMRAM64_OFFSET(efer, 0xFED0);
|
||||
+ __CHECK_SMRAM64_OFFSET(svm_guest_flag, 0xFED8);
|
||||
+ __CHECK_SMRAM64_OFFSET(svm_guest_vmcb_gpa, 0xFEE0);
|
||||
+ __CHECK_SMRAM64_OFFSET(svm_guest_virtual_int, 0xFEE8);
|
||||
+ __CHECK_SMRAM64_OFFSET(reserved3, 0xFEF0);
|
||||
+ __CHECK_SMRAM64_OFFSET(smm_revison, 0xFEFC);
|
||||
+ __CHECK_SMRAM64_OFFSET(smbase, 0xFF00);
|
||||
+ __CHECK_SMRAM64_OFFSET(reserved4, 0xFF04);
|
||||
+ __CHECK_SMRAM64_OFFSET(ssp, 0xFF18);
|
||||
+ __CHECK_SMRAM64_OFFSET(svm_guest_pat, 0xFF20);
|
||||
+ __CHECK_SMRAM64_OFFSET(svm_host_efer, 0xFF28);
|
||||
+ __CHECK_SMRAM64_OFFSET(svm_host_cr4, 0xFF30);
|
||||
+ __CHECK_SMRAM64_OFFSET(svm_host_cr3, 0xFF38);
|
||||
+ __CHECK_SMRAM64_OFFSET(svm_host_cr0, 0xFF40);
|
||||
+ __CHECK_SMRAM64_OFFSET(cr4, 0xFF48);
|
||||
+ __CHECK_SMRAM64_OFFSET(cr3, 0xFF50);
|
||||
+ __CHECK_SMRAM64_OFFSET(cr0, 0xFF58);
|
||||
+ __CHECK_SMRAM64_OFFSET(dr7, 0xFF60);
|
||||
+ __CHECK_SMRAM64_OFFSET(dr6, 0xFF68);
|
||||
+ __CHECK_SMRAM64_OFFSET(rflags, 0xFF70);
|
||||
+ __CHECK_SMRAM64_OFFSET(rip, 0xFF78);
|
||||
+ __CHECK_SMRAM64_OFFSET(gprs, 0xFF80);
|
||||
+#undef __CHECK_SMRAM64_OFFSET
|
||||
+}
|
||||
+
|
||||
+union kvm_smram {
|
||||
+ struct kvm_smram_state_64 smram64;
|
||||
+ struct kvm_smram_state_32 smram32;
|
||||
+ u8 bytes[512];
|
||||
+};
|
||||
+
|
||||
+void __init kvm_emulator_init(void);
|
||||
+
|
||||
+
|
||||
/* Host execution mode. */
|
||||
#if defined(CONFIG_X86_32)
|
||||
#define X86EMUL_MODE_HOST X86EMUL_MODE_PROT32
|
||||
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
|
||||
index b3e72a86184e..8e6e85720242 100644
|
||||
--- a/arch/x86/kvm/x86.c
|
||||
+++ b/arch/x86/kvm/x86.c
|
||||
@@ -13273,6 +13273,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_vmgexit_msr_protocol_exit);
|
||||
static int __init kvm_x86_init(void)
|
||||
{
|
||||
kvm_mmu_x86_module_init();
|
||||
+ kvm_emulator_init();
|
||||
return 0;
|
||||
}
|
||||
module_init(kvm_x86_init);
|
||||
@@ -0,0 +1,214 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Maxim Levitsky <mlevitsk@redhat.com>
|
||||
Date: Wed, 3 Aug 2022 18:50:06 +0300
|
||||
Subject: [PATCH] KVM: x86: emulator/smm: use smram structs in the common code
|
||||
|
||||
Switch from using a raw array to 'union kvm_smram'.
|
||||
|
||||
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
|
||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
---
|
||||
arch/x86/include/asm/kvm_host.h | 5 +++--
|
||||
arch/x86/kvm/emulate.c | 12 +++++++-----
|
||||
arch/x86/kvm/kvm_emulate.h | 3 ++-
|
||||
arch/x86/kvm/svm/svm.c | 8 ++++++--
|
||||
arch/x86/kvm/vmx/vmx.c | 4 ++--
|
||||
arch/x86/kvm/x86.c | 16 ++++++++--------
|
||||
6 files changed, 28 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
|
||||
index 19c04412f6e1..cff765545738 100644
|
||||
--- a/arch/x86/include/asm/kvm_host.h
|
||||
+++ b/arch/x86/include/asm/kvm_host.h
|
||||
@@ -202,6 +202,7 @@ typedef enum exit_fastpath_completion fastpath_t;
|
||||
|
||||
struct x86_emulate_ctxt;
|
||||
struct x86_exception;
|
||||
+union kvm_smram;
|
||||
enum x86_intercept;
|
||||
enum x86_intercept_stage;
|
||||
|
||||
@@ -1552,8 +1553,8 @@ struct kvm_x86_ops {
|
||||
void (*setup_mce)(struct kvm_vcpu *vcpu);
|
||||
|
||||
int (*smi_allowed)(struct kvm_vcpu *vcpu, bool for_injection);
|
||||
- int (*enter_smm)(struct kvm_vcpu *vcpu, char *smstate);
|
||||
- int (*leave_smm)(struct kvm_vcpu *vcpu, const char *smstate);
|
||||
+ int (*enter_smm)(struct kvm_vcpu *vcpu, union kvm_smram *smram);
|
||||
+ int (*leave_smm)(struct kvm_vcpu *vcpu, const union kvm_smram *smram);
|
||||
void (*enable_smi_window)(struct kvm_vcpu *vcpu);
|
||||
|
||||
int (*mem_enc_ioctl)(struct kvm *kvm, void __user *argp);
|
||||
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
||||
index 48173cb63f7a..66fb9420842c 100644
|
||||
--- a/arch/x86/kvm/emulate.c
|
||||
+++ b/arch/x86/kvm/emulate.c
|
||||
@@ -2582,16 +2582,18 @@ static int rsm_load_state_64(struct x86_emulate_ctxt *ctxt,
|
||||
static int em_rsm(struct x86_emulate_ctxt *ctxt)
|
||||
{
|
||||
unsigned long cr0, cr4, efer;
|
||||
- char buf[512];
|
||||
+ const union kvm_smram smram;
|
||||
u64 smbase;
|
||||
int ret;
|
||||
|
||||
+ BUILD_BUG_ON(sizeof(smram) != 512);
|
||||
+
|
||||
if ((ctxt->ops->get_hflags(ctxt) & X86EMUL_SMM_MASK) == 0)
|
||||
return emulate_ud(ctxt);
|
||||
|
||||
smbase = ctxt->ops->get_smbase(ctxt);
|
||||
|
||||
- ret = ctxt->ops->read_phys(ctxt, smbase + 0xfe00, buf, sizeof(buf));
|
||||
+ ret = ctxt->ops->read_phys(ctxt, smbase + 0xfe00, (void *)&smram, sizeof(smram));
|
||||
if (ret != X86EMUL_CONTINUE)
|
||||
return X86EMUL_UNHANDLEABLE;
|
||||
|
||||
@@ -2641,15 +2643,15 @@ static int em_rsm(struct x86_emulate_ctxt *ctxt)
|
||||
* state (e.g. enter guest mode) before loading state from the SMM
|
||||
* state-save area.
|
||||
*/
|
||||
- if (ctxt->ops->leave_smm(ctxt, buf))
|
||||
+ if (ctxt->ops->leave_smm(ctxt, &smram))
|
||||
goto emulate_shutdown;
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
if (emulator_has_longmode(ctxt))
|
||||
- ret = rsm_load_state_64(ctxt, buf);
|
||||
+ ret = rsm_load_state_64(ctxt, (const char *)&smram);
|
||||
else
|
||||
#endif
|
||||
- ret = rsm_load_state_32(ctxt, buf);
|
||||
+ ret = rsm_load_state_32(ctxt, (const char *)&smram);
|
||||
|
||||
if (ret != X86EMUL_CONTINUE)
|
||||
goto emulate_shutdown;
|
||||
diff --git a/arch/x86/kvm/kvm_emulate.h b/arch/x86/kvm/kvm_emulate.h
|
||||
index 0eb13204bbc2..04ac0cef8b57 100644
|
||||
--- a/arch/x86/kvm/kvm_emulate.h
|
||||
+++ b/arch/x86/kvm/kvm_emulate.h
|
||||
@@ -19,6 +19,7 @@
|
||||
struct x86_emulate_ctxt;
|
||||
enum x86_intercept;
|
||||
enum x86_intercept_stage;
|
||||
+union kvm_smram;
|
||||
|
||||
struct x86_exception {
|
||||
u8 vector;
|
||||
@@ -235,7 +236,7 @@ struct x86_emulate_ops {
|
||||
|
||||
unsigned (*get_hflags)(struct x86_emulate_ctxt *ctxt);
|
||||
void (*exiting_smm)(struct x86_emulate_ctxt *ctxt);
|
||||
- int (*leave_smm)(struct x86_emulate_ctxt *ctxt, const char *smstate);
|
||||
+ int (*leave_smm)(struct x86_emulate_ctxt *ctxt, const union kvm_smram *smram);
|
||||
void (*triple_fault)(struct x86_emulate_ctxt *ctxt);
|
||||
int (*set_xcr)(struct x86_emulate_ctxt *ctxt, u32 index, u64 xcr);
|
||||
};
|
||||
diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
|
||||
index 92b30b4937fc..f7f58c4cf341 100644
|
||||
--- a/arch/x86/kvm/svm/svm.c
|
||||
+++ b/arch/x86/kvm/svm/svm.c
|
||||
@@ -4308,12 +4308,14 @@ static int svm_smi_allowed(struct kvm_vcpu *vcpu, bool for_injection)
|
||||
return 1;
|
||||
}
|
||||
|
||||
-static int svm_enter_smm(struct kvm_vcpu *vcpu, char *smstate)
|
||||
+static int svm_enter_smm(struct kvm_vcpu *vcpu, union kvm_smram *smram)
|
||||
{
|
||||
struct vcpu_svm *svm = to_svm(vcpu);
|
||||
struct kvm_host_map map_save;
|
||||
int ret;
|
||||
|
||||
+ char *smstate = (char *)smram;
|
||||
+
|
||||
if (!is_guest_mode(vcpu))
|
||||
return 0;
|
||||
|
||||
@@ -4355,7 +4357,7 @@ static int svm_enter_smm(struct kvm_vcpu *vcpu, char *smstate)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int svm_leave_smm(struct kvm_vcpu *vcpu, const char *smstate)
|
||||
+static int svm_leave_smm(struct kvm_vcpu *vcpu, const union kvm_smram *smram)
|
||||
{
|
||||
struct vcpu_svm *svm = to_svm(vcpu);
|
||||
struct kvm_host_map map, map_save;
|
||||
@@ -4363,6 +4365,8 @@ static int svm_leave_smm(struct kvm_vcpu *vcpu, const char *smstate)
|
||||
struct vmcb *vmcb12;
|
||||
int ret;
|
||||
|
||||
+ const char *smstate = (const char *)smram;
|
||||
+
|
||||
if (!guest_cpuid_has(vcpu, X86_FEATURE_LM))
|
||||
return 0;
|
||||
|
||||
diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
|
||||
index eecf8a45446d..017fe8873620 100644
|
||||
--- a/arch/x86/kvm/vmx/vmx.c
|
||||
+++ b/arch/x86/kvm/vmx/vmx.c
|
||||
@@ -7738,7 +7738,7 @@ static int vmx_smi_allowed(struct kvm_vcpu *vcpu, bool for_injection)
|
||||
return !is_smm(vcpu);
|
||||
}
|
||||
|
||||
-static int vmx_enter_smm(struct kvm_vcpu *vcpu, char *smstate)
|
||||
+static int vmx_enter_smm(struct kvm_vcpu *vcpu, union kvm_smram *smram)
|
||||
{
|
||||
struct vcpu_vmx *vmx = to_vmx(vcpu);
|
||||
|
||||
@@ -7752,7 +7752,7 @@ static int vmx_enter_smm(struct kvm_vcpu *vcpu, char *smstate)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int vmx_leave_smm(struct kvm_vcpu *vcpu, const char *smstate)
|
||||
+static int vmx_leave_smm(struct kvm_vcpu *vcpu, const union kvm_smram *smram)
|
||||
{
|
||||
struct vcpu_vmx *vmx = to_vmx(vcpu);
|
||||
int ret;
|
||||
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
|
||||
index 8e6e85720242..ebd4315080cd 100644
|
||||
--- a/arch/x86/kvm/x86.c
|
||||
+++ b/arch/x86/kvm/x86.c
|
||||
@@ -7943,9 +7943,9 @@ static void emulator_exiting_smm(struct x86_emulate_ctxt *ctxt)
|
||||
}
|
||||
|
||||
static int emulator_leave_smm(struct x86_emulate_ctxt *ctxt,
|
||||
- const char *smstate)
|
||||
+ const union kvm_smram *smram)
|
||||
{
|
||||
- return static_call(kvm_x86_leave_smm)(emul_to_vcpu(ctxt), smstate);
|
||||
+ return static_call(kvm_x86_leave_smm)(emul_to_vcpu(ctxt), smram);
|
||||
}
|
||||
|
||||
static void emulator_triple_fault(struct x86_emulate_ctxt *ctxt)
|
||||
@@ -9872,25 +9872,25 @@ static void enter_smm(struct kvm_vcpu *vcpu)
|
||||
struct kvm_segment cs, ds;
|
||||
struct desc_ptr dt;
|
||||
unsigned long cr0;
|
||||
- char buf[512];
|
||||
+ union kvm_smram smram;
|
||||
|
||||
- memset(buf, 0, 512);
|
||||
+ memset(smram.bytes, 0, sizeof(smram.bytes));
|
||||
#ifdef CONFIG_X86_64
|
||||
if (guest_cpuid_has(vcpu, X86_FEATURE_LM))
|
||||
- enter_smm_save_state_64(vcpu, buf);
|
||||
+ enter_smm_save_state_64(vcpu, (char *)&smram);
|
||||
else
|
||||
#endif
|
||||
- enter_smm_save_state_32(vcpu, buf);
|
||||
+ enter_smm_save_state_32(vcpu, (char *)&smram);
|
||||
|
||||
/*
|
||||
* Give enter_smm() a chance to make ISA-specific changes to the vCPU
|
||||
* state (e.g. leave guest mode) after we've saved the state into the
|
||||
* SMM state-save area.
|
||||
*/
|
||||
- static_call(kvm_x86_enter_smm)(vcpu, buf);
|
||||
+ static_call(kvm_x86_enter_smm)(vcpu, &smram);
|
||||
|
||||
kvm_smm_changed(vcpu, true);
|
||||
- kvm_vcpu_write_guest(vcpu, vcpu->arch.smbase + 0xfe00, buf, sizeof(buf));
|
||||
+ kvm_vcpu_write_guest(vcpu, vcpu->arch.smbase + 0xfe00, &smram, sizeof(smram));
|
||||
|
||||
if (static_call(kvm_x86_get_nmi_mask)(vcpu))
|
||||
vcpu->arch.hflags |= HF_SMM_INSIDE_NMI_MASK;
|
||||
@@ -0,0 +1,268 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Maxim Levitsky <mlevitsk@redhat.com>
|
||||
Date: Wed, 3 Aug 2022 18:50:07 +0300
|
||||
Subject: [PATCH] KVM: x86: emulator/smm: use smram struct for 32 bit smram
|
||||
load/restore
|
||||
|
||||
Use kvm_smram_state_32 struct to save/restore 32 bit SMM state
|
||||
(used when X86_FEATURE_LM is not present in the guest CPUID).
|
||||
|
||||
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
|
||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
---
|
||||
arch/x86/kvm/emulate.c | 81 +++++++++++++++---------------------------
|
||||
arch/x86/kvm/x86.c | 75 +++++++++++++++++---------------------
|
||||
2 files changed, 60 insertions(+), 96 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
||||
index 66fb9420842c..aa60533d9d29 100644
|
||||
--- a/arch/x86/kvm/emulate.c
|
||||
+++ b/arch/x86/kvm/emulate.c
|
||||
@@ -2359,25 +2359,17 @@ static void rsm_set_desc_flags(struct desc_struct *desc, u32 flags)
|
||||
desc->type = (flags >> 8) & 15;
|
||||
}
|
||||
|
||||
-static int rsm_load_seg_32(struct x86_emulate_ctxt *ctxt, const char *smstate,
|
||||
+static void rsm_load_seg_32(struct x86_emulate_ctxt *ctxt,
|
||||
+ const struct kvm_smm_seg_state_32 *state,
|
||||
+ u16 selector,
|
||||
int n)
|
||||
{
|
||||
struct desc_struct desc;
|
||||
- int offset;
|
||||
- u16 selector;
|
||||
-
|
||||
- selector = GET_SMSTATE(u32, smstate, 0x7fa8 + n * 4);
|
||||
-
|
||||
- if (n < 3)
|
||||
- offset = 0x7f84 + n * 12;
|
||||
- else
|
||||
- offset = 0x7f2c + (n - 3) * 12;
|
||||
|
||||
- set_desc_base(&desc, GET_SMSTATE(u32, smstate, offset + 8));
|
||||
- set_desc_limit(&desc, GET_SMSTATE(u32, smstate, offset + 4));
|
||||
- rsm_set_desc_flags(&desc, GET_SMSTATE(u32, smstate, offset));
|
||||
+ set_desc_base(&desc, state->base);
|
||||
+ set_desc_limit(&desc, state->limit);
|
||||
+ rsm_set_desc_flags(&desc, state->flags);
|
||||
ctxt->ops->set_segment(ctxt, selector, &desc, 0, n);
|
||||
- return X86EMUL_CONTINUE;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
@@ -2448,63 +2440,46 @@ static int rsm_enter_protected_mode(struct x86_emulate_ctxt *ctxt,
|
||||
}
|
||||
|
||||
static int rsm_load_state_32(struct x86_emulate_ctxt *ctxt,
|
||||
- const char *smstate)
|
||||
+ const struct kvm_smram_state_32 *smstate)
|
||||
{
|
||||
- struct desc_struct desc;
|
||||
struct desc_ptr dt;
|
||||
- u16 selector;
|
||||
- u32 val, cr0, cr3, cr4;
|
||||
int i;
|
||||
|
||||
- cr0 = GET_SMSTATE(u32, smstate, 0x7ffc);
|
||||
- cr3 = GET_SMSTATE(u32, smstate, 0x7ff8);
|
||||
- ctxt->eflags = GET_SMSTATE(u32, smstate, 0x7ff4) | X86_EFLAGS_FIXED;
|
||||
- ctxt->_eip = GET_SMSTATE(u32, smstate, 0x7ff0);
|
||||
+ ctxt->eflags = smstate->eflags | X86_EFLAGS_FIXED;
|
||||
+ ctxt->_eip = smstate->eip;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
- *reg_write(ctxt, i) = GET_SMSTATE(u32, smstate, 0x7fd0 + i * 4);
|
||||
-
|
||||
- val = GET_SMSTATE(u32, smstate, 0x7fcc);
|
||||
+ *reg_write(ctxt, i) = smstate->gprs[i];
|
||||
|
||||
- if (ctxt->ops->set_dr(ctxt, 6, val))
|
||||
+ if (ctxt->ops->set_dr(ctxt, 6, smstate->dr6))
|
||||
return X86EMUL_UNHANDLEABLE;
|
||||
-
|
||||
- val = GET_SMSTATE(u32, smstate, 0x7fc8);
|
||||
-
|
||||
- if (ctxt->ops->set_dr(ctxt, 7, val))
|
||||
+ if (ctxt->ops->set_dr(ctxt, 7, smstate->dr7))
|
||||
return X86EMUL_UNHANDLEABLE;
|
||||
|
||||
- selector = GET_SMSTATE(u32, smstate, 0x7fc4);
|
||||
- set_desc_base(&desc, GET_SMSTATE(u32, smstate, 0x7f64));
|
||||
- set_desc_limit(&desc, GET_SMSTATE(u32, smstate, 0x7f60));
|
||||
- rsm_set_desc_flags(&desc, GET_SMSTATE(u32, smstate, 0x7f5c));
|
||||
- ctxt->ops->set_segment(ctxt, selector, &desc, 0, VCPU_SREG_TR);
|
||||
+ rsm_load_seg_32(ctxt, &smstate->tr, smstate->tr_sel, VCPU_SREG_TR);
|
||||
+ rsm_load_seg_32(ctxt, &smstate->ldtr, smstate->ldtr_sel, VCPU_SREG_LDTR);
|
||||
|
||||
- selector = GET_SMSTATE(u32, smstate, 0x7fc0);
|
||||
- set_desc_base(&desc, GET_SMSTATE(u32, smstate, 0x7f80));
|
||||
- set_desc_limit(&desc, GET_SMSTATE(u32, smstate, 0x7f7c));
|
||||
- rsm_set_desc_flags(&desc, GET_SMSTATE(u32, smstate, 0x7f78));
|
||||
- ctxt->ops->set_segment(ctxt, selector, &desc, 0, VCPU_SREG_LDTR);
|
||||
|
||||
- dt.address = GET_SMSTATE(u32, smstate, 0x7f74);
|
||||
- dt.size = GET_SMSTATE(u32, smstate, 0x7f70);
|
||||
+ dt.address = smstate->gdtr.base;
|
||||
+ dt.size = smstate->gdtr.limit;
|
||||
ctxt->ops->set_gdt(ctxt, &dt);
|
||||
|
||||
- dt.address = GET_SMSTATE(u32, smstate, 0x7f58);
|
||||
- dt.size = GET_SMSTATE(u32, smstate, 0x7f54);
|
||||
+ dt.address = smstate->idtr.base;
|
||||
+ dt.size = smstate->idtr.limit;
|
||||
ctxt->ops->set_idt(ctxt, &dt);
|
||||
|
||||
- for (i = 0; i < 6; i++) {
|
||||
- int r = rsm_load_seg_32(ctxt, smstate, i);
|
||||
- if (r != X86EMUL_CONTINUE)
|
||||
- return r;
|
||||
- }
|
||||
+ rsm_load_seg_32(ctxt, &smstate->es, smstate->es_sel, VCPU_SREG_ES);
|
||||
+ rsm_load_seg_32(ctxt, &smstate->cs, smstate->cs_sel, VCPU_SREG_CS);
|
||||
+ rsm_load_seg_32(ctxt, &smstate->ss, smstate->ss_sel, VCPU_SREG_SS);
|
||||
|
||||
- cr4 = GET_SMSTATE(u32, smstate, 0x7f14);
|
||||
+ rsm_load_seg_32(ctxt, &smstate->ds, smstate->ds_sel, VCPU_SREG_DS);
|
||||
+ rsm_load_seg_32(ctxt, &smstate->fs, smstate->fs_sel, VCPU_SREG_FS);
|
||||
+ rsm_load_seg_32(ctxt, &smstate->gs, smstate->gs_sel, VCPU_SREG_GS);
|
||||
|
||||
- ctxt->ops->set_smbase(ctxt, GET_SMSTATE(u32, smstate, 0x7ef8));
|
||||
+ ctxt->ops->set_smbase(ctxt, smstate->smbase);
|
||||
|
||||
- return rsm_enter_protected_mode(ctxt, cr0, cr3, cr4);
|
||||
+ return rsm_enter_protected_mode(ctxt, smstate->cr0,
|
||||
+ smstate->cr3, smstate->cr4);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
@@ -2651,7 +2626,7 @@ static int em_rsm(struct x86_emulate_ctxt *ctxt)
|
||||
ret = rsm_load_state_64(ctxt, (const char *)&smram);
|
||||
else
|
||||
#endif
|
||||
- ret = rsm_load_state_32(ctxt, (const char *)&smram);
|
||||
+ ret = rsm_load_state_32(ctxt, &smram.smram32);
|
||||
|
||||
if (ret != X86EMUL_CONTINUE)
|
||||
goto emulate_shutdown;
|
||||
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
|
||||
index ebd4315080cd..87c8021e542c 100644
|
||||
--- a/arch/x86/kvm/x86.c
|
||||
+++ b/arch/x86/kvm/x86.c
|
||||
@@ -9726,22 +9726,18 @@ static u32 enter_smm_get_segment_flags(struct kvm_segment *seg)
|
||||
return flags;
|
||||
}
|
||||
|
||||
-static void enter_smm_save_seg_32(struct kvm_vcpu *vcpu, char *buf, int n)
|
||||
+static void enter_smm_save_seg_32(struct kvm_vcpu *vcpu,
|
||||
+ struct kvm_smm_seg_state_32 *state,
|
||||
+ u32 *selector,
|
||||
+ int n)
|
||||
{
|
||||
struct kvm_segment seg;
|
||||
- int offset;
|
||||
|
||||
kvm_get_segment(vcpu, &seg, n);
|
||||
- put_smstate(u32, buf, 0x7fa8 + n * 4, seg.selector);
|
||||
-
|
||||
- if (n < 3)
|
||||
- offset = 0x7f84 + n * 12;
|
||||
- else
|
||||
- offset = 0x7f2c + (n - 3) * 12;
|
||||
-
|
||||
- put_smstate(u32, buf, offset + 8, seg.base);
|
||||
- put_smstate(u32, buf, offset + 4, seg.limit);
|
||||
- put_smstate(u32, buf, offset, enter_smm_get_segment_flags(&seg));
|
||||
+ *selector = seg.selector;
|
||||
+ state->base = seg.base;
|
||||
+ state->limit = seg.limit;
|
||||
+ state->flags = enter_smm_get_segment_flags(&seg);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
@@ -9762,54 +9758,47 @@ static void enter_smm_save_seg_64(struct kvm_vcpu *vcpu, char *buf, int n)
|
||||
}
|
||||
#endif
|
||||
|
||||
-static void enter_smm_save_state_32(struct kvm_vcpu *vcpu, char *buf)
|
||||
+static void enter_smm_save_state_32(struct kvm_vcpu *vcpu, struct kvm_smram_state_32 *smram)
|
||||
{
|
||||
struct desc_ptr dt;
|
||||
- struct kvm_segment seg;
|
||||
unsigned long val;
|
||||
int i;
|
||||
|
||||
- put_smstate(u32, buf, 0x7ffc, kvm_read_cr0(vcpu));
|
||||
- put_smstate(u32, buf, 0x7ff8, kvm_read_cr3(vcpu));
|
||||
- put_smstate(u32, buf, 0x7ff4, kvm_get_rflags(vcpu));
|
||||
- put_smstate(u32, buf, 0x7ff0, kvm_rip_read(vcpu));
|
||||
+ smram->cr0 = kvm_read_cr0(vcpu);
|
||||
+ smram->cr3 = kvm_read_cr3(vcpu);
|
||||
+ smram->eflags = kvm_get_rflags(vcpu);
|
||||
+ smram->eip = kvm_rip_read(vcpu);
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
- put_smstate(u32, buf, 0x7fd0 + i * 4, kvm_register_read_raw(vcpu, i));
|
||||
+ smram->gprs[i] = kvm_register_read_raw(vcpu, i);
|
||||
|
||||
kvm_get_dr(vcpu, 6, &val);
|
||||
- put_smstate(u32, buf, 0x7fcc, (u32)val);
|
||||
+ smram->dr6 = (u32)val;
|
||||
kvm_get_dr(vcpu, 7, &val);
|
||||
- put_smstate(u32, buf, 0x7fc8, (u32)val);
|
||||
+ smram->dr7 = (u32)val;
|
||||
|
||||
- kvm_get_segment(vcpu, &seg, VCPU_SREG_TR);
|
||||
- put_smstate(u32, buf, 0x7fc4, seg.selector);
|
||||
- put_smstate(u32, buf, 0x7f64, seg.base);
|
||||
- put_smstate(u32, buf, 0x7f60, seg.limit);
|
||||
- put_smstate(u32, buf, 0x7f5c, enter_smm_get_segment_flags(&seg));
|
||||
-
|
||||
- kvm_get_segment(vcpu, &seg, VCPU_SREG_LDTR);
|
||||
- put_smstate(u32, buf, 0x7fc0, seg.selector);
|
||||
- put_smstate(u32, buf, 0x7f80, seg.base);
|
||||
- put_smstate(u32, buf, 0x7f7c, seg.limit);
|
||||
- put_smstate(u32, buf, 0x7f78, enter_smm_get_segment_flags(&seg));
|
||||
+ enter_smm_save_seg_32(vcpu, &smram->tr, &smram->tr_sel, VCPU_SREG_TR);
|
||||
+ enter_smm_save_seg_32(vcpu, &smram->ldtr, &smram->ldtr_sel, VCPU_SREG_LDTR);
|
||||
|
||||
static_call(kvm_x86_get_gdt)(vcpu, &dt);
|
||||
- put_smstate(u32, buf, 0x7f74, dt.address);
|
||||
- put_smstate(u32, buf, 0x7f70, dt.size);
|
||||
+ smram->gdtr.base = dt.address;
|
||||
+ smram->gdtr.limit = dt.size;
|
||||
|
||||
static_call(kvm_x86_get_idt)(vcpu, &dt);
|
||||
- put_smstate(u32, buf, 0x7f58, dt.address);
|
||||
- put_smstate(u32, buf, 0x7f54, dt.size);
|
||||
+ smram->idtr.base = dt.address;
|
||||
+ smram->idtr.limit = dt.size;
|
||||
|
||||
- for (i = 0; i < 6; i++)
|
||||
- enter_smm_save_seg_32(vcpu, buf, i);
|
||||
+ enter_smm_save_seg_32(vcpu, &smram->es, &smram->es_sel, VCPU_SREG_ES);
|
||||
+ enter_smm_save_seg_32(vcpu, &smram->cs, &smram->cs_sel, VCPU_SREG_CS);
|
||||
+ enter_smm_save_seg_32(vcpu, &smram->ss, &smram->ss_sel, VCPU_SREG_SS);
|
||||
|
||||
- put_smstate(u32, buf, 0x7f14, kvm_read_cr4(vcpu));
|
||||
+ enter_smm_save_seg_32(vcpu, &smram->ds, &smram->ds_sel, VCPU_SREG_DS);
|
||||
+ enter_smm_save_seg_32(vcpu, &smram->fs, &smram->fs_sel, VCPU_SREG_FS);
|
||||
+ enter_smm_save_seg_32(vcpu, &smram->gs, &smram->gs_sel, VCPU_SREG_GS);
|
||||
|
||||
- /* revision id */
|
||||
- put_smstate(u32, buf, 0x7efc, 0x00020000);
|
||||
- put_smstate(u32, buf, 0x7ef8, vcpu->arch.smbase);
|
||||
+ smram->cr4 = kvm_read_cr4(vcpu);
|
||||
+ smram->smm_revision = 0x00020000;
|
||||
+ smram->smbase = vcpu->arch.smbase;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
@@ -9880,7 +9869,7 @@ static void enter_smm(struct kvm_vcpu *vcpu)
|
||||
enter_smm_save_state_64(vcpu, (char *)&smram);
|
||||
else
|
||||
#endif
|
||||
- enter_smm_save_state_32(vcpu, (char *)&smram);
|
||||
+ enter_smm_save_state_32(vcpu, &smram.smram32);
|
||||
|
||||
/*
|
||||
* Give enter_smm() a chance to make ISA-specific changes to the vCPU
|
||||
@@ -0,0 +1,279 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Maxim Levitsky <mlevitsk@redhat.com>
|
||||
Date: Wed, 3 Aug 2022 18:50:08 +0300
|
||||
Subject: [PATCH] KVM: x86: emulator/smm: use smram struct for 64 bit smram
|
||||
load/restore
|
||||
|
||||
Use kvm_smram_state_64 struct to save/restore the 64 bit SMM state
|
||||
(used when X86_FEATURE_LM is present in the guest CPUID,
|
||||
regardless of 32-bitness of the guest).
|
||||
|
||||
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
|
||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
---
|
||||
arch/x86/kvm/emulate.c | 88 ++++++++++++++----------------------------
|
||||
arch/x86/kvm/x86.c | 75 ++++++++++++++++-------------------
|
||||
2 files changed, 62 insertions(+), 101 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
||||
index aa60533d9d29..5480b23112e3 100644
|
||||
--- a/arch/x86/kvm/emulate.c
|
||||
+++ b/arch/x86/kvm/emulate.c
|
||||
@@ -2373,24 +2373,16 @@ static void rsm_load_seg_32(struct x86_emulate_ctxt *ctxt,
|
||||
}
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
-static int rsm_load_seg_64(struct x86_emulate_ctxt *ctxt, const char *smstate,
|
||||
- int n)
|
||||
+static void rsm_load_seg_64(struct x86_emulate_ctxt *ctxt,
|
||||
+ const struct kvm_smm_seg_state_64 *state,
|
||||
+ int n)
|
||||
{
|
||||
struct desc_struct desc;
|
||||
- int offset;
|
||||
- u16 selector;
|
||||
- u32 base3;
|
||||
-
|
||||
- offset = 0x7e00 + n * 16;
|
||||
-
|
||||
- selector = GET_SMSTATE(u16, smstate, offset);
|
||||
- rsm_set_desc_flags(&desc, GET_SMSTATE(u16, smstate, offset + 2) << 8);
|
||||
- set_desc_limit(&desc, GET_SMSTATE(u32, smstate, offset + 4));
|
||||
- set_desc_base(&desc, GET_SMSTATE(u32, smstate, offset + 8));
|
||||
- base3 = GET_SMSTATE(u32, smstate, offset + 12);
|
||||
|
||||
- ctxt->ops->set_segment(ctxt, selector, &desc, base3, n);
|
||||
- return X86EMUL_CONTINUE;
|
||||
+ rsm_set_desc_flags(&desc, state->attributes << 8);
|
||||
+ set_desc_limit(&desc, state->limit);
|
||||
+ set_desc_base(&desc, (u32)state->base);
|
||||
+ ctxt->ops->set_segment(ctxt, state->selector, &desc, state->base >> 32, n);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -2484,71 +2476,49 @@ static int rsm_load_state_32(struct x86_emulate_ctxt *ctxt,
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
static int rsm_load_state_64(struct x86_emulate_ctxt *ctxt,
|
||||
- const char *smstate)
|
||||
+ const struct kvm_smram_state_64 *smstate)
|
||||
{
|
||||
- struct desc_struct desc;
|
||||
struct desc_ptr dt;
|
||||
- u64 val, cr0, cr3, cr4;
|
||||
- u32 base3;
|
||||
- u16 selector;
|
||||
int i, r;
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
- *reg_write(ctxt, i) = GET_SMSTATE(u64, smstate, 0x7ff8 - i * 8);
|
||||
+ *reg_write(ctxt, i) = smstate->gprs[15 - i];
|
||||
|
||||
- ctxt->_eip = GET_SMSTATE(u64, smstate, 0x7f78);
|
||||
- ctxt->eflags = GET_SMSTATE(u32, smstate, 0x7f70) | X86_EFLAGS_FIXED;
|
||||
+ ctxt->_eip = smstate->rip;
|
||||
+ ctxt->eflags = smstate->rflags | X86_EFLAGS_FIXED;
|
||||
|
||||
- val = GET_SMSTATE(u64, smstate, 0x7f68);
|
||||
-
|
||||
- if (ctxt->ops->set_dr(ctxt, 6, val))
|
||||
+ if (ctxt->ops->set_dr(ctxt, 6, smstate->dr6))
|
||||
return X86EMUL_UNHANDLEABLE;
|
||||
-
|
||||
- val = GET_SMSTATE(u64, smstate, 0x7f60);
|
||||
-
|
||||
- if (ctxt->ops->set_dr(ctxt, 7, val))
|
||||
+ if (ctxt->ops->set_dr(ctxt, 7, smstate->dr7))
|
||||
return X86EMUL_UNHANDLEABLE;
|
||||
|
||||
- cr0 = GET_SMSTATE(u64, smstate, 0x7f58);
|
||||
- cr3 = GET_SMSTATE(u64, smstate, 0x7f50);
|
||||
- cr4 = GET_SMSTATE(u64, smstate, 0x7f48);
|
||||
- ctxt->ops->set_smbase(ctxt, GET_SMSTATE(u32, smstate, 0x7f00));
|
||||
- val = GET_SMSTATE(u64, smstate, 0x7ed0);
|
||||
+ ctxt->ops->set_smbase(ctxt, smstate->smbase);
|
||||
|
||||
- if (ctxt->ops->set_msr(ctxt, MSR_EFER, val & ~EFER_LMA))
|
||||
+ if (ctxt->ops->set_msr(ctxt, MSR_EFER, smstate->efer & ~EFER_LMA))
|
||||
return X86EMUL_UNHANDLEABLE;
|
||||
|
||||
- selector = GET_SMSTATE(u32, smstate, 0x7e90);
|
||||
- rsm_set_desc_flags(&desc, GET_SMSTATE(u32, smstate, 0x7e92) << 8);
|
||||
- set_desc_limit(&desc, GET_SMSTATE(u32, smstate, 0x7e94));
|
||||
- set_desc_base(&desc, GET_SMSTATE(u32, smstate, 0x7e98));
|
||||
- base3 = GET_SMSTATE(u32, smstate, 0x7e9c);
|
||||
- ctxt->ops->set_segment(ctxt, selector, &desc, base3, VCPU_SREG_TR);
|
||||
+ rsm_load_seg_64(ctxt, &smstate->tr, VCPU_SREG_TR);
|
||||
|
||||
- dt.size = GET_SMSTATE(u32, smstate, 0x7e84);
|
||||
- dt.address = GET_SMSTATE(u64, smstate, 0x7e88);
|
||||
+ dt.size = smstate->idtr.limit;
|
||||
+ dt.address = smstate->idtr.base;
|
||||
ctxt->ops->set_idt(ctxt, &dt);
|
||||
|
||||
- selector = GET_SMSTATE(u32, smstate, 0x7e70);
|
||||
- rsm_set_desc_flags(&desc, GET_SMSTATE(u32, smstate, 0x7e72) << 8);
|
||||
- set_desc_limit(&desc, GET_SMSTATE(u32, smstate, 0x7e74));
|
||||
- set_desc_base(&desc, GET_SMSTATE(u32, smstate, 0x7e78));
|
||||
- base3 = GET_SMSTATE(u32, smstate, 0x7e7c);
|
||||
- ctxt->ops->set_segment(ctxt, selector, &desc, base3, VCPU_SREG_LDTR);
|
||||
+ rsm_load_seg_64(ctxt, &smstate->ldtr, VCPU_SREG_LDTR);
|
||||
|
||||
- dt.size = GET_SMSTATE(u32, smstate, 0x7e64);
|
||||
- dt.address = GET_SMSTATE(u64, smstate, 0x7e68);
|
||||
+ dt.size = smstate->gdtr.limit;
|
||||
+ dt.address = smstate->gdtr.base;
|
||||
ctxt->ops->set_gdt(ctxt, &dt);
|
||||
|
||||
- r = rsm_enter_protected_mode(ctxt, cr0, cr3, cr4);
|
||||
+ r = rsm_enter_protected_mode(ctxt, smstate->cr0, smstate->cr3, smstate->cr4);
|
||||
if (r != X86EMUL_CONTINUE)
|
||||
return r;
|
||||
|
||||
- for (i = 0; i < 6; i++) {
|
||||
- r = rsm_load_seg_64(ctxt, smstate, i);
|
||||
- if (r != X86EMUL_CONTINUE)
|
||||
- return r;
|
||||
- }
|
||||
+ rsm_load_seg_64(ctxt, &smstate->es, VCPU_SREG_ES);
|
||||
+ rsm_load_seg_64(ctxt, &smstate->cs, VCPU_SREG_CS);
|
||||
+ rsm_load_seg_64(ctxt, &smstate->ss, VCPU_SREG_SS);
|
||||
+ rsm_load_seg_64(ctxt, &smstate->ds, VCPU_SREG_DS);
|
||||
+ rsm_load_seg_64(ctxt, &smstate->fs, VCPU_SREG_FS);
|
||||
+ rsm_load_seg_64(ctxt, &smstate->gs, VCPU_SREG_GS);
|
||||
|
||||
return X86EMUL_CONTINUE;
|
||||
}
|
||||
@@ -2623,7 +2593,7 @@ static int em_rsm(struct x86_emulate_ctxt *ctxt)
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
if (emulator_has_longmode(ctxt))
|
||||
- ret = rsm_load_state_64(ctxt, (const char *)&smram);
|
||||
+ ret = rsm_load_state_64(ctxt, &smram.smram64);
|
||||
else
|
||||
#endif
|
||||
ret = rsm_load_state_32(ctxt, &smram.smram32);
|
||||
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
|
||||
index 87c8021e542c..ada063ab8ae9 100644
|
||||
--- a/arch/x86/kvm/x86.c
|
||||
+++ b/arch/x86/kvm/x86.c
|
||||
@@ -9741,20 +9741,17 @@ static void enter_smm_save_seg_32(struct kvm_vcpu *vcpu,
|
||||
}
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
-static void enter_smm_save_seg_64(struct kvm_vcpu *vcpu, char *buf, int n)
|
||||
+static void enter_smm_save_seg_64(struct kvm_vcpu *vcpu,
|
||||
+ struct kvm_smm_seg_state_64 *state,
|
||||
+ int n)
|
||||
{
|
||||
struct kvm_segment seg;
|
||||
- int offset;
|
||||
- u16 flags;
|
||||
|
||||
kvm_get_segment(vcpu, &seg, n);
|
||||
- offset = 0x7e00 + n * 16;
|
||||
-
|
||||
- flags = enter_smm_get_segment_flags(&seg) >> 8;
|
||||
- put_smstate(u16, buf, offset, seg.selector);
|
||||
- put_smstate(u16, buf, offset + 2, flags);
|
||||
- put_smstate(u32, buf, offset + 4, seg.limit);
|
||||
- put_smstate(u64, buf, offset + 8, seg.base);
|
||||
+ state->selector = seg.selector;
|
||||
+ state->attributes = enter_smm_get_segment_flags(&seg) >> 8;
|
||||
+ state->limit = seg.limit;
|
||||
+ state->base = seg.base;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -9802,57 +9799,51 @@ static void enter_smm_save_state_32(struct kvm_vcpu *vcpu, struct kvm_smram_stat
|
||||
}
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
-static void enter_smm_save_state_64(struct kvm_vcpu *vcpu, char *buf)
|
||||
+static void enter_smm_save_state_64(struct kvm_vcpu *vcpu, struct kvm_smram_state_64 *smram)
|
||||
{
|
||||
struct desc_ptr dt;
|
||||
- struct kvm_segment seg;
|
||||
unsigned long val;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
- put_smstate(u64, buf, 0x7ff8 - i * 8, kvm_register_read_raw(vcpu, i));
|
||||
+ smram->gprs[15 - i] = kvm_register_read_raw(vcpu, i);
|
||||
+
|
||||
+ smram->rip = kvm_rip_read(vcpu);
|
||||
+ smram->rflags = kvm_get_rflags(vcpu);
|
||||
|
||||
- put_smstate(u64, buf, 0x7f78, kvm_rip_read(vcpu));
|
||||
- put_smstate(u32, buf, 0x7f70, kvm_get_rflags(vcpu));
|
||||
|
||||
kvm_get_dr(vcpu, 6, &val);
|
||||
- put_smstate(u64, buf, 0x7f68, val);
|
||||
+ smram->dr6 = val;
|
||||
kvm_get_dr(vcpu, 7, &val);
|
||||
- put_smstate(u64, buf, 0x7f60, val);
|
||||
-
|
||||
- put_smstate(u64, buf, 0x7f58, kvm_read_cr0(vcpu));
|
||||
- put_smstate(u64, buf, 0x7f50, kvm_read_cr3(vcpu));
|
||||
- put_smstate(u64, buf, 0x7f48, kvm_read_cr4(vcpu));
|
||||
+ smram->dr7 = val;
|
||||
|
||||
- put_smstate(u32, buf, 0x7f00, vcpu->arch.smbase);
|
||||
+ smram->cr0 = kvm_read_cr0(vcpu);
|
||||
+ smram->cr3 = kvm_read_cr3(vcpu);
|
||||
+ smram->cr4 = kvm_read_cr4(vcpu);
|
||||
|
||||
- /* revision id */
|
||||
- put_smstate(u32, buf, 0x7efc, 0x00020064);
|
||||
+ smram->smbase = vcpu->arch.smbase;
|
||||
+ smram->smm_revison = 0x00020064;
|
||||
|
||||
- put_smstate(u64, buf, 0x7ed0, vcpu->arch.efer);
|
||||
+ smram->efer = vcpu->arch.efer;
|
||||
|
||||
- kvm_get_segment(vcpu, &seg, VCPU_SREG_TR);
|
||||
- put_smstate(u16, buf, 0x7e90, seg.selector);
|
||||
- put_smstate(u16, buf, 0x7e92, enter_smm_get_segment_flags(&seg) >> 8);
|
||||
- put_smstate(u32, buf, 0x7e94, seg.limit);
|
||||
- put_smstate(u64, buf, 0x7e98, seg.base);
|
||||
+ enter_smm_save_seg_64(vcpu, &smram->tr, VCPU_SREG_TR);
|
||||
|
||||
static_call(kvm_x86_get_idt)(vcpu, &dt);
|
||||
- put_smstate(u32, buf, 0x7e84, dt.size);
|
||||
- put_smstate(u64, buf, 0x7e88, dt.address);
|
||||
+ smram->idtr.limit = dt.size;
|
||||
+ smram->idtr.base = dt.address;
|
||||
|
||||
- kvm_get_segment(vcpu, &seg, VCPU_SREG_LDTR);
|
||||
- put_smstate(u16, buf, 0x7e70, seg.selector);
|
||||
- put_smstate(u16, buf, 0x7e72, enter_smm_get_segment_flags(&seg) >> 8);
|
||||
- put_smstate(u32, buf, 0x7e74, seg.limit);
|
||||
- put_smstate(u64, buf, 0x7e78, seg.base);
|
||||
+ enter_smm_save_seg_64(vcpu, &smram->ldtr, VCPU_SREG_LDTR);
|
||||
|
||||
static_call(kvm_x86_get_gdt)(vcpu, &dt);
|
||||
- put_smstate(u32, buf, 0x7e64, dt.size);
|
||||
- put_smstate(u64, buf, 0x7e68, dt.address);
|
||||
+ smram->gdtr.limit = dt.size;
|
||||
+ smram->gdtr.base = dt.address;
|
||||
|
||||
- for (i = 0; i < 6; i++)
|
||||
- enter_smm_save_seg_64(vcpu, buf, i);
|
||||
+ enter_smm_save_seg_64(vcpu, &smram->es, VCPU_SREG_ES);
|
||||
+ enter_smm_save_seg_64(vcpu, &smram->cs, VCPU_SREG_CS);
|
||||
+ enter_smm_save_seg_64(vcpu, &smram->ss, VCPU_SREG_SS);
|
||||
+ enter_smm_save_seg_64(vcpu, &smram->ds, VCPU_SREG_DS);
|
||||
+ enter_smm_save_seg_64(vcpu, &smram->fs, VCPU_SREG_FS);
|
||||
+ enter_smm_save_seg_64(vcpu, &smram->gs, VCPU_SREG_GS);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -9866,7 +9857,7 @@ static void enter_smm(struct kvm_vcpu *vcpu)
|
||||
memset(smram.bytes, 0, sizeof(smram.bytes));
|
||||
#ifdef CONFIG_X86_64
|
||||
if (guest_cpuid_has(vcpu, X86_FEATURE_LM))
|
||||
- enter_smm_save_state_64(vcpu, (char *)&smram);
|
||||
+ enter_smm_save_state_64(vcpu, &smram.smram64);
|
||||
else
|
||||
#endif
|
||||
enter_smm_save_state_32(vcpu, &smram.smram32);
|
||||
@@ -0,0 +1,98 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Maxim Levitsky <mlevitsk@redhat.com>
|
||||
Date: Wed, 3 Aug 2022 18:50:09 +0300
|
||||
Subject: [PATCH] KVM: x86: SVM: use smram structs
|
||||
|
||||
This removes the last user of put_smstate/GET_SMSTATE so
|
||||
remove these functions as well.
|
||||
|
||||
Also add a sanity check that we don't attempt to enter the SMM
|
||||
on non long mode capable guest CPU with a running nested guest.
|
||||
|
||||
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
|
||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
---
|
||||
arch/x86/include/asm/kvm_host.h | 6 ------
|
||||
arch/x86/kvm/svm/svm.c | 21 ++++++---------------
|
||||
2 files changed, 6 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
|
||||
index cff765545738..143cd0b5d593 100644
|
||||
--- a/arch/x86/include/asm/kvm_host.h
|
||||
+++ b/arch/x86/include/asm/kvm_host.h
|
||||
@@ -2044,12 +2044,6 @@ static inline int kvm_cpu_get_apicid(int mps_cpu)
|
||||
#endif
|
||||
}
|
||||
|
||||
-#define put_smstate(type, buf, offset, val) \
|
||||
- *(type *)((buf) + (offset) - 0x7e00) = val
|
||||
-
|
||||
-#define GET_SMSTATE(type, buf, offset) \
|
||||
- (*(type *)((buf) + (offset) - 0x7e00))
|
||||
-
|
||||
int kvm_cpu_dirty_log_size(void);
|
||||
|
||||
int memslot_rmap_alloc(struct kvm_memory_slot *slot, unsigned long npages);
|
||||
diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
|
||||
index f7f58c4cf341..20f90c596d6a 100644
|
||||
--- a/arch/x86/kvm/svm/svm.c
|
||||
+++ b/arch/x86/kvm/svm/svm.c
|
||||
@@ -4314,15 +4314,11 @@ static int svm_enter_smm(struct kvm_vcpu *vcpu, union kvm_smram *smram)
|
||||
struct kvm_host_map map_save;
|
||||
int ret;
|
||||
|
||||
- char *smstate = (char *)smram;
|
||||
-
|
||||
if (!is_guest_mode(vcpu))
|
||||
return 0;
|
||||
|
||||
- /* FED8h - SVM Guest */
|
||||
- put_smstate(u64, smstate, 0x7ed8, 1);
|
||||
- /* FEE0h - SVM Guest VMCB Physical Address */
|
||||
- put_smstate(u64, smstate, 0x7ee0, svm->nested.vmcb12_gpa);
|
||||
+ smram->smram64.svm_guest_flag = 1;
|
||||
+ smram->smram64.svm_guest_vmcb_gpa = svm->nested.vmcb12_gpa;
|
||||
|
||||
svm->vmcb->save.rax = vcpu->arch.regs[VCPU_REGS_RAX];
|
||||
svm->vmcb->save.rsp = vcpu->arch.regs[VCPU_REGS_RSP];
|
||||
@@ -4361,28 +4357,23 @@ static int svm_leave_smm(struct kvm_vcpu *vcpu, const union kvm_smram *smram)
|
||||
{
|
||||
struct vcpu_svm *svm = to_svm(vcpu);
|
||||
struct kvm_host_map map, map_save;
|
||||
- u64 saved_efer, vmcb12_gpa;
|
||||
struct vmcb *vmcb12;
|
||||
int ret;
|
||||
|
||||
- const char *smstate = (const char *)smram;
|
||||
-
|
||||
if (!guest_cpuid_has(vcpu, X86_FEATURE_LM))
|
||||
return 0;
|
||||
|
||||
/* Non-zero if SMI arrived while vCPU was in guest mode. */
|
||||
- if (!GET_SMSTATE(u64, smstate, 0x7ed8))
|
||||
+ if (!smram->smram64.svm_guest_flag)
|
||||
return 0;
|
||||
|
||||
if (!guest_cpuid_has(vcpu, X86_FEATURE_SVM))
|
||||
return 1;
|
||||
|
||||
- saved_efer = GET_SMSTATE(u64, smstate, 0x7ed0);
|
||||
- if (!(saved_efer & EFER_SVME))
|
||||
+ if (!(smram->smram64.efer & EFER_SVME))
|
||||
return 1;
|
||||
|
||||
- vmcb12_gpa = GET_SMSTATE(u64, smstate, 0x7ee0);
|
||||
- if (kvm_vcpu_map(vcpu, gpa_to_gfn(vmcb12_gpa), &map) == -EINVAL)
|
||||
+ if (kvm_vcpu_map(vcpu, gpa_to_gfn(smram->smram64.svm_guest_vmcb_gpa), &map) == -EINVAL)
|
||||
return 1;
|
||||
|
||||
ret = 1;
|
||||
@@ -4408,7 +4399,7 @@ static int svm_leave_smm(struct kvm_vcpu *vcpu, const union kvm_smram *smram)
|
||||
vmcb12 = map.hva;
|
||||
nested_copy_vmcb_control_to_cache(svm, &vmcb12->control);
|
||||
nested_copy_vmcb_save_to_cache(svm, &vmcb12->save);
|
||||
- ret = enter_svm_guest_mode(vcpu, vmcb12_gpa, vmcb12, false);
|
||||
+ ret = enter_svm_guest_mode(vcpu, smram->smram64.svm_guest_vmcb_gpa, vmcb12, false);
|
||||
|
||||
if (ret)
|
||||
goto unmap_save;
|
||||
@@ -0,0 +1,40 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Maxim Levitsky <mlevitsk@redhat.com>
|
||||
Date: Wed, 3 Aug 2022 18:50:10 +0300
|
||||
Subject: [PATCH] KVM: x86: SVM: don't save SVM state to SMRAM when VM is not
|
||||
long mode capable
|
||||
|
||||
When the guest CPUID doesn't have support for long mode, 32 bit SMRAM
|
||||
layout is used and it has no support for preserving EFER and/or SVM
|
||||
state.
|
||||
|
||||
Note that this isn't relevant to running 32 bit guests on VM which is
|
||||
long mode capable - such VM can still run 32 bit guests in compatibility
|
||||
mode.
|
||||
|
||||
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
|
||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
---
|
||||
arch/x86/kvm/svm/svm.c | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
|
||||
index 20f90c596d6a..c816783737b0 100644
|
||||
--- a/arch/x86/kvm/svm/svm.c
|
||||
+++ b/arch/x86/kvm/svm/svm.c
|
||||
@@ -4317,6 +4317,15 @@ static int svm_enter_smm(struct kvm_vcpu *vcpu, union kvm_smram *smram)
|
||||
if (!is_guest_mode(vcpu))
|
||||
return 0;
|
||||
|
||||
+ /*
|
||||
+ * 32 bit SMRAM format doesn't preserve EFER and SVM state.
|
||||
+ * SVM should not be enabled by the userspace without marking
|
||||
+ * the CPU as at least long mode capable.
|
||||
+ */
|
||||
+
|
||||
+ if (!guest_cpuid_has(vcpu, X86_FEATURE_LM))
|
||||
+ return 1;
|
||||
+
|
||||
smram->smram64.svm_guest_flag = 1;
|
||||
smram->smram64.svm_guest_vmcb_gpa = svm->nested.vmcb12_gpa;
|
||||
|
||||
@@ -0,0 +1,180 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Maxim Levitsky <mlevitsk@redhat.com>
|
||||
Date: Wed, 3 Aug 2022 18:50:11 +0300
|
||||
Subject: [PATCH] KVM: x86: emulator/smm: preserve interrupt shadow in SMRAM
|
||||
|
||||
When #SMI is asserted, the CPU can be in interrupt shadow
|
||||
due to sti or mov ss.
|
||||
|
||||
It is not mandatory in Intel/AMD prm to have the #SMI
|
||||
blocked during the shadow, and on top of
|
||||
that, since neither SVM nor VMX has true support for SMI
|
||||
window, waiting for one instruction would mean single stepping
|
||||
the guest.
|
||||
|
||||
Instead, allow #SMI in this case, but both reset the interrupt
|
||||
window and stash its value in SMRAM to restore it on exit
|
||||
from SMM.
|
||||
|
||||
This fixes rare failures seen mostly on windows guests on VMX,
|
||||
when #SMI falls on the sti instruction which mainfest in
|
||||
VM entry failure due to EFLAGS.IF not being set, but STI interrupt
|
||||
window still being set in the VMCS.
|
||||
|
||||
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
|
||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||
---
|
||||
arch/x86/kvm/emulate.c | 17 ++++++++++++++---
|
||||
arch/x86/kvm/kvm_emulate.h | 10 ++++++----
|
||||
arch/x86/kvm/x86.c | 12 ++++++++++++
|
||||
3 files changed, 32 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
||||
index 5480b23112e3..4c9c9844d38f 100644
|
||||
--- a/arch/x86/kvm/emulate.c
|
||||
+++ b/arch/x86/kvm/emulate.c
|
||||
@@ -2435,7 +2435,7 @@ static int rsm_load_state_32(struct x86_emulate_ctxt *ctxt,
|
||||
const struct kvm_smram_state_32 *smstate)
|
||||
{
|
||||
struct desc_ptr dt;
|
||||
- int i;
|
||||
+ int i, r;
|
||||
|
||||
ctxt->eflags = smstate->eflags | X86_EFLAGS_FIXED;
|
||||
ctxt->_eip = smstate->eip;
|
||||
@@ -2470,8 +2470,16 @@ static int rsm_load_state_32(struct x86_emulate_ctxt *ctxt,
|
||||
|
||||
ctxt->ops->set_smbase(ctxt, smstate->smbase);
|
||||
|
||||
- return rsm_enter_protected_mode(ctxt, smstate->cr0,
|
||||
- smstate->cr3, smstate->cr4);
|
||||
+ r = rsm_enter_protected_mode(ctxt, smstate->cr0,
|
||||
+ smstate->cr3, smstate->cr4);
|
||||
+
|
||||
+ if (r != X86EMUL_CONTINUE)
|
||||
+ return r;
|
||||
+
|
||||
+ ctxt->ops->set_int_shadow(ctxt, 0);
|
||||
+ ctxt->interruptibility = (u8)smstate->int_shadow;
|
||||
+
|
||||
+ return X86EMUL_CONTINUE;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
@@ -2520,6 +2528,9 @@ static int rsm_load_state_64(struct x86_emulate_ctxt *ctxt,
|
||||
rsm_load_seg_64(ctxt, &smstate->fs, VCPU_SREG_FS);
|
||||
rsm_load_seg_64(ctxt, &smstate->gs, VCPU_SREG_GS);
|
||||
|
||||
+ ctxt->ops->set_int_shadow(ctxt, 0);
|
||||
+ ctxt->interruptibility = (u8)smstate->int_shadow;
|
||||
+
|
||||
return X86EMUL_CONTINUE;
|
||||
}
|
||||
#endif
|
||||
diff --git a/arch/x86/kvm/kvm_emulate.h b/arch/x86/kvm/kvm_emulate.h
|
||||
index 04ac0cef8b57..d5707b3f254c 100644
|
||||
--- a/arch/x86/kvm/kvm_emulate.h
|
||||
+++ b/arch/x86/kvm/kvm_emulate.h
|
||||
@@ -233,6 +233,7 @@ struct x86_emulate_ops {
|
||||
bool (*guest_has_rdpid)(struct x86_emulate_ctxt *ctxt);
|
||||
|
||||
void (*set_nmi_mask)(struct x86_emulate_ctxt *ctxt, bool masked);
|
||||
+ void (*set_int_shadow)(struct x86_emulate_ctxt *ctxt, u8 shadow);
|
||||
|
||||
unsigned (*get_hflags)(struct x86_emulate_ctxt *ctxt);
|
||||
void (*exiting_smm)(struct x86_emulate_ctxt *ctxt);
|
||||
@@ -496,7 +497,8 @@ struct kvm_smram_state_32 {
|
||||
u32 reserved1[62];
|
||||
u32 smbase;
|
||||
u32 smm_revision;
|
||||
- u32 reserved2[5];
|
||||
+ u32 reserved2[4];
|
||||
+ u32 int_shadow; /* KVM extension */
|
||||
u32 cr4; /* CR4 is not present in Intel/AMD SMRAM image */
|
||||
u32 reserved3[5];
|
||||
|
||||
@@ -544,6 +546,7 @@ static inline void __check_smram32_offsets(void)
|
||||
__CHECK_SMRAM32_OFFSET(smbase, 0xFEF8);
|
||||
__CHECK_SMRAM32_OFFSET(smm_revision, 0xFEFC);
|
||||
__CHECK_SMRAM32_OFFSET(reserved2, 0xFF00);
|
||||
+ __CHECK_SMRAM32_OFFSET(int_shadow, 0xFF10);
|
||||
__CHECK_SMRAM32_OFFSET(cr4, 0xFF14);
|
||||
__CHECK_SMRAM32_OFFSET(reserved3, 0xFF18);
|
||||
__CHECK_SMRAM32_OFFSET(ds, 0xFF2C);
|
||||
@@ -603,7 +606,7 @@ struct kvm_smram_state_64 {
|
||||
u64 io_restart_rsi;
|
||||
u64 io_restart_rdi;
|
||||
u32 io_restart_dword;
|
||||
- u32 reserved1;
|
||||
+ u32 int_shadow;
|
||||
u8 io_inst_restart;
|
||||
u8 auto_hlt_restart;
|
||||
u8 reserved2[6];
|
||||
@@ -641,7 +644,6 @@ struct kvm_smram_state_64 {
|
||||
u64 gprs[16]; /* GPRS in a reversed "natural" X86 order (R15/R14/../RCX/RAX.) */
|
||||
};
|
||||
|
||||
-
|
||||
static inline void __check_smram64_offsets(void)
|
||||
{
|
||||
#define __CHECK_SMRAM64_OFFSET(field, offset) \
|
||||
@@ -662,7 +664,7 @@ static inline void __check_smram64_offsets(void)
|
||||
__CHECK_SMRAM64_OFFSET(io_restart_rsi, 0xFEB0);
|
||||
__CHECK_SMRAM64_OFFSET(io_restart_rdi, 0xFEB8);
|
||||
__CHECK_SMRAM64_OFFSET(io_restart_dword, 0xFEC0);
|
||||
- __CHECK_SMRAM64_OFFSET(reserved1, 0xFEC4);
|
||||
+ __CHECK_SMRAM64_OFFSET(int_shadow, 0xFEC4);
|
||||
__CHECK_SMRAM64_OFFSET(io_inst_restart, 0xFEC8);
|
||||
__CHECK_SMRAM64_OFFSET(auto_hlt_restart, 0xFEC9);
|
||||
__CHECK_SMRAM64_OFFSET(reserved2, 0xFECA);
|
||||
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
|
||||
index ada063ab8ae9..4050b34806ac 100644
|
||||
--- a/arch/x86/kvm/x86.c
|
||||
+++ b/arch/x86/kvm/x86.c
|
||||
@@ -7930,6 +7930,11 @@ static void emulator_set_nmi_mask(struct x86_emulate_ctxt *ctxt, bool masked)
|
||||
static_call(kvm_x86_set_nmi_mask)(emul_to_vcpu(ctxt), masked);
|
||||
}
|
||||
|
||||
+static void emulator_set_int_shadow(struct x86_emulate_ctxt *ctxt, u8 shadow)
|
||||
+{
|
||||
+ static_call(kvm_x86_set_interrupt_shadow)(emul_to_vcpu(ctxt), shadow);
|
||||
+}
|
||||
+
|
||||
static unsigned emulator_get_hflags(struct x86_emulate_ctxt *ctxt)
|
||||
{
|
||||
return emul_to_vcpu(ctxt)->arch.hflags;
|
||||
@@ -8001,6 +8006,7 @@ static const struct x86_emulate_ops emulate_ops = {
|
||||
.guest_has_fxsr = emulator_guest_has_fxsr,
|
||||
.guest_has_rdpid = emulator_guest_has_rdpid,
|
||||
.set_nmi_mask = emulator_set_nmi_mask,
|
||||
+ .set_int_shadow = emulator_set_int_shadow,
|
||||
.get_hflags = emulator_get_hflags,
|
||||
.exiting_smm = emulator_exiting_smm,
|
||||
.leave_smm = emulator_leave_smm,
|
||||
@@ -9796,6 +9802,8 @@ static void enter_smm_save_state_32(struct kvm_vcpu *vcpu, struct kvm_smram_stat
|
||||
smram->cr4 = kvm_read_cr4(vcpu);
|
||||
smram->smm_revision = 0x00020000;
|
||||
smram->smbase = vcpu->arch.smbase;
|
||||
+
|
||||
+ smram->int_shadow = static_call(kvm_x86_get_interrupt_shadow)(vcpu);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
@@ -9844,6 +9852,8 @@ static void enter_smm_save_state_64(struct kvm_vcpu *vcpu, struct kvm_smram_stat
|
||||
enter_smm_save_seg_64(vcpu, &smram->ds, VCPU_SREG_DS);
|
||||
enter_smm_save_seg_64(vcpu, &smram->fs, VCPU_SREG_FS);
|
||||
enter_smm_save_seg_64(vcpu, &smram->gs, VCPU_SREG_GS);
|
||||
+
|
||||
+ smram->int_shadow = static_call(kvm_x86_get_interrupt_shadow)(vcpu);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -9880,6 +9890,8 @@ static void enter_smm(struct kvm_vcpu *vcpu)
|
||||
kvm_set_rflags(vcpu, X86_EFLAGS_FIXED);
|
||||
kvm_rip_write(vcpu, 0x8000);
|
||||
|
||||
+ static_call(kvm_x86_set_interrupt_shadow)(vcpu, 0);
|
||||
+
|
||||
cr0 = vcpu->arch.cr0 & ~(X86_CR0_PE | X86_CR0_EM | X86_CR0_TS | X86_CR0_PG);
|
||||
static_call(kvm_x86_set_cr0)(vcpu, cr0);
|
||||
vcpu->arch.cr0 = cr0;
|
||||
Submodule submodules/ubuntu-impish deleted from 168d1231d9
Submodule
+1
Submodule submodules/ubuntu-kernel added at 545d5996cb
+1
-1
Submodule submodules/zfsonlinux updated: 531eac3304...5ea8a38968
Reference in New Issue
Block a user