x86 fixes
Subsystems (2)
Linus,
Please pull the latest x86/urgent Git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-urgent-2026-07-11
for you to fetch changes up to 4c2509f3b79756679a02bea649c6a7501b58f52c:
Misc x86 fixes:
- Fix resctrl resource leak (Tony Luck)
- Fix resctrl umount race (Tony Luck)
- Fix resctrl double-free (Reinette Chatre)
- Fix x86 VGA display fallback logic during bootup on certain multi-GPU systems (Mario Limonciello)
- Re-add a WBINVD call to the SNP bootstrap path to fix an SNP regression (Tycho Andersen)
Thanks,
Ingo
------------------>
Mario Limonciello (1):
x86/video: Only fall back to vga_default_device() without screen info
Reinette Chatre (1):
fs/resctrl: Fix double-add of pseudo-locked region's RMID to free list
Tony Luck (2):
fs/resctrl: Free mon_data structures on rdt_get_tree() failure fs/resctrl: Fix use-after-free during unmount
Tycho Andersen (AMD) (1):
x86/virt/sev: Revert "Drop WBINVD before setting MSR_AMD64_SYSCFG_SNP_EN"
arch/x86/video/video-common.c | 23 ++++++++++++++--------- arch/x86/virt/svm/sev.c | 2 ++ fs/resctrl/rdtgroup.c | 33 ++++++++++++++++++++++++++------- 3 files changed, 42 insertions(+), 16 deletions(-)
arch/x86/video/video-common.c +14 -9
@@ -43,21 +43,26 @@ bool video_is_primary_device(struct device *dev)if (!pci_is_display (pdev))return false; -if (pdev ==vga_default_device ()) -return true; -#ifdef CONFIG_SCREEN_INFO numres =screen_info_resources (si, res,ARRAY_SIZE (res)); -for (i =0 ; i < numres; ++i) { -if (!(res[i].flags &IORESOURCE_MEM )) -continue ; +if (numres >0 ) { +for (i =0 ; i < numres; ++i) { +if (!(res[i].flags &IORESOURCE_MEM )) +continue ; + +if (pci_find_resource (pdev, &res[i])) +return true; + } -if (pci_find_resource (pdev, &res[i])) -return true; +return false; }#endif -return false; +/* +* No framebuffer was set up by the firmware/bootloader, so fall back +* to the default VGA device. +*/ +return pdev ==vga_default_device (); }EXPORT_SYMBOL (video_is_primary_device);
arch/x86/virt/svm/sev.c +2 -0
@@ -536,6 +536,8 @@ int snp_prepare(void) goto unlock; } +wbinvd_on_all_cpus (); +/* * MtrrFixDramModEn is not shared between threads on a core, * therefore it must be set on all CPUs prior to enabling SNP.
fs/resctrl/rdtgroup.c +26 -7
@@ -74,6 +74,8 @@ static int rdtgroup_setup_root(struct rdt_fs_context *ctx);static void rdtgroup_destroy_root (void ); +static void mon_put_kn_priv (void ); +struct dentry *debugfs_resctrl;/*
@@ -585,14 +587,20 @@ static ssize_t rdtgroup_cpus_write(struct kernfs_open_file *of,* * On resource group creation via a mkdir, an extra kernfs_node reference is * taken to ensure that the rdtgroup structure remains accessible for the -* rdtgroup_kn_unlock() calls where it is removed. +* rdtgroup_kn_unlock() calls where it is removed. The default group is +* statically allocated: it does not have an extra reference but will have +* RDT_DELETED set on unmount to support safe access to its associated files +* via rdtgroup_kn_lock_live/rdtgroup_kn_unlock(). * -* Drop the extra reference here, then free the rdtgroup structure. +* For all but the default group: drop the extra reference, then free the +* rdtgroup structure. * * Return: void */ static void rdtgroup_remove (struct rdtgroup *rdtgrp) { +if (rdtgrp == &rdtgroup_default) +return ;kernfs_put (rdtgrp->kn);kfree (rdtgrp); }
@@ -2812,6 +2820,12 @@ static int rdt_get_tree(struct fs_context *fc) goto out; } +/* Avoid races from pending operations from a previous mount */ +if (atomic_read (&rdtgroup_default.waitcount) !=0 ) { + ret = -EBUSY ; + goto out; + } + ret =setup_rmid_lru_list ();if (ret) goto out;
@@ -2893,6 +2907,7 @@ static int rdt_get_tree(struct fs_context *fc)kernfs_remove (kn_mondata); out_mongrp:if (resctrl_arch_mon_capable ()) { +mon_put_kn_priv ();rdtgroup_unassign_cntrs (&rdtgroup_default);kernfs_remove (kn_mongrp); }
@@ -3069,10 +3084,6 @@ static void rmdir_all_sub(void)if (rdtgrp == &rdtgroup_default)continue ; -if (rdtgrp->mode ==RDT_MODE_PSEUDO_LOCKSETUP || - rdtgrp->mode ==RDT_MODE_PSEUDO_LOCKED ) -rdtgroup_pseudo_lock_remove (rdtgrp); -/* * Give any CPUs back to the default group. We cannot copy * cpu_online_mask because a CPU might have executed the
@@ -3083,7 +3094,13 @@ static void rmdir_all_sub(void)rdtgroup_unassign_cntrs (rdtgrp); -free_rmid (rdtgrp->closid, rdtgrp->mon.rmid); +if (rdtgrp->mode ==RDT_MODE_PSEUDO_LOCKSETUP || + rdtgrp->mode ==RDT_MODE_PSEUDO_LOCKED ) { +rdtgroup_pseudo_lock_remove (rdtgrp); + }else { +/* Pseudo-locked group's RMID is freed during setup. */ +free_rmid (rdtgrp->closid, rdtgrp->mon.rmid); + }kernfs_remove (rdtgrp->kn);list_del (&rdtgrp->rdtgroup_list);
@@ -3174,6 +3191,7 @@ static void resctrl_fs_teardown(void)mon_put_kn_priv ();rdt_pseudo_lock_release (); rdtgroup_default.mode =RDT_MODE_SHAREABLE ; + rdtgroup_default.flags =RDT_DELETED ;closid_exit ();schemata_list_destroy ();rdtgroup_destroy_root ();
@@ -4274,6 +4292,7 @@ static int rdtgroup_setup_root(struct rdt_fs_context *ctx) ctx->kfc.root = rdt_root; rdtgroup_default.kn =kernfs_root_to_node (rdt_root); + rdtgroup_default.flags =0 ;return 0 ; }
The pull request you sent on Sat, 11 Jul 2026 13:31:51 +0200:
The pull request you sent on Sat, 11 Jul 2026 13:31:51 +0200:
Quoted 1 line
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.gitx86-urgent-2026-07-11
has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/b37fa0d0a3cd39413355d4f748d2caf8002635f2
Thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/prtracker.html