kernel-6.4.11-200

* Wed Aug 16 2023 Justin M. Forbes <jforbes@fedoraproject.org> [6.4.11-0]
- Add more bugfixes for 6.4.11 (Justin M. Forbes)
- Turn off DMABUF_SYSFS_STATS (Justin M. Forbes)
- Revert "KVM: SEV: remove ghcb variable declarations" (Justin M. Forbes)
- Add bug fixed for 6.4.11 (Justin M. Forbes)
- redhat: Add arm64-16k kernel flavor scaffold for 16K page-size'd AArch64 (Neal Gompa)
- Linux v6.4.11
Resolves:

Signed-off-by: Justin M. Forbes <jforbes@fedoraproject.org>
This commit is contained in:
Justin M. Forbes 2023-08-16 11:54:51 -05:00
parent 26f631aafd
commit e78f94bb63
No known key found for this signature in database
GPG Key ID: B8FA7924A4B1C140
18 changed files with 18960 additions and 424 deletions

View File

@ -1,3 +1,6 @@
"https://gitlab.com/cki-project/kernel-ark/-/commit"/1004737240e720078d4c57351d055e516b648305
1004737240e720078d4c57351d055e516b648305 Revert "KVM: SEV: remove ghcb variable declarations"
"https://gitlab.com/cki-project/kernel-ark/-/commit"/f0ba6e68da37465b394524e19c278ba7f1eb5b63
f0ba6e68da37465b394524e19c278ba7f1eb5b63 KVM: SEV: remove ghcb variable declarations

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1743,7 +1743,7 @@ CONFIG_DMABUF_HEAPS_SYSTEM=y
CONFIG_DMABUF_HEAPS=y
# CONFIG_DMABUF_MOVE_NOTIFY is not set
# CONFIG_DMABUF_SELFTESTS is not set
CONFIG_DMABUF_SYSFS_STATS=y
# CONFIG_DMABUF_SYSFS_STATS is not set
CONFIG_DMA_CMA=y
CONFIG_DMADEVICES_DEBUG=y
CONFIG_DMADEVICES_VDEBUG=y

View File

@ -1735,7 +1735,7 @@ CONFIG_DMABUF_HEAPS_SYSTEM=y
CONFIG_DMABUF_HEAPS=y
# CONFIG_DMABUF_MOVE_NOTIFY is not set
# CONFIG_DMABUF_SELFTESTS is not set
CONFIG_DMABUF_SYSFS_STATS=y
# CONFIG_DMABUF_SYSFS_STATS is not set
CONFIG_DMA_CMA=y
# CONFIG_DMADEVICES_DEBUG is not set
CONFIG_DMADEVICES=y

View File

@ -1700,7 +1700,7 @@ CONFIG_DMABUF_HEAPS_SYSTEM=y
CONFIG_DMABUF_HEAPS=y
# CONFIG_DMABUF_MOVE_NOTIFY is not set
# CONFIG_DMABUF_SELFTESTS is not set
CONFIG_DMABUF_SYSFS_STATS=y
# CONFIG_DMABUF_SYSFS_STATS is not set
CONFIG_DMA_CMA=y
CONFIG_DMADEVICES_DEBUG=y
CONFIG_DMADEVICES_VDEBUG=y

View File

@ -1692,7 +1692,7 @@ CONFIG_DMABUF_HEAPS_SYSTEM=y
CONFIG_DMABUF_HEAPS=y
# CONFIG_DMABUF_MOVE_NOTIFY is not set
# CONFIG_DMABUF_SELFTESTS is not set
CONFIG_DMABUF_SYSFS_STATS=y
# CONFIG_DMABUF_SYSFS_STATS is not set
CONFIG_DMA_CMA=y
# CONFIG_DMADEVICES_DEBUG is not set
# CONFIG_DMADEVICES_VDEBUG is not set

View File

@ -1669,7 +1669,7 @@ CONFIG_DMABUF_HEAPS_SYSTEM=y
CONFIG_DMABUF_HEAPS=y
# CONFIG_DMABUF_MOVE_NOTIFY is not set
# CONFIG_DMABUF_SELFTESTS is not set
CONFIG_DMABUF_SYSFS_STATS=y
# CONFIG_DMABUF_SYSFS_STATS is not set
CONFIG_DMA_CMA=y
CONFIG_DMADEVICES_DEBUG=y
CONFIG_DMADEVICES_VDEBUG=y

View File

@ -1661,7 +1661,7 @@ CONFIG_DMABUF_HEAPS_SYSTEM=y
CONFIG_DMABUF_HEAPS=y
# CONFIG_DMABUF_MOVE_NOTIFY is not set
# CONFIG_DMABUF_SELFTESTS is not set
CONFIG_DMABUF_SYSFS_STATS=y
# CONFIG_DMABUF_SYSFS_STATS is not set
CONFIG_DMA_CMA=y
# CONFIG_DMADEVICES_DEBUG is not set
# CONFIG_DMADEVICES_VDEBUG is not set

View File

@ -1318,7 +1318,7 @@ CONFIG_DMABUF_HEAPS_SYSTEM=y
CONFIG_DMABUF_HEAPS=y
# CONFIG_DMABUF_MOVE_NOTIFY is not set
# CONFIG_DMABUF_SELFTESTS is not set
CONFIG_DMABUF_SYSFS_STATS=y
# CONFIG_DMABUF_SYSFS_STATS is not set
# CONFIG_DMA_CMA is not set
CONFIG_DMADEVICES_DEBUG=y
CONFIG_DMADEVICES_VDEBUG=y

View File

@ -1308,7 +1308,7 @@ CONFIG_DMABUF_HEAPS_SYSTEM=y
CONFIG_DMABUF_HEAPS=y
# CONFIG_DMABUF_MOVE_NOTIFY is not set
# CONFIG_DMABUF_SELFTESTS is not set
CONFIG_DMABUF_SYSFS_STATS=y
# CONFIG_DMABUF_SYSFS_STATS is not set
# CONFIG_DMA_CMA is not set
# CONFIG_DMADEVICES_DEBUG is not set
CONFIG_DMADEVICES=y

View File

@ -1324,7 +1324,7 @@ CONFIG_DMABUF_HEAPS_SYSTEM=y
CONFIG_DMABUF_HEAPS=y
# CONFIG_DMABUF_MOVE_NOTIFY is not set
# CONFIG_DMABUF_SELFTESTS is not set
CONFIG_DMABUF_SYSFS_STATS=y
# CONFIG_DMABUF_SYSFS_STATS is not set
# CONFIG_DMA_CMA is not set
CONFIG_DMADEVICES_DEBUG=y
CONFIG_DMADEVICES_VDEBUG=y

View File

@ -1314,7 +1314,7 @@ CONFIG_DMABUF_HEAPS_SYSTEM=y
CONFIG_DMABUF_HEAPS=y
# CONFIG_DMABUF_MOVE_NOTIFY is not set
# CONFIG_DMABUF_SELFTESTS is not set
CONFIG_DMABUF_SYSFS_STATS=y
# CONFIG_DMABUF_SYSFS_STATS is not set
# CONFIG_DMA_CMA is not set
# CONFIG_DMADEVICES_DEBUG is not set
CONFIG_DMADEVICES=y

View File

@ -1444,7 +1444,7 @@ CONFIG_DMABUF_HEAPS_SYSTEM=y
CONFIG_DMABUF_HEAPS=y
# CONFIG_DMABUF_MOVE_NOTIFY is not set
# CONFIG_DMABUF_SELFTESTS is not set
CONFIG_DMABUF_SYSFS_STATS=y
# CONFIG_DMABUF_SYSFS_STATS is not set
CONFIG_DMA_CMA=y
CONFIG_DMADEVICES_DEBUG=y
CONFIG_DMADEVICES_VDEBUG=y

View File

@ -1434,7 +1434,7 @@ CONFIG_DMABUF_HEAPS_SYSTEM=y
CONFIG_DMABUF_HEAPS=y
# CONFIG_DMABUF_MOVE_NOTIFY is not set
# CONFIG_DMABUF_SELFTESTS is not set
CONFIG_DMABUF_SYSFS_STATS=y
# CONFIG_DMABUF_SYSFS_STATS is not set
CONFIG_DMA_CMA=y
# CONFIG_DMADEVICES_DEBUG is not set
CONFIG_DMADEVICES=y

View File

@ -171,18 +171,18 @@ Summary: The Linux kernel
# the --with-release option overrides this setting.)
%define debugbuildsenabled 1
# define buildid .local
%define specrpmversion 6.4.10
%define specversion 6.4.10
%define specrpmversion 6.4.11
%define specversion 6.4.11
%define patchversion 6.4
%define pkgrelease 200
%define kversion 6
%define tarfile_release 6.4.10
%define tarfile_release 6.4.11
# This is needed to do merge window version magic
%define patchlevel 4
# This allows pkg_release to have configurable %%{?dist} tag
%define specrelease 200%{?buildid}%{?dist}
# This defines the kabi tarball version
%define kabiversion 6.4.10
%define kabiversion 6.4.11
# If this variable is set to 1, a bpf selftests build failure will cause a
# fatal kernel package build error
@ -210,6 +210,8 @@ Summary: The Linux kernel
%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1}
# kernel-zfcpdump (s390 specific kernel for zfcpdump)
%define with_zfcpdump %{?_without_zfcpdump: 0} %{?!_without_zfcpdump: 1}
# kernel-16k (aarch64 kernel with 16K page_size)
%define with_arm64_16k %{?_without_arm64_16k: 0} %{?!_without_arm64_16k: 1}
# kernel-64k (aarch64 kernel with 64K page_size)
%define with_arm64_64k %{?_without_arm64_64k: 0} %{?!_without_arm64_64k: 1}
# kernel-rt (x86_64 and aarch64 only PREEMPT_RT enabled kernel)
@ -220,6 +222,7 @@ Summary: The Linux kernel
# up X X X
# pae X X
# zfcpdump X X
# arm64_16k X X X
# arm64_64k X X X
# realtime X X X
@ -318,6 +321,9 @@ Summary: The Linux kernel
%define with_arm64_64k 0
%endif
# No arm64-16k flavor for now
%define with_arm64_16k 0
%if %{with_verbose}
%define make_opts V=1
%else
@ -452,6 +458,7 @@ Summary: The Linux kernel
%define with_headers 0
%define with_efiuki 0
%define with_zfcpdump 0
%define with_arm64_16k 0
%define with_arm64_64k 0
%endif
@ -518,8 +525,9 @@ Summary: The Linux kernel
%define with_zfcpdump 0
%endif
# 64k variant only for aarch64
# 16k and 64k variants only for aarch64
%ifnarch aarch64
%define with_arm64_16k 0
%define with_arm64_64k 0
%endif
@ -613,6 +621,7 @@ Summary: The Linux kernel
%define with_debug 0
%define with_pae 0
%define with_zfcpdump 0
%define with_arm64_16k 0
%define with_arm64_64k 0
%define with_realtime 0
@ -665,6 +674,11 @@ Summary: The Linux kernel
%else
%define with_realtime_base 0
%endif
%if %{with_arm64_16k} && !%{with_dbgonly}
%define with_arm64_16k_base 1
%else
%define with_arm64_16k_base 0
%endif
%if %{with_arm64_64k} && !%{with_dbgonly}
%define with_arm64_64k_base 1
%else
@ -947,6 +961,8 @@ Source54: %{name}-armv7hl-fedora.config
Source55: %{name}-armv7hl-debug-fedora.config
Source56: %{name}-armv7hl-lpae-fedora.config
Source57: %{name}-armv7hl-lpae-debug-fedora.config
Source58: %{name}-aarch64-16k-fedora.config
Source59: %{name}-aarch64-16k-debug-fedora.config
Source60: %{name}-ppc64le-fedora.config
Source61: %{name}-ppc64le-debug-fedora.config
Source62: %{name}-s390x-fedora.config
@ -1610,6 +1626,29 @@ zfcpdump infrastructure.
# with_zfcpdump
%endif
%if %{with_arm64_16k_base}
%define variant_summary The Linux kernel compiled for 16k pagesize usage
%kernel_variant_package 16k
%description 16k-core
The kernel package contains a variant of the ARM64 Linux kernel using
a 16K page size.
%endif
%if %{with_arm64_16k} && %{with_debug}
%define variant_summary The Linux kernel compiled with extra debugging enabled
%if !%{debugbuildsenabled}
%kernel_variant_package -m 16k-debug
%else
%kernel_variant_package 16k-debug
%endif
%description 16k-debug-core
The debug kernel package contains a variant of the ARM64 Linux kernel using
a 16K page size.
This variant of the kernel has numerous debugging options enabled.
It should only be installed when trying to gather additional information
on kernel bugs, as some of these options impact performance noticably.
%endif
%if %{with_arm64_64k_base}
%define variant_summary The Linux kernel compiled for 64k pagesize usage
%kernel_variant_package 64k
@ -2662,6 +2701,10 @@ echo "building rt-debug"
BuildKernel %make_target %kernel_image %{_use_vdso} rt-debug
%endif
%if %{with_arm64_16k}
BuildKernel %make_target %kernel_image %{_use_vdso} 16k-debug
%endif
%if %{with_arm64_64k}
BuildKernel %make_target %kernel_image %{_use_vdso} 64k-debug
%endif
@ -2676,6 +2719,10 @@ BuildKernel %make_target %kernel_image %{_use_vdso} debug
BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump
%endif
%if %{with_arm64_16k_base}
BuildKernel %make_target %kernel_image %{_use_vdso} 16k
%endif
%if %{with_arm64_64k_base}
BuildKernel %make_target %kernel_image %{_use_vdso} 64k
%endif
@ -2693,7 +2740,7 @@ BuildKernel %make_target %kernel_image %{_use_vdso}
%endif
%ifnarch noarch i686 %{nobuildarches}
%if !%{with_debug} && !%{with_zfcpdump} && !%{with_pae} && !%{with_up} && !%{with_arm64_64k} && !%{with_realtime}
%if !%{with_debug} && !%{with_zfcpdump} && !%{with_pae} && !%{with_up} && !%{with_arm64_16k} && !%{with_arm64_64k} && !%{with_realtime}
# If only building the user space tools, then initialize the build environment
# and some variables so that the various userspace tools can be built.
InitBuildVars
@ -2857,6 +2904,12 @@ find Documentation -type d | xargs chmod u+w
if [ "%{with_realtime}" -ne "0" ] && [ "%{with_debug}" -ne "0" ]; then \
%{modsign_cmd} certs/signing_key.pem.sign+rt-debug certs/signing_key.x509.sign+rt-debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+rt-debug/ \
fi \
if [ "%{with_arm64_16k_base}" -ne "0" ]; then \
%{modsign_cmd} certs/signing_key.pem.sign+16k certs/signing_key.x509.sign+16k $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+16k/ \
fi \
if [ "%{with_arm64_16k}" -ne "0" ] && [ "%{with_debug}" -ne "0" ]; then \
%{modsign_cmd} certs/signing_key.pem.sign+16k-debug certs/signing_key.x509.sign+16k-debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+16k-debug/ \
fi \
if [ "%{with_arm64_64k_base}" -ne "0" ]; then \
%{modsign_cmd} certs/signing_key.pem.sign+64k certs/signing_key.x509.sign+64k $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+64k/ \
fi \
@ -3396,6 +3449,16 @@ fi\
%kernel_variant_post -v debug
%endif
%if %{with_arm64_16k_base}
%kernel_variant_preun 16k
%kernel_variant_post -v 16k
%endif
%if %{with_debug} && %{with_arm64_16k}
%kernel_variant_preun 16k-debug
%kernel_variant_post -v 16k-debug
%endif
%if %{with_arm64_64k_base}
%kernel_variant_preun 64k
%kernel_variant_post -v 64k
@ -3695,6 +3758,9 @@ fi\
%if %{with_up}
%kernel_variant_files %{_use_vdso} %{with_debug} debug
%endif
%if %{with_arm64_16k}
%kernel_variant_files %{_use_vdso} %{with_debug} 16k-debug
%endif
%if %{with_arm64_64k}
%kernel_variant_files %{_use_vdso} %{with_debug} 64k-debug
%endif
@ -3710,6 +3776,14 @@ fi\
%files debug-modules
%files debug-modules-core
%files debug-modules-extra
%if %{with_arm64_16k}
%files 16k-debug
%files 16k-debug-core
%files 16k-debug-devel
%files 16k-debug-devel-matched
%files 16k-debug-modules
%files 16k-debug-modules-extra
%endif
%if %{with_arm64_64k}
%files 64k-debug
%files 64k-debug-core
@ -3720,6 +3794,7 @@ fi\
%endif
%endif
%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump
%kernel_variant_files %{_use_vdso} %{with_arm64_16k_base} 16k
%kernel_variant_files %{_use_vdso} %{with_arm64_64k_base} 64k
%define kernel_variant_ipaclones(k:) \
@ -3740,6 +3815,14 @@ fi\
#
#
%changelog
* Wed Aug 16 2023 Justin M. Forbes <jforbes@fedoraproject.org> [6.4.11-0]
- Add more bugfixes for 6.4.11 (Justin M. Forbes)
- Turn off DMABUF_SYSFS_STATS (Justin M. Forbes)
- Revert "KVM: SEV: remove ghcb variable declarations" (Justin M. Forbes)
- Add bug fixed for 6.4.11 (Justin M. Forbes)
- redhat: Add arm64-16k kernel flavor scaffold for 16K page-size'd AArch64 (Neal Gompa)
- Linux v6.4.11
* Fri Aug 11 2023 Justin M. Forbes <jforbes@fedoraproject.org> [6.4.10-0]
- More security bug fixes for 6.4.10 (Justin M. Forbes)
- KVM: SEV: remove ghcb variable declarations (Paolo Bonzini)

View File

@ -5,11 +5,9 @@
arch/s390/kernel/ipl.c | 5 +
arch/s390/kernel/setup.c | 4 +
arch/x86/kernel/setup.c | 22 ++--
arch/x86/kvm/svm/sev.c | 124 ++++++++++-----------
arch/x86/kvm/svm/svm.h | 26 +++++
drivers/acpi/apei/hest.c | 8 ++
drivers/acpi/irq.c | 17 ++-
drivers/acpi/resource.c | 60 ++++++++++
drivers/acpi/resource.c | 32 ++++--
drivers/acpi/scan.c | 9 ++
drivers/ata/libahci.c | 18 +++
drivers/char/ipmi/ipmi_dmi.c | 15 +++
@ -18,7 +16,6 @@
drivers/firmware/efi/efi.c | 124 +++++++++++++++------
drivers/firmware/efi/secureboot.c | 38 +++++++
drivers/firmware/sysfb.c | 18 ++-
.../amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 2 +-
drivers/hid/hid-rmi.c | 66 -----------
drivers/hwtracing/coresight/coresight-etm4x-core.c | 19 ++++
drivers/input/rmi4/rmi_driver.c | 124 ++++++++++++---------
@ -40,10 +37,10 @@
security/lockdown/Kconfig | 13 +++
security/lockdown/lockdown.c | 1 +
security/security.c | 12 ++
42 files changed, 646 insertions(+), 243 deletions(-)
39 files changed, 518 insertions(+), 191 deletions(-)
diff --git a/Makefile b/Makefile
index bf463afef54b..7717cdde1d65 100644
index d0efd84bb7d0..77fb7e58f9eb 100644
--- a/Makefile
+++ b/Makefile
@@ -22,6 +22,18 @@ $(if $(filter __%, $(MAKECMDGOALS)), \
@ -203,335 +200,6 @@ index 0cccfeb67c3a..a7dccf67c4a1 100644
reserve_initrd();
diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c
index 69ae5e1b3120..512dfe45d91e 100644
--- a/arch/x86/kvm/svm/sev.c
+++ b/arch/x86/kvm/svm/sev.c
@@ -2414,15 +2414,18 @@ static void sev_es_sync_from_ghcb(struct vcpu_svm *svm)
*/
memset(vcpu->arch.regs, 0, sizeof(vcpu->arch.regs));
- vcpu->arch.regs[VCPU_REGS_RAX] = ghcb_get_rax_if_valid(ghcb);
- vcpu->arch.regs[VCPU_REGS_RBX] = ghcb_get_rbx_if_valid(ghcb);
- vcpu->arch.regs[VCPU_REGS_RCX] = ghcb_get_rcx_if_valid(ghcb);
- vcpu->arch.regs[VCPU_REGS_RDX] = ghcb_get_rdx_if_valid(ghcb);
- vcpu->arch.regs[VCPU_REGS_RSI] = ghcb_get_rsi_if_valid(ghcb);
+ BUILD_BUG_ON(sizeof(svm->sev_es.valid_bitmap) != sizeof(ghcb->save.valid_bitmap));
+ memcpy(&svm->sev_es.valid_bitmap, &ghcb->save.valid_bitmap, sizeof(ghcb->save.valid_bitmap));
- svm->vmcb->save.cpl = ghcb_get_cpl_if_valid(ghcb);
+ vcpu->arch.regs[VCPU_REGS_RAX] = kvm_ghcb_get_rax_if_valid(svm, ghcb);
+ vcpu->arch.regs[VCPU_REGS_RBX] = kvm_ghcb_get_rbx_if_valid(svm, ghcb);
+ vcpu->arch.regs[VCPU_REGS_RCX] = kvm_ghcb_get_rcx_if_valid(svm, ghcb);
+ vcpu->arch.regs[VCPU_REGS_RDX] = kvm_ghcb_get_rdx_if_valid(svm, ghcb);
+ vcpu->arch.regs[VCPU_REGS_RSI] = kvm_ghcb_get_rsi_if_valid(svm, ghcb);
- if (ghcb_xcr0_is_valid(ghcb)) {
+ svm->vmcb->save.cpl = kvm_ghcb_get_cpl_if_valid(svm, ghcb);
+
+ if (kvm_ghcb_xcr0_is_valid(svm)) {
vcpu->arch.xcr0 = ghcb_get_xcr0(ghcb);
kvm_update_cpuid_runtime(vcpu);
}
@@ -2433,84 +2436,88 @@ static void sev_es_sync_from_ghcb(struct vcpu_svm *svm)
control->exit_code_hi = upper_32_bits(exit_code);
control->exit_info_1 = ghcb_get_sw_exit_info_1(ghcb);
control->exit_info_2 = ghcb_get_sw_exit_info_2(ghcb);
+ svm->sev_es.sw_scratch = kvm_ghcb_get_sw_scratch_if_valid(svm, ghcb);
/* Clear the valid entries fields */
memset(ghcb->save.valid_bitmap, 0, sizeof(ghcb->save.valid_bitmap));
}
+static u64 kvm_ghcb_get_sw_exit_code(struct vmcb_control_area *control)
+{
+ return (((u64)control->exit_code_hi) << 32) | control->exit_code;
+}
+
static int sev_es_validate_vmgexit(struct vcpu_svm *svm)
{
- struct kvm_vcpu *vcpu;
- struct ghcb *ghcb;
+ struct vmcb_control_area *control = &svm->vmcb->control;
+ struct kvm_vcpu *vcpu = &svm->vcpu;
u64 exit_code;
u64 reason;
- ghcb = svm->sev_es.ghcb;
-
/*
* Retrieve the exit code now even though it may not be marked valid
* as it could help with debugging.
*/
- exit_code = ghcb_get_sw_exit_code(ghcb);
+ exit_code = kvm_ghcb_get_sw_exit_code(control);
/* Only GHCB Usage code 0 is supported */
- if (ghcb->ghcb_usage) {
+ if (svm->sev_es.ghcb->ghcb_usage) {
reason = GHCB_ERR_INVALID_USAGE;
goto vmgexit_err;
}
reason = GHCB_ERR_MISSING_INPUT;
- if (!ghcb_sw_exit_code_is_valid(ghcb) ||
- !ghcb_sw_exit_info_1_is_valid(ghcb) ||
- !ghcb_sw_exit_info_2_is_valid(ghcb))
+ if (!kvm_ghcb_sw_exit_code_is_valid(svm) ||
+ !kvm_ghcb_sw_exit_info_1_is_valid(svm) ||
+ !kvm_ghcb_sw_exit_info_2_is_valid(svm))
goto vmgexit_err;
- switch (ghcb_get_sw_exit_code(ghcb)) {
+ switch (exit_code) {
case SVM_EXIT_READ_DR7:
break;
case SVM_EXIT_WRITE_DR7:
- if (!ghcb_rax_is_valid(ghcb))
+ if (!kvm_ghcb_rax_is_valid(svm))
goto vmgexit_err;
break;
case SVM_EXIT_RDTSC:
break;
case SVM_EXIT_RDPMC:
- if (!ghcb_rcx_is_valid(ghcb))
+ if (!kvm_ghcb_rcx_is_valid(svm))
goto vmgexit_err;
break;
case SVM_EXIT_CPUID:
- if (!ghcb_rax_is_valid(ghcb) ||
- !ghcb_rcx_is_valid(ghcb))
+ if (!kvm_ghcb_rax_is_valid(svm) ||
+ !kvm_ghcb_rcx_is_valid(svm))
goto vmgexit_err;
- if (ghcb_get_rax(ghcb) == 0xd)
- if (!ghcb_xcr0_is_valid(ghcb))
+ if (vcpu->arch.regs[VCPU_REGS_RAX] == 0xd)
+ if (!kvm_ghcb_xcr0_is_valid(svm))
goto vmgexit_err;
break;
case SVM_EXIT_INVD:
break;
case SVM_EXIT_IOIO:
- if (ghcb_get_sw_exit_info_1(ghcb) & SVM_IOIO_STR_MASK) {
- if (!ghcb_sw_scratch_is_valid(ghcb))
+ if (control->exit_info_1 & SVM_IOIO_STR_MASK) {
+ if (!kvm_ghcb_sw_scratch_is_valid(svm))
goto vmgexit_err;
} else {
- if (!(ghcb_get_sw_exit_info_1(ghcb) & SVM_IOIO_TYPE_MASK))
- if (!ghcb_rax_is_valid(ghcb))
+ if (!(control->exit_info_1 & SVM_IOIO_TYPE_MASK))
+ if (!kvm_ghcb_rax_is_valid(svm))
goto vmgexit_err;
}
break;
case SVM_EXIT_MSR:
- if (!ghcb_rcx_is_valid(ghcb))
+ if (!kvm_ghcb_rcx_is_valid(svm))
goto vmgexit_err;
- if (ghcb_get_sw_exit_info_1(ghcb)) {
- if (!ghcb_rax_is_valid(ghcb) ||
- !ghcb_rdx_is_valid(ghcb))
+ if (control->exit_info_1) {
+ if (!kvm_ghcb_rax_is_valid(svm) ||
+ !kvm_ghcb_rdx_is_valid(svm))
goto vmgexit_err;
}
break;
case SVM_EXIT_VMMCALL:
- if (!ghcb_rax_is_valid(ghcb) ||
- !ghcb_cpl_is_valid(ghcb))
+ if (!kvm_ghcb_rax_is_valid(svm) ||
+ !kvm_ghcb_cpl_is_valid(svm))
goto vmgexit_err;
break;
case SVM_EXIT_RDTSCP:
@@ -2518,19 +2525,19 @@ static int sev_es_validate_vmgexit(struct vcpu_svm *svm)
case SVM_EXIT_WBINVD:
break;
case SVM_EXIT_MONITOR:
- if (!ghcb_rax_is_valid(ghcb) ||
- !ghcb_rcx_is_valid(ghcb) ||
- !ghcb_rdx_is_valid(ghcb))
+ if (!kvm_ghcb_rax_is_valid(svm) ||
+ !kvm_ghcb_rcx_is_valid(svm) ||
+ !kvm_ghcb_rdx_is_valid(svm))
goto vmgexit_err;
break;
case SVM_EXIT_MWAIT:
- if (!ghcb_rax_is_valid(ghcb) ||
- !ghcb_rcx_is_valid(ghcb))
+ if (!kvm_ghcb_rax_is_valid(svm) ||
+ !kvm_ghcb_rcx_is_valid(svm))
goto vmgexit_err;
break;
case SVM_VMGEXIT_MMIO_READ:
case SVM_VMGEXIT_MMIO_WRITE:
- if (!ghcb_sw_scratch_is_valid(ghcb))
+ if (!kvm_ghcb_sw_scratch_is_valid(svm))
goto vmgexit_err;
break;
case SVM_VMGEXIT_NMI_COMPLETE:
@@ -2546,11 +2553,9 @@ static int sev_es_validate_vmgexit(struct vcpu_svm *svm)
return 0;
vmgexit_err:
- vcpu = &svm->vcpu;
-
if (reason == GHCB_ERR_INVALID_USAGE) {
vcpu_unimpl(vcpu, "vmgexit: ghcb usage %#x is not valid\n",
- ghcb->ghcb_usage);
+ svm->sev_es.ghcb->ghcb_usage);
} else if (reason == GHCB_ERR_INVALID_EVENT) {
vcpu_unimpl(vcpu, "vmgexit: exit code %#llx is not valid\n",
exit_code);
@@ -2560,11 +2565,8 @@ static int sev_es_validate_vmgexit(struct vcpu_svm *svm)
dump_ghcb(svm);
}
- /* Clear the valid entries fields */
- memset(ghcb->save.valid_bitmap, 0, sizeof(ghcb->save.valid_bitmap));
-
- ghcb_set_sw_exit_info_1(ghcb, 2);
- ghcb_set_sw_exit_info_2(ghcb, reason);
+ ghcb_set_sw_exit_info_1(svm->sev_es.ghcb, 2);
+ ghcb_set_sw_exit_info_2(svm->sev_es.ghcb, reason);
/* Resume the guest to "return" the error code. */
return 1;
@@ -2583,7 +2585,7 @@ void sev_es_unmap_ghcb(struct vcpu_svm *svm)
*/
if (svm->sev_es.ghcb_sa_sync) {
kvm_write_guest(svm->vcpu.kvm,
- ghcb_get_sw_scratch(svm->sev_es.ghcb),
+ svm->sev_es.sw_scratch,
svm->sev_es.ghcb_sa,
svm->sev_es.ghcb_sa_len);
svm->sev_es.ghcb_sa_sync = false;
@@ -2629,12 +2631,11 @@ void pre_sev_run(struct vcpu_svm *svm, int cpu)
static int setup_vmgexit_scratch(struct vcpu_svm *svm, bool sync, u64 len)
{
struct vmcb_control_area *control = &svm->vmcb->control;
- struct ghcb *ghcb = svm->sev_es.ghcb;
u64 ghcb_scratch_beg, ghcb_scratch_end;
u64 scratch_gpa_beg, scratch_gpa_end;
void *scratch_va;
- scratch_gpa_beg = ghcb_get_sw_scratch(ghcb);
+ scratch_gpa_beg = svm->sev_es.sw_scratch;
if (!scratch_gpa_beg) {
pr_err("vmgexit: scratch gpa not provided\n");
goto e_scratch;
@@ -2705,8 +2706,8 @@ static int setup_vmgexit_scratch(struct vcpu_svm *svm, bool sync, u64 len)
return 0;
e_scratch:
- ghcb_set_sw_exit_info_1(ghcb, 2);
- ghcb_set_sw_exit_info_2(ghcb, GHCB_ERR_INVALID_SCRATCH_AREA);
+ ghcb_set_sw_exit_info_1(svm->sev_es.ghcb, 2);
+ ghcb_set_sw_exit_info_2(svm->sev_es.ghcb, GHCB_ERR_INVALID_SCRATCH_AREA);
return 1;
}
@@ -2819,7 +2820,6 @@ int sev_handle_vmgexit(struct kvm_vcpu *vcpu)
struct vcpu_svm *svm = to_svm(vcpu);
struct vmcb_control_area *control = &svm->vmcb->control;
u64 ghcb_gpa, exit_code;
- struct ghcb *ghcb;
int ret;
/* Validate the GHCB */
@@ -2844,20 +2844,18 @@ int sev_handle_vmgexit(struct kvm_vcpu *vcpu)
}
svm->sev_es.ghcb = svm->sev_es.ghcb_map.hva;
- ghcb = svm->sev_es.ghcb_map.hva;
- trace_kvm_vmgexit_enter(vcpu->vcpu_id, ghcb);
-
- exit_code = ghcb_get_sw_exit_code(ghcb);
+ trace_kvm_vmgexit_enter(vcpu->vcpu_id, svm->sev_es.ghcb);
+ sev_es_sync_from_ghcb(svm);
ret = sev_es_validate_vmgexit(svm);
if (ret)
return ret;
- sev_es_sync_from_ghcb(svm);
- ghcb_set_sw_exit_info_1(ghcb, 0);
- ghcb_set_sw_exit_info_2(ghcb, 0);
+ ghcb_set_sw_exit_info_1(svm->sev_es.ghcb, 0);
+ ghcb_set_sw_exit_info_2(svm->sev_es.ghcb, 0);
+ exit_code = kvm_ghcb_get_sw_exit_code(control);
switch (exit_code) {
case SVM_VMGEXIT_MMIO_READ:
ret = setup_vmgexit_scratch(svm, true, control->exit_info_2);
@@ -2895,13 +2893,13 @@ int sev_handle_vmgexit(struct kvm_vcpu *vcpu)
break;
case 1:
/* Get AP jump table address */
- ghcb_set_sw_exit_info_2(ghcb, sev->ap_jump_table);
+ ghcb_set_sw_exit_info_2(svm->sev_es.ghcb, sev->ap_jump_table);
break;
default:
pr_err("svm: vmgexit: unsupported AP jump table request - exit_info_1=%#llx\n",
control->exit_info_1);
- ghcb_set_sw_exit_info_1(ghcb, 2);
- ghcb_set_sw_exit_info_2(ghcb, GHCB_ERR_INVALID_INPUT);
+ ghcb_set_sw_exit_info_1(svm->sev_es.ghcb, 2);
+ ghcb_set_sw_exit_info_2(svm->sev_es.ghcb, GHCB_ERR_INVALID_INPUT);
}
ret = 1;
diff --git a/arch/x86/kvm/svm/svm.h b/arch/x86/kvm/svm/svm.h
index f44751dd8d5d..ece0d5959567 100644
--- a/arch/x86/kvm/svm/svm.h
+++ b/arch/x86/kvm/svm/svm.h
@@ -190,10 +190,12 @@ struct vcpu_sev_es_state {
/* SEV-ES support */
struct sev_es_save_area *vmsa;
struct ghcb *ghcb;
+ u8 valid_bitmap[16];
struct kvm_host_map ghcb_map;
bool received_first_sipi;
/* SEV-ES scratch area support */
+ u64 sw_scratch;
void *ghcb_sa;
u32 ghcb_sa_len;
bool ghcb_sa_sync;
@@ -745,4 +747,28 @@ void sev_es_unmap_ghcb(struct vcpu_svm *svm);
void __svm_sev_es_vcpu_run(struct vcpu_svm *svm, bool spec_ctrl_intercepted);
void __svm_vcpu_run(struct vcpu_svm *svm, bool spec_ctrl_intercepted);
+#define DEFINE_KVM_GHCB_ACCESSORS(field) \
+ static __always_inline bool kvm_ghcb_##field##_is_valid(const struct vcpu_svm *svm) \
+ { \
+ return test_bit(GHCB_BITMAP_IDX(field), \
+ (unsigned long *)&svm->sev_es.valid_bitmap); \
+ } \
+ \
+ static __always_inline u64 kvm_ghcb_get_##field##_if_valid(struct vcpu_svm *svm, struct ghcb *ghcb) \
+ { \
+ return kvm_ghcb_##field##_is_valid(svm) ? ghcb->save.field : 0; \
+ } \
+
+DEFINE_KVM_GHCB_ACCESSORS(cpl)
+DEFINE_KVM_GHCB_ACCESSORS(rax)
+DEFINE_KVM_GHCB_ACCESSORS(rcx)
+DEFINE_KVM_GHCB_ACCESSORS(rdx)
+DEFINE_KVM_GHCB_ACCESSORS(rbx)
+DEFINE_KVM_GHCB_ACCESSORS(rsi)
+DEFINE_KVM_GHCB_ACCESSORS(sw_exit_code)
+DEFINE_KVM_GHCB_ACCESSORS(sw_exit_info_1)
+DEFINE_KVM_GHCB_ACCESSORS(sw_exit_info_2)
+DEFINE_KVM_GHCB_ACCESSORS(sw_scratch)
+DEFINE_KVM_GHCB_ACCESSORS(xcr0)
+
#endif
diff --git a/drivers/acpi/apei/hest.c b/drivers/acpi/apei/hest.c
index 6aef1ee5e1bd..8f146b1b4972 100644
--- a/drivers/acpi/apei/hest.c
@ -595,10 +263,10 @@ index c2c786eb95ab..4e3aa80cd5cf 100644
return ctx.rc;
}
diff --git a/drivers/acpi/resource.c b/drivers/acpi/resource.c
index 1dd8d5aebf67..0800a9d77558 100644
index a4d9f149b48d..5c48b981758c 100644
--- a/drivers/acpi/resource.c
+++ b/drivers/acpi/resource.c
@@ -470,6 +470,52 @@ static const struct dmi_system_id asus_laptop[] = {
@@ -470,6 +470,24 @@ static const struct dmi_system_id asus_laptop[] = {
{ }
};
@ -620,70 +288,42 @@ index 1dd8d5aebf67..0800a9d77558 100644
+ { }
+};
+
+static const struct dmi_system_id tongfang_gm_rg[] = {
+ {
+ .ident = "TongFang GMxRGxx/XMG CORE 15 (M22)/TUXEDO Stellaris 15 Gen4 AMD",
+ .matches = {
+ DMI_MATCH(DMI_BOARD_NAME, "GMxRGxx"),
+ },
+ },
+ { }
+};
+
+static const struct dmi_system_id maingear_laptop[] = {
+ {
+ .ident = "MAINGEAR Vector Pro 2 15",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Micro Electronics Inc"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "MG-VCP2-15A3070T"),
+ }
+ },
+ {
+ .ident = "MAINGEAR Vector Pro 2 17",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Micro Electronics Inc"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "MG-VCP2-17A3070T"),
+ },
+ },
+ { }
+};
+
static const struct dmi_system_id lg_laptop[] = {
static const struct dmi_system_id tongfang_gm_rg[] = {
{
.ident = "LG Electronics 17U70P",
@@ -493,6 +539,10 @@ struct irq_override_cmp {
.ident = "TongFang GMxRGxx/XMG CORE 15 (M22)/TUXEDO Stellaris 15 Gen4 AMD",
@@ -532,6 +550,8 @@ struct irq_override_cmp {
static const struct irq_override_cmp override_table[] = {
{ medion_laptop, 1, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, false },
{ asus_laptop, 1, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, false },
+ { lenovo_laptop, 6, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, true },
+ { lenovo_laptop, 10, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, true },
+ { tongfang_gm_rg, 1, ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_LOW, 1, true },
+ { maingear_laptop, 1, ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_LOW, 1, true },
{ lg_laptop, 1, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, false },
};
@@ -512,6 +562,16 @@ static bool acpi_dev_irq_override(u32 gsi, u8 triggering, u8 polarity,
return entry->override;
{ tongfang_gm_rg, 1, ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_LOW, 1, true },
{ maingear_laptop, 1, ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_LOW, 1, true },
{ pcspecialist_laptop, 1, ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_LOW, 1, true },
@@ -555,18 +575,6 @@ static bool acpi_dev_irq_override(u32 gsi, u8 triggering, u8 polarity,
}
+#ifdef CONFIG_X86
+ /*
+ * IRQ override isn't needed on modern AMD Zen systems and
+ * this override breaks active low IRQs on AMD Ryzen 6000 and
+ * newer systems. Skip it.
+ */
+ if (boot_cpu_has(X86_FEATURE_ZEN))
+ return false;
+#endif
+
return true;
}
#ifdef CONFIG_X86
- /*
- * Always use the MADT override info, except for the i8042 PS/2 ctrl
- * IRQs (1 and 12). For these the DSDT IRQ settings should sometimes
- * be used otherwise PS/2 keyboards / mice will not work.
- */
- if (gsi != 1 && gsi != 12)
- return true;
-
- /* If the override comes from an INT_SRC_OVR MADT entry, honor it. */
- if (acpi_int_src_ovr[gsi])
- return true;
-
/*
* IRQ override isn't needed on modern AMD Zen systems and
* this override breaks active low IRQs on AMD Ryzen 6000 and
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index 0c6f06abe3f4..f66b85b2c108 100644
index c28c8d5ca0c8..618ebf3f9436 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -1746,6 +1746,15 @@ static bool acpi_device_enumeration_by_parent(struct acpi_device *device)
@@ -1747,6 +1747,15 @@ static bool acpi_device_enumeration_by_parent(struct acpi_device *device)
if (!acpi_match_device_ids(device, ignore_serial_bus_ids))
return false;
@ -1026,19 +666,6 @@ index 3c197db42c9d..16e4a2e90fae 100644
pd = sysfb_create_simplefb(si, &mode);
if (!IS_ERR(pd))
goto unlock_mutex;
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
index 9bc86deac9e8..b885c39bd16b 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
@@ -1320,7 +1320,7 @@ int compute_mst_dsc_configs_for_state(struct drm_atomic_state *state,
if (computed_streams[i])
continue;
- if (!res_pool->funcs->remove_stream_from_ctx ||
+ if (res_pool->funcs->remove_stream_from_ctx &&
res_pool->funcs->remove_stream_from_ctx(stream->ctx->dc, dc_state, stream) != DC_OK)
return -EINVAL;
diff --git a/drivers/hid/hid-rmi.c b/drivers/hid/hid-rmi.c
index 84e7ba5314d3..efc96776f761 100644
--- a/drivers/hid/hid-rmi.c

View File

@ -1,3 +1,3 @@
SHA512 (linux-6.4.10.tar.xz) = e490f525f1d9feb1af2d8f46a6f1dd322e2ce3748856fad47b6a1df3a603f036365656e6413cc52b45edfa0d2c89ed2e7b008ab1d164c07a10dddc8b3e18ea79
SHA512 (kernel-abi-stablelists-6.4.10.tar.bz2) = 127f7ec5fead55c9775ff5a7626f7e8b10b86d4a6bdf11a4fe89b03d6e728c6a9ca5e2446a2ecbb28004a060580c4881df6a5637c44df3671f8d3c526f7ac1f4
SHA512 (kernel-kabi-dw-6.4.10.tar.bz2) = bc232d963c21d74f5f77b5985d84ae10c4842c912f3b4285e51a863b5a8988c15b10b94809c73b9fa25ce050202c4971af134bddfcee509ad041abbbbb59ab87
SHA512 (linux-6.4.11.tar.xz) = ca3456dd1339849ab12381dc0bd3b5f3a7c88824f38837b064602487e1b0880d8a55c665b254426fc2bfc1a5a513f7a4d767eec333d9c1c214d92bb6f7701813
SHA512 (kernel-abi-stablelists-6.4.11.tar.bz2) = 60b1ba8a5aba1d774302da430f5c9569cf0b45018baf29ecc40286ce743ab32cb4e4c6810beb9cba765fae5be0f2bbf2f4e9615bb0ecf8990f05bc1baf6db150
SHA512 (kernel-kabi-dw-6.4.11.tar.bz2) = a711780dcd1677736e03358ef2efd160fe11e9280851d221e75ae62d09cae4dad68f4b590437be95a51e0d65e75c50f331a72cd4edaafda8d596cb90277b5f9c