diff --git a/Makefile.rhelver b/Makefile.rhelver index e810b8948..95b9fd7b5 100644 --- a/Makefile.rhelver +++ b/Makefile.rhelver @@ -12,7 +12,7 @@ RHEL_MINOR = 99 # # Use this spot to avoid future merge conflicts. # Do not trim this comment. -RHEL_RELEASE = 1 +RHEL_RELEASE = 0 # # RHEL_REBASE_NUM diff --git a/Patchlist.changelog b/Patchlist.changelog index 16326e653..1816ea228 100644 --- a/Patchlist.changelog +++ b/Patchlist.changelog @@ -1,3 +1,9 @@ +https://gitlab.com/cki-project/kernel-ark/-/commit/7b8efc5af560ec18096b99f3d8b1b6b6ef101ee5 + 7b8efc5af560ec18096b99f3d8b1b6b6ef101ee5 KVM: nVMX: Put vmcs12 pages if nested VM-Enter fails due to invalid guest state + +https://gitlab.com/cki-project/kernel-ark/-/commit/e2e035b8422fed989b46f9679c630cdf1b0bcaae + e2e035b8422fed989b46f9679c630cdf1b0bcaae drm/amd: Create a device link between APU display and XHCI devices + https://gitlab.com/cki-project/kernel-ark/-/commit/5585ecd6249f39a050e0abf77338d180faaa9faf 5585ecd6249f39a050e0abf77338d180faaa9faf xfs: resample the data fork mapping after cycling ILOCK diff --git a/kernel.changelog b/kernel.changelog index a8e2256e7..fbfe3caa2 100644 --- a/kernel.changelog +++ b/kernel.changelog @@ -1,3 +1,9 @@ +* Sat Jul 18 2026 Justin M. Forbes [7.1.4-0] +- KVM: nVMX: Put vmcs12 pages if nested VM-Enter fails due to invalid guest state (Sean Christopherson) +- drm/amd: Create a device link between APU display and XHCI devices (Mario Limonciello) +- Linux v7.1.4 +Resolves: + * Tue Jul 14 2026 Justin M. Forbes [7.1.3-1] - xfs: resample the data fork mapping after cycling ILOCK (Darrick J. Wong) - redhat: configs: fedora: Enable Sony IMX471 image sensor (Kate Hsuan) diff --git a/kernel.spec b/kernel.spec index 1521232a4..9ad86bc86 100644 --- a/kernel.spec +++ b/kernel.spec @@ -187,18 +187,18 @@ Summary: The Linux kernel # the --with-release option overrides this setting.) %define debugbuildsenabled 1 # define buildid .local -%define specrpmversion 7.1.3 -%define specversion 7.1.3 +%define specrpmversion 7.1.4 +%define specversion 7.1.4 %define patchversion 7.1 -%define pkgrelease 101 +%define pkgrelease 100 %define kversion 7 -%define tarfile_release 7.1.3 +%define tarfile_release 7.1.4 # This is needed to do merge window version magic %define patchlevel 1 # This allows pkg_release to have configurable %%{?dist} tag -%define specrelease 101%{?buildid}%{?dist} +%define specrelease 100%{?buildid}%{?dist} # This defines the kabi tarball version -%define kabiversion 7.1.3 +%define kabiversion 7.1.4 # If this variable is set to 1, a bpf selftests build failure will cause a # fatal kernel package build error @@ -4857,6 +4857,11 @@ fi\ # # %changelog +* Sat Jul 18 2026 Justin M. Forbes [7.1.4-0] +- KVM: nVMX: Put vmcs12 pages if nested VM-Enter fails due to invalid guest state (Sean Christopherson) +- drm/amd: Create a device link between APU display and XHCI devices (Mario Limonciello) +- Linux v7.1.4 + * Tue Jul 14 2026 Justin M. Forbes [7.1.3-1] - xfs: resample the data fork mapping after cycling ILOCK (Darrick J. Wong) - redhat: configs: fedora: Enable Sony IMX471 image sensor (Kate Hsuan) diff --git a/patch-7.1-redhat.patch b/patch-7.1-redhat.patch index 9a45c3407..f2db0e4bc 100644 --- a/patch-7.1-redhat.patch +++ b/patch-7.1-redhat.patch @@ -7,6 +7,7 @@ arch/s390/kernel/ipl.c | 5 + arch/s390/kernel/setup.c | 4 + arch/x86/kernel/setup.c | 22 +- + arch/x86/kvm/vmx/nested.c | 2 + crypto/akcipher.c | 3 +- crypto/dh.c | 25 + crypto/drbg.c | 18 +- @@ -26,6 +27,9 @@ drivers/firmware/efi/libstub/fdt.c | 5 + drivers/firmware/efi/libstub/secureboot.c | 14 +- drivers/firmware/efi/secureboot.c | 38 + + drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 12 + + drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h | 11 + + .../gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c | 45 + drivers/gpu/drm/i915/display/intel_ddi.c | 11 +- drivers/hwtracing/coresight/coresight-etm4x-core.c | 19 + drivers/iommu/iommu.c | 22 + @@ -36,7 +40,6 @@ drivers/pci/quirks.c | 24 + drivers/platform/x86/intel/int3472/discrete.c | 18 + drivers/usb/core/hub.c | 7 + - fs/xfs/xfs_reflink.c | 36 + include/linux/crypto.h | 3 + include/linux/efi.h | 22 +- include/linux/lsm_hook_defs.h | 1 + @@ -53,13 +56,13 @@ tools/testing/selftests/bpf/DENYLIST.rhel | 76 ++ tools/testing/selftests/bpf/Makefile | 2 +- tools/testing/selftests/bpf/prog_tests/ksyms_btf.c | 31 - - 55 files changed, 2000 insertions(+), 142 deletions(-) + 58 files changed, 2034 insertions(+), 142 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS -index c8d4b913f26c..d0ad37bae20d 100644 +index f74da642290a..06c8bb2075e6 100644 --- a/MAINTAINERS +++ b/MAINTAINERS -@@ -24965,6 +24965,12 @@ T: git git://linuxtv.org/media.git +@@ -24964,6 +24964,12 @@ T: git git://linuxtv.org/media.git F: Documentation/devicetree/bindings/media/i2c/sony,imx415.yaml F: drivers/media/i2c/imx415.c @@ -73,7 +76,7 @@ index c8d4b913f26c..d0ad37bae20d 100644 M: Maxim Levitsky M: Alex Dubov diff --git a/Makefile b/Makefile -index 9e405218162b..44f47144ebf6 100644 +index b3496dd21312..cb88d3636564 100644 --- a/Makefile +++ b/Makefile @@ -356,6 +356,17 @@ ifneq ($(filter install,$(MAKECMDGOALS)),) @@ -94,7 +97,7 @@ index 9e405218162b..44f47144ebf6 100644 ifdef mixed-build # =========================================================================== # We're called with mixed targets (*config and build targets). -@@ -1415,6 +1426,8 @@ uapi-asm-generic: +@@ -1418,6 +1429,8 @@ uapi-asm-generic: # Generate some files # --------------------------------------------------------------------------- @@ -103,7 +106,7 @@ index 9e405218162b..44f47144ebf6 100644 # KERNELRELEASE can change from a few different places, meaning version.h # needs to be updated, so this check is forced on all builds -@@ -2080,6 +2093,23 @@ endif +@@ -2083,6 +2096,23 @@ endif ifdef CONFIG_MODULES @@ -302,6 +305,19 @@ index 46882ce79c3a..9c73814c31e0 100644 reserve_initrd(); +diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c +index 3fe88f29be7a..f6fd3775ddac 100644 +--- a/arch/x86/kvm/vmx/nested.c ++++ b/arch/x86/kvm/vmx/nested.c +@@ -3755,6 +3755,8 @@ enum nvmx_vmentry_status nested_vmx_enter_non_root_mode(struct kvm_vcpu *vcpu, + if (!from_vmentry) + return NVMX_VMENTRY_VMEXIT; + ++ nested_put_vmcs12_pages(vcpu); ++ + load_vmcs12_host_state(vcpu, vmcs12); + vmcs12->vm_exit_reason = exit_reason.full; + if (enable_shadow_vmcs || nested_vmx_is_evmptr12_valid(vmx)) diff --git a/crypto/akcipher.c b/crypto/akcipher.c index dfe87b3ce183..cd1302ca3b36 100644 --- a/crypto/akcipher.c @@ -357,10 +373,10 @@ index 7ad4768716c8..01ccc24db074 100644 } diff --git a/crypto/drbg.c b/crypto/drbg.c -index 9204e6edb426..5c10baf70071 100644 +index e3065fb9541b..ff5393e6797e 100644 --- a/crypto/drbg.c +++ b/crypto/drbg.c -@@ -1270,13 +1270,14 @@ static int drbg_generate(struct drbg_state *drbg, +@@ -1271,13 +1271,14 @@ static int drbg_generate(struct drbg_state *drbg, * Wrapper around drbg_generate which can pull arbitrary long strings * from the DRBG without hitting the maximum request limitation. * @@ -377,7 +393,7 @@ index 9204e6edb426..5c10baf70071 100644 { unsigned int len = 0; unsigned int slice = 0; -@@ -1286,6 +1287,8 @@ static int drbg_generate_long(struct drbg_state *drbg, +@@ -1287,6 +1288,8 @@ static int drbg_generate_long(struct drbg_state *drbg, slice = ((buflen - len) / drbg_max_request_bytes(drbg)); chunk = slice ? drbg_max_request_bytes(drbg) : (buflen - len); mutex_lock(&drbg->drbg_mutex); @@ -386,7 +402,7 @@ index 9204e6edb426..5c10baf70071 100644 err = drbg_generate(drbg, buf + len, chunk, addtl); mutex_unlock(&drbg->drbg_mutex); if (0 > err) -@@ -1687,6 +1690,7 @@ static int drbg_kcapi_random(struct crypto_rng *tfm, +@@ -1688,6 +1691,7 @@ static int drbg_kcapi_random(struct crypto_rng *tfm, struct drbg_state *drbg = crypto_rng_ctx(tfm); struct drbg_string *addtl = NULL; struct drbg_string string; @@ -394,7 +410,7 @@ index 9204e6edb426..5c10baf70071 100644 if (slen) { /* linked list variable is now local to allow modification */ -@@ -1694,7 +1698,15 @@ static int drbg_kcapi_random(struct crypto_rng *tfm, +@@ -1695,7 +1699,15 @@ static int drbg_kcapi_random(struct crypto_rng *tfm, addtl = &string; } @@ -1356,6 +1372,135 @@ index 000000000000..de0a3714a5d4 + } + } +} +diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c +index 8faf7de7aaa9..f65bb1dc44ac 100644 +--- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c ++++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c +@@ -1365,6 +1365,14 @@ static void smu_feature_cap_init(struct smu_context *smu) + bitmap_zero(fea_cap->cap_map, SMU_FEATURE_CAP_ID__COUNT); + } + ++static int smu_set_power_dep(struct smu_context *smu, bool enable) ++{ ++ if (!smu->ppt_funcs->set_power_dep) ++ return 0; ++ ++ return smu->ppt_funcs->set_power_dep(smu, enable); ++} ++ + static int smu_sw_init(struct amdgpu_ip_block *ip_block) + { + struct amdgpu_device *adev = ip_block->adev; +@@ -1426,6 +1434,8 @@ static int smu_sw_init(struct amdgpu_ip_block *ip_block) + if (!smu->ppt_funcs->get_fan_control_mode) + smu->adev->pm.no_fan = true; + ++ smu_set_power_dep(smu, true); ++ + return 0; + } + +@@ -1448,6 +1458,8 @@ static int smu_sw_fini(struct amdgpu_ip_block *ip_block) + + smu_fini_microcode(smu); + ++ smu_set_power_dep(smu, false); ++ + return 0; + } + +diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h +index d76e0b005308..e14bcc3f937c 100644 +--- a/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h ++++ b/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h +@@ -749,6 +749,9 @@ struct smu_context { + bool pm_enabled; + bool is_apu; + ++ /* Power dependency link from an integrated xHCI controller to the GPU */ ++ struct device_link *usb_power_link; ++ + uint32_t smc_driver_if_version; + uint32_t smc_fw_if_version; + uint32_t smc_fw_version; +@@ -1654,6 +1657,14 @@ struct pptable_funcs { + * Return: ras_smu_drv * + */ + int (*get_ras_smu_drv)(struct smu_context *smu, const struct ras_smu_drv **ras_smu_drv); ++ ++ /** ++ * @set_power_dep: Create or destroy a power dependency link ++ * from an integrated xHCI controller to the GPU so that the GPU is ++ * resumed before the USB controller during PM resume. @enable is true ++ * to create the link and false to tear it down. ++ */ ++ int (*set_power_dep)(struct smu_context *smu, bool enable); + }; + + typedef enum { +diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c +index 75719c47a41e..3d73f2050bbe 100644 +--- a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c ++++ b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c +@@ -1701,6 +1701,50 @@ static int smu_v14_0_0_restore_user_od_settings(struct smu_context *smu) + return 0; + } + ++/* ++ * Link any xHCI controller sharing the GPU's PCIe root port as a consumer ++ * of the GPU so the GPU resumes first, avoiding an xHCI resume race. ++ */ ++static int smu_v14_0_0_set_power_dep(struct smu_context *smu, bool enable) ++{ ++ struct amdgpu_device *adev = smu->adev; ++ struct pci_dev *gpu_pdev = adev->pdev; ++ struct pci_dev *root_port, *usb_pdev = NULL; ++ struct device_link *link; ++ ++ if (!enable) { ++ if (smu->usb_power_link) { ++ device_link_del(smu->usb_power_link); ++ smu->usb_power_link = NULL; ++ } ++ return 0; ++ } ++ ++ root_port = pcie_find_root_port(gpu_pdev); ++ while ((usb_pdev = pci_get_class(PCI_CLASS_SERIAL_USB_XHCI, usb_pdev))) { ++ struct pci_dev *usb_root; ++ ++ usb_root = pcie_find_root_port(usb_pdev); ++ if (usb_root != root_port) ++ continue; ++ ++ /* Create device link: USB (consumer) depends on GPU (supplier) */ ++ link = device_link_add(&usb_pdev->dev, &gpu_pdev->dev, ++ DL_FLAG_STATELESS | DL_FLAG_PM_RUNTIME); ++ if (link) { ++ smu->usb_power_link = link; ++ drm_info(adev_to_drm(adev), "USB controller %s D0 power state depends on %s\n", ++ pci_name(usb_pdev), pci_name(gpu_pdev)); ++ /* Only create one link for the first USB controller found */ ++ break; ++ } ++ } ++ ++ pci_dev_put(usb_pdev); ++ ++ return 0; ++} ++ + static const struct pptable_funcs smu_v14_0_0_ppt_funcs = { + .check_fw_status = smu_v14_0_check_fw_status, + .check_fw_version = smu_cmn_check_fw_version, +@@ -1734,6 +1778,7 @@ static const struct pptable_funcs smu_v14_0_0_ppt_funcs = { + .dpm_set_umsch_mm_enable = smu_v14_0_0_set_umsch_mm_enable, + .get_dpm_clock_table = smu_v14_0_common_get_dpm_table, + .set_mall_enable = smu_v14_0_common_set_mall_enable, ++ .set_power_dep = smu_v14_0_0_set_power_dep, + }; + + static void smu_v14_0_0_init_msg_ctl(struct smu_context *smu) diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c index ebefa889bc8c..0987eee38bd1 100644 --- a/drivers/gpu/drm/i915/display/intel_ddi.c @@ -2532,10 +2677,10 @@ index fc6608e33de4..8cfa3282bf08 100644 }; diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c -index caaed1a01dc0..ec7b94de5515 100644 +index dd0025d3914e..e57d10dc843c 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c -@@ -4506,6 +4506,30 @@ static void quirk_aspeed_pci_bridge_no_alias(struct pci_dev *pdev) +@@ -4491,6 +4491,30 @@ static void quirk_aspeed_pci_bridge_no_alias(struct pci_dev *pdev) } DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ASPEED, 0x1150, quirk_aspeed_pci_bridge_no_alias); @@ -2613,74 +2758,6 @@ index 24960ba9caa9..32597cdb72ef 100644 /* Lock the device, then check to see if we were * disconnected while waiting for the lock to succeed. */ usb_lock_device(hdev); -diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c -index 251dec48f0e3..e7db02579f28 100644 ---- a/fs/xfs/xfs_reflink.c -+++ b/fs/xfs/xfs_reflink.c -@@ -440,6 +440,7 @@ xfs_reflink_fill_cow_hole( - struct xfs_mount *mp = ip->i_mount; - struct xfs_trans *tp; - xfs_filblks_t resaligned; -+ unsigned int seq_before = READ_ONCE(ip->i_df.if_seq); - unsigned int dblocks = 0, rblocks = 0; - int nimaps; - int error; -@@ -465,6 +466,22 @@ xfs_reflink_fill_cow_hole( - - *lockmode = XFS_ILOCK_EXCL; - -+ /* -+ * The data fork mapping may have changed while we dropped the ILOCK -+ * (a racing O_DIRECT writer under IOLOCK_SHARED can complete a full -+ * CoW cycle including xfs_reflink_end_cow(), which remaps this offset -+ * and drops the refcount of the old shared block). Re-read it so the -+ * shared-status recheck below and the caller's in-place iomap both -+ * operate on the current mapping rather than a stale physical block. -+ */ -+ if (seq_before != READ_ONCE(ip->i_df.if_seq)) { -+ nimaps = 1; -+ error = xfs_bmapi_read(ip, imap->br_startoff, -+ imap->br_blockcount, imap, &nimaps, 0); -+ if (error) -+ goto out_trans_cancel; -+ } -+ - error = xfs_find_trim_cow_extent(ip, imap, cmap, shared, &found); - if (error || !*shared) - goto out_trans_cancel; -@@ -511,6 +528,8 @@ xfs_reflink_fill_delalloc( - bool found; - - do { -+ unsigned int seq_before = READ_ONCE(ip->i_df.if_seq); -+ - xfs_iunlock(ip, *lockmode); - *lockmode = 0; - -@@ -521,6 +540,23 @@ xfs_reflink_fill_delalloc( - - *lockmode = XFS_ILOCK_EXCL; - -+ /* -+ * The data fork mapping may have changed while we dropped the -+ * ILOCK (a racing O_DIRECT writer under IOLOCK_SHARED can -+ * complete a full CoW cycle including xfs_reflink_end_cow(), -+ * which remaps this offset and drops the refcount of the old -+ * shared block). Re-read it so the shared-status recheck -+ * below and the caller's in-place iomap both operate on the -+ * current mapping rather than a stale physical block. -+ */ -+ if (seq_before != READ_ONCE(ip->i_df.if_seq)) { -+ nimaps = 1; -+ error = xfs_bmapi_read(ip, imap->br_startoff, -+ imap->br_blockcount, imap, &nimaps, 0); -+ if (error) -+ goto out_trans_cancel; -+ } -+ - error = xfs_find_trim_cow_extent(ip, imap, cmap, shared, - &found); - if (error || !*shared) diff --git a/include/linux/crypto.h b/include/linux/crypto.h index a2137e19be7d..df268ca70170 100644 --- a/include/linux/crypto.h diff --git a/sources b/sources index 62a88d747..d4c04accb 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -SHA512 (linux-7.1.3.tar.xz) = 8c2471239ff082532d0813d797a137ad353822a0d5bdbe48c9d981668977167ce2ae9d86a912d111bb4523eebfbc4b17379eb6c6ec7d17ec6503b675f32f7da3 -SHA512 (kernel-abi-stablelists-7.1.3.tar.xz) = 282979c2a89094ecf7e4a4c059d9b5e756a0aa9bb98a762e3df0f4718baa9901682bc4748c68bb8e0118c735100ecd31350d78e06d4a50e33a947d7ad0cbe91c -SHA512 (kernel-kabi-dw-7.1.3.tar.xz) = 3f1dcad0b9e39b7415e90d8a29ac6678304422389e1cec322e6af4bb179c632524674d906e22b93f4e16f0573261dab05ba85c6d05a7a896c1156cedd5c893ee +SHA512 (linux-7.1.4.tar.xz) = 164f7c0353dfcf1eaacf886530273271d473314a9f99d9441a63bfc24368c8d2f194552bd4800dd440bf824598cbd74263b1b544dc61307517b8208acf9b4a7a +SHA512 (kernel-abi-stablelists-7.1.4.tar.xz) = d2ed3ee6a6b8f1aae32eeeba1e22e599e92f0a653083ae27e26b373f932a1a2fb052fe1ae4f5a4ea2210e84527b489d5115764ef0f46f01ae901810ed1fcbaf3 +SHA512 (kernel-kabi-dw-7.1.4.tar.xz) = d8d89633a4474b1ad9522ab066c97907e217f72fde3290b3a02bbddadd79b5d82514ae1a6b0b1dccd770cd0717df0a45e9e6aaa4bc9f45aba1ee9be44d1e832b