release 6.14.7
This commit is contained in:
2
debian/bin/genpatch-pfkernel
vendored
2
debian/bin/genpatch-pfkernel
vendored
@@ -7,7 +7,7 @@ w=$(git rev-parse --path-format=absolute --show-toplevel) ; : "${w:?}" ; cd "$w"
|
|||||||
|
|
||||||
dst='debian/patches/pf-tmp'
|
dst='debian/patches/pf-tmp'
|
||||||
src='../linux-extras'
|
src='../linux-extras'
|
||||||
branches='amd-pstate cpuidle crypto fixes kbuild smb zstd'
|
branches='amd-pstate cpuidle crypto fixes invlpgb kbuild smb zstd'
|
||||||
|
|
||||||
if [ -d "${dst}" ] ; then rm -rf "${dst}" ; fi
|
if [ -d "${dst}" ] ; then rm -rf "${dst}" ; fi
|
||||||
mkdir -p "${dst}"
|
mkdir -p "${dst}"
|
||||||
|
7
debian/changelog
vendored
7
debian/changelog
vendored
@@ -1,3 +1,10 @@
|
|||||||
|
linux (6.14.7-1) sid; urgency=medium
|
||||||
|
|
||||||
|
* New upstream stable update:
|
||||||
|
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.14.7
|
||||||
|
|
||||||
|
-- Konstantin Demin <rockdrilla@gmail.com> Sun, 18 May 2025 11:56:49 +0300
|
||||||
|
|
||||||
linux (6.14.6-1) sid; urgency=medium
|
linux (6.14.6-1) sid; urgency=medium
|
||||||
|
|
||||||
* New upstream stable update:
|
* New upstream stable update:
|
||||||
|
@@ -22,7 +22,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
|
|
||||||
--- a/Documentation/admin-guide/kernel-parameters.txt
|
--- a/Documentation/admin-guide/kernel-parameters.txt
|
||||||
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||||
@@ -2247,6 +2247,8 @@
|
@@ -2264,6 +2264,8 @@
|
||||||
bypassed by not enabling DMAR with this option. In
|
bypassed by not enabling DMAR with this option. In
|
||||||
this case, gfx device will use physical address for
|
this case, gfx device will use physical address for
|
||||||
DMA.
|
DMA.
|
||||||
|
@@ -29,7 +29,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
|
|
||||||
--- a/Documentation/admin-guide/kernel-parameters.txt
|
--- a/Documentation/admin-guide/kernel-parameters.txt
|
||||||
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||||
@@ -6984,6 +6984,10 @@
|
@@ -7002,6 +7002,10 @@
|
||||||
later by a loaded module cannot be set this way.
|
later by a loaded module cannot be set this way.
|
||||||
Example: sysctl.vm.swappiness=40
|
Example: sysctl.vm.swappiness=40
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
Ignore sysrq setting - this boot parameter will
|
Ignore sysrq setting - this boot parameter will
|
||||||
--- a/arch/x86/Kconfig
|
--- a/arch/x86/Kconfig
|
||||||
+++ b/arch/x86/Kconfig
|
+++ b/arch/x86/Kconfig
|
||||||
@@ -3189,6 +3189,14 @@ config COMPAT_32
|
@@ -3201,6 +3201,14 @@ config COMPAT_32
|
||||||
select HAVE_UID16
|
select HAVE_UID16
|
||||||
select OLD_SIGSUSPEND3
|
select OLD_SIGSUSPEND3
|
||||||
|
|
||||||
|
@@ -30,7 +30,7 @@ this reverts following commit:
|
|||||||
|
|
||||||
--- a/tools/objtool/check.c
|
--- a/tools/objtool/check.c
|
||||||
+++ b/tools/objtool/check.c
|
+++ b/tools/objtool/check.c
|
||||||
@@ -4773,10 +4773,14 @@ int check(struct objtool_file *file)
|
@@ -4774,10 +4774,14 @@ int check(struct objtool_file *file)
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
@@ -25,7 +25,7 @@ dependency on CONFIG_ARC and adds RUSTFLAGS.
|
|||||||
KBUILD_RUSTFLAGS += -Copt-level=s
|
KBUILD_RUSTFLAGS += -Copt-level=s
|
||||||
--- a/init/Kconfig
|
--- a/init/Kconfig
|
||||||
+++ b/init/Kconfig
|
+++ b/init/Kconfig
|
||||||
@@ -1470,6 +1470,12 @@ config CC_OPTIMIZE_FOR_PERFORMANCE
|
@@ -1473,6 +1473,12 @@ config CC_OPTIMIZE_FOR_PERFORMANCE
|
||||||
with the "-O2" compiler flag for best performance and most
|
with the "-O2" compiler flag for best performance and most
|
||||||
helpful compile-time warnings.
|
helpful compile-time warnings.
|
||||||
|
|
||||||
|
@@ -17,7 +17,7 @@ Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
|
|||||||
|
|
||||||
--- a/arch/x86/include/asm/msr-index.h
|
--- a/arch/x86/include/asm/msr-index.h
|
||||||
+++ b/arch/x86/include/asm/msr-index.h
|
+++ b/arch/x86/include/asm/msr-index.h
|
||||||
@@ -701,15 +701,17 @@
|
@@ -709,15 +709,17 @@
|
||||||
#define MSR_AMD_CPPC_REQ 0xc00102b3
|
#define MSR_AMD_CPPC_REQ 0xc00102b3
|
||||||
#define MSR_AMD_CPPC_STATUS 0xc00102b4
|
#define MSR_AMD_CPPC_STATUS 0xc00102b4
|
||||||
|
|
||||||
|
@@ -13,7 +13,7 @@ Signed-off-by: Christian Brauner <brauner@kernel.org>
|
|||||||
|
|
||||||
--- a/init/Kconfig
|
--- a/init/Kconfig
|
||||||
+++ b/init/Kconfig
|
+++ b/init/Kconfig
|
||||||
@@ -1600,6 +1600,16 @@ config SYSCTL_ARCH_UNALIGN_ALLOW
|
@@ -1603,6 +1603,16 @@ config SYSCTL_ARCH_UNALIGN_ALLOW
|
||||||
the unaligned access emulation.
|
the unaligned access emulation.
|
||||||
see arch/parisc/kernel/unaligned.c for reference
|
see arch/parisc/kernel/unaligned.c for reference
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ Signed-off-by: Christian Brauner <brauner@kernel.org>
|
|||||||
config HAVE_PCSPKR_PLATFORM
|
config HAVE_PCSPKR_PLATFORM
|
||||||
bool
|
bool
|
||||||
|
|
||||||
@@ -1644,16 +1654,6 @@ config SGETMASK_SYSCALL
|
@@ -1647,16 +1657,6 @@ config SGETMASK_SYSCALL
|
||||||
|
|
||||||
If unsure, leave the default option here.
|
If unsure, leave the default option here.
|
||||||
|
|
||||||
|
@@ -1,98 +0,0 @@
|
|||||||
From dca14df8b269f207ac834149126964039142b596 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alex Deucher <alexander.deucher@amd.com>
|
|
||||||
Date: Thu, 1 May 2025 13:00:16 -0400
|
|
||||||
Subject: Revert "drm/amd: Stop evicting resources on APUs in suspend"
|
|
||||||
|
|
||||||
This reverts commit 3a9626c816db901def438dc2513622e281186d39.
|
|
||||||
|
|
||||||
This breaks S4 because we end up setting the s3/s0ix flags
|
|
||||||
even when we are entering s4 since prepare is used by both
|
|
||||||
flows. The causes both the S3/s0ix and s4 flags to be set
|
|
||||||
which breaks several checks in the driver which assume they
|
|
||||||
are mutually exclusive.
|
|
||||||
|
|
||||||
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3634
|
|
||||||
Cc: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
|
||||||
---
|
|
||||||
drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 --
|
|
||||||
drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c | 18 ------------------
|
|
||||||
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 11 ++---------
|
|
||||||
3 files changed, 2 insertions(+), 29 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
|
|
||||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
|
|
||||||
@@ -1594,11 +1594,9 @@ static inline void amdgpu_acpi_get_backl
|
|
||||||
#if defined(CONFIG_ACPI) && defined(CONFIG_SUSPEND)
|
|
||||||
bool amdgpu_acpi_is_s3_active(struct amdgpu_device *adev);
|
|
||||||
bool amdgpu_acpi_is_s0ix_active(struct amdgpu_device *adev);
|
|
||||||
-void amdgpu_choose_low_power_state(struct amdgpu_device *adev);
|
|
||||||
#else
|
|
||||||
static inline bool amdgpu_acpi_is_s0ix_active(struct amdgpu_device *adev) { return false; }
|
|
||||||
static inline bool amdgpu_acpi_is_s3_active(struct amdgpu_device *adev) { return false; }
|
|
||||||
-static inline void amdgpu_choose_low_power_state(struct amdgpu_device *adev) { }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void amdgpu_register_gpu_instance(struct amdgpu_device *adev);
|
|
||||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
|
|
||||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
|
|
||||||
@@ -1533,22 +1533,4 @@ bool amdgpu_acpi_is_s0ix_active(struct a
|
|
||||||
#endif /* CONFIG_AMD_PMC */
|
|
||||||
}
|
|
||||||
|
|
||||||
-/**
|
|
||||||
- * amdgpu_choose_low_power_state
|
|
||||||
- *
|
|
||||||
- * @adev: amdgpu_device_pointer
|
|
||||||
- *
|
|
||||||
- * Choose the target low power state for the GPU
|
|
||||||
- */
|
|
||||||
-void amdgpu_choose_low_power_state(struct amdgpu_device *adev)
|
|
||||||
-{
|
|
||||||
- if (adev->in_runpm)
|
|
||||||
- return;
|
|
||||||
-
|
|
||||||
- if (amdgpu_acpi_is_s0ix_active(adev))
|
|
||||||
- adev->in_s0ix = true;
|
|
||||||
- else if (amdgpu_acpi_is_s3_active(adev))
|
|
||||||
- adev->in_s3 = true;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
#endif /* CONFIG_SUSPEND */
|
|
||||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
|
||||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
|
||||||
@@ -4861,15 +4861,13 @@ int amdgpu_device_prepare(struct drm_dev
|
|
||||||
struct amdgpu_device *adev = drm_to_adev(dev);
|
|
||||||
int i, r;
|
|
||||||
|
|
||||||
- amdgpu_choose_low_power_state(adev);
|
|
||||||
-
|
|
||||||
if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* Evict the majority of BOs before starting suspend sequence */
|
|
||||||
r = amdgpu_device_evict_resources(adev);
|
|
||||||
if (r)
|
|
||||||
- goto unprepare;
|
|
||||||
+ return r;
|
|
||||||
|
|
||||||
flush_delayed_work(&adev->gfx.gfx_off_delay_work);
|
|
||||||
|
|
||||||
@@ -4880,15 +4878,10 @@ int amdgpu_device_prepare(struct drm_dev
|
|
||||||
continue;
|
|
||||||
r = adev->ip_blocks[i].version->funcs->prepare_suspend(&adev->ip_blocks[i]);
|
|
||||||
if (r)
|
|
||||||
- goto unprepare;
|
|
||||||
+ return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
-
|
|
||||||
-unprepare:
|
|
||||||
- adev->in_s0ix = adev->in_s3 = adev->in_s4 = false;
|
|
||||||
-
|
|
||||||
- return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
@@ -1,87 +0,0 @@
|
|||||||
From e9ee1b0a41166033eda14d11823826b79ce5131b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alex Deucher <alexander.deucher@amd.com>
|
|
||||||
Date: Thu, 1 May 2025 13:46:46 -0400
|
|
||||||
Subject: drm/amdgpu: fix pm notifier handling
|
|
||||||
|
|
||||||
Set the s3/s0ix and s4 flags in the pm notifier so that we can skip
|
|
||||||
the resource evictions properly in pm prepare based on whether
|
|
||||||
we are suspending or hibernating. Drop the eviction as processes
|
|
||||||
are not frozen at this time, we we can end up getting stuck trying
|
|
||||||
to evict VRAM while applications continue to submit work which
|
|
||||||
causes the buffers to get pulled back into VRAM.
|
|
||||||
|
|
||||||
v2: Move suspend flags out of pm notifier (Mario)
|
|
||||||
|
|
||||||
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4178
|
|
||||||
Fixes: 2965e6355dcd ("drm/amd: Add Suspend/Hibernate notification callback support")
|
|
||||||
Cc: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
|
||||||
---
|
|
||||||
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 18 +++++-------------
|
|
||||||
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 10 +---------
|
|
||||||
2 files changed, 6 insertions(+), 22 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
|
||||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
|
||||||
@@ -4819,28 +4819,20 @@ static int amdgpu_device_evict_resources
|
|
||||||
* @data: data
|
|
||||||
*
|
|
||||||
* This function is called when the system is about to suspend or hibernate.
|
|
||||||
- * It is used to evict resources from the device before the system goes to
|
|
||||||
- * sleep while there is still access to swap.
|
|
||||||
+ * It is used to set the appropriate flags so that eviction can be optimized
|
|
||||||
+ * in the pm prepare callback.
|
|
||||||
*/
|
|
||||||
static int amdgpu_device_pm_notifier(struct notifier_block *nb, unsigned long mode,
|
|
||||||
void *data)
|
|
||||||
{
|
|
||||||
struct amdgpu_device *adev = container_of(nb, struct amdgpu_device, pm_nb);
|
|
||||||
- int r;
|
|
||||||
|
|
||||||
switch (mode) {
|
|
||||||
case PM_HIBERNATION_PREPARE:
|
|
||||||
adev->in_s4 = true;
|
|
||||||
- fallthrough;
|
|
||||||
- case PM_SUSPEND_PREPARE:
|
|
||||||
- r = amdgpu_device_evict_resources(adev);
|
|
||||||
- /*
|
|
||||||
- * This is considered non-fatal at this time because
|
|
||||||
- * amdgpu_device_prepare() will also fatally evict resources.
|
|
||||||
- * See https://gitlab.freedesktop.org/drm/amd/-/issues/3781
|
|
||||||
- */
|
|
||||||
- if (r)
|
|
||||||
- drm_warn(adev_to_drm(adev), "Failed to evict resources, freeze active processes if problems occur: %d\n", r);
|
|
||||||
+ break;
|
|
||||||
+ case PM_POST_HIBERNATION:
|
|
||||||
+ adev->in_s4 = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
|
|
||||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
|
|
||||||
@@ -2592,13 +2592,8 @@ static int amdgpu_pmops_freeze(struct de
|
|
||||||
static int amdgpu_pmops_thaw(struct device *dev)
|
|
||||||
{
|
|
||||||
struct drm_device *drm_dev = dev_get_drvdata(dev);
|
|
||||||
- struct amdgpu_device *adev = drm_to_adev(drm_dev);
|
|
||||||
- int r;
|
|
||||||
|
|
||||||
- r = amdgpu_device_resume(drm_dev, true);
|
|
||||||
- adev->in_s4 = false;
|
|
||||||
-
|
|
||||||
- return r;
|
|
||||||
+ return amdgpu_device_resume(drm_dev, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int amdgpu_pmops_poweroff(struct device *dev)
|
|
||||||
@@ -2611,9 +2606,6 @@ static int amdgpu_pmops_poweroff(struct
|
|
||||||
static int amdgpu_pmops_restore(struct device *dev)
|
|
||||||
{
|
|
||||||
struct drm_device *drm_dev = dev_get_drvdata(dev);
|
|
||||||
- struct amdgpu_device *adev = drm_to_adev(drm_dev);
|
|
||||||
-
|
|
||||||
- adev->in_s4 = false;
|
|
||||||
|
|
||||||
return amdgpu_device_resume(drm_dev, true);
|
|
||||||
}
|
|
@@ -1,4 +1,4 @@
|
|||||||
From 1901291057a3f1bf2bf94c7a4ddf3253d3116acb Mon Sep 17 00:00:00 2001
|
From 2ffeb0d8d193c35403cea13d3b7273b523631007 Mon Sep 17 00:00:00 2001
|
||||||
From: Rik van Riel <riel@surriel.com>
|
From: Rik van Riel <riel@surriel.com>
|
||||||
Date: Thu, 13 Feb 2025 11:13:52 -0500
|
Date: Thu, 13 Feb 2025 11:13:52 -0500
|
||||||
Subject: x86/mm: Make MMU_GATHER_RCU_TABLE_FREE unconditional
|
Subject: x86/mm: Make MMU_GATHER_RCU_TABLE_FREE unconditional
|
@@ -1,4 +1,4 @@
|
|||||||
From 002a3e971d0d7987bdcdd564eccfa3dd63637226 Mon Sep 17 00:00:00 2001
|
From aadea0887cca5739137f109eab0e1b38604c8af8 Mon Sep 17 00:00:00 2001
|
||||||
From: Rik van Riel <riel@surriel.com>
|
From: Rik van Riel <riel@surriel.com>
|
||||||
Date: Thu, 13 Feb 2025 11:13:53 -0500
|
Date: Thu, 13 Feb 2025 11:13:53 -0500
|
||||||
Subject: x86/mm: Remove pv_ops.mmu.tlb_remove_table call
|
Subject: x86/mm: Remove pv_ops.mmu.tlb_remove_table call
|
@@ -1,4 +1,4 @@
|
|||||||
From d4784e28cc2e488fce80ded0ff086c50244593ca Mon Sep 17 00:00:00 2001
|
From 170f37d1499a28f7a1902e007111867c7cf0147f Mon Sep 17 00:00:00 2001
|
||||||
From: Rik van Riel <riel@surriel.com>
|
From: Rik van Riel <riel@surriel.com>
|
||||||
Date: Tue, 25 Feb 2025 22:00:36 -0500
|
Date: Tue, 25 Feb 2025 22:00:36 -0500
|
||||||
Subject: x86/mm: Consolidate full flush threshold decision
|
Subject: x86/mm: Consolidate full flush threshold decision
|
||||||
@@ -18,7 +18,7 @@ Link: https://lore.kernel.org/r/20250226030129.530345-2-riel@surriel.com
|
|||||||
|
|
||||||
--- a/arch/x86/mm/tlb.c
|
--- a/arch/x86/mm/tlb.c
|
||||||
+++ b/arch/x86/mm/tlb.c
|
+++ b/arch/x86/mm/tlb.c
|
||||||
@@ -1000,6 +1000,15 @@ static struct flush_tlb_info *get_flush_
|
@@ -1019,6 +1019,15 @@ static struct flush_tlb_info *get_flush_
|
||||||
BUG_ON(this_cpu_inc_return(flush_tlb_info_idx) != 1);
|
BUG_ON(this_cpu_inc_return(flush_tlb_info_idx) != 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ Link: https://lore.kernel.org/r/20250226030129.530345-2-riel@surriel.com
|
|||||||
info->start = start;
|
info->start = start;
|
||||||
info->end = end;
|
info->end = end;
|
||||||
info->mm = mm;
|
info->mm = mm;
|
||||||
@@ -1026,17 +1035,8 @@ void flush_tlb_mm_range(struct mm_struct
|
@@ -1045,17 +1054,8 @@ void flush_tlb_mm_range(struct mm_struct
|
||||||
bool freed_tables)
|
bool freed_tables)
|
||||||
{
|
{
|
||||||
struct flush_tlb_info *info;
|
struct flush_tlb_info *info;
|
||||||
@@ -53,7 +53,7 @@ Link: https://lore.kernel.org/r/20250226030129.530345-2-riel@surriel.com
|
|||||||
|
|
||||||
/* This is also a barrier that synchronizes with switch_mm(). */
|
/* This is also a barrier that synchronizes with switch_mm(). */
|
||||||
new_tlb_gen = inc_mm_tlb_gen(mm);
|
new_tlb_gen = inc_mm_tlb_gen(mm);
|
||||||
@@ -1089,22 +1089,19 @@ static void do_kernel_range_flush(void *
|
@@ -1108,22 +1108,19 @@ static void do_kernel_range_flush(void *
|
||||||
|
|
||||||
void flush_tlb_kernel_range(unsigned long start, unsigned long end)
|
void flush_tlb_kernel_range(unsigned long start, unsigned long end)
|
||||||
{
|
{
|
@@ -1,4 +1,4 @@
|
|||||||
From e5d151337c384934c9b669967d72f9b29781b308 Mon Sep 17 00:00:00 2001
|
From acb5a284db4fa3dbbb246ab8fa58da0143cd68ce Mon Sep 17 00:00:00 2001
|
||||||
From: Rik van Riel <riel@surriel.com>
|
From: Rik van Riel <riel@surriel.com>
|
||||||
Date: Tue, 25 Feb 2025 22:00:37 -0500
|
Date: Tue, 25 Feb 2025 22:00:37 -0500
|
||||||
Subject: x86/mm: Add INVLPGB feature and Kconfig entry
|
Subject: x86/mm: Add INVLPGB feature and Kconfig entry
|
@@ -1,4 +1,4 @@
|
|||||||
From 9bbface3289771c5990e97ca047a52faaeafdb83 Mon Sep 17 00:00:00 2001
|
From 27bab4a6ed6ee7b7b0e2d216b8802800ef26b2ad Mon Sep 17 00:00:00 2001
|
||||||
From: Rik van Riel <riel@surriel.com>
|
From: Rik van Riel <riel@surriel.com>
|
||||||
Date: Fri, 28 Feb 2025 20:32:30 +0100
|
Date: Fri, 28 Feb 2025 20:32:30 +0100
|
||||||
Subject: x86/mm: Add INVLPGB support code
|
Subject: x86/mm: Add INVLPGB support code
|
@@ -1,4 +1,4 @@
|
|||||||
From 293fdf15ead45cd235e12a4f62f81767f7bce528 Mon Sep 17 00:00:00 2001
|
From 358d71638f420efe8f7e05ce74aefe13e9320283 Mon Sep 17 00:00:00 2001
|
||||||
From: Rik van Riel <riel@surriel.com>
|
From: Rik van Riel <riel@surriel.com>
|
||||||
Date: Tue, 25 Feb 2025 22:00:39 -0500
|
Date: Tue, 25 Feb 2025 22:00:39 -0500
|
||||||
Subject: x86/mm: Use INVLPGB for kernel TLB flushes
|
Subject: x86/mm: Use INVLPGB for kernel TLB flushes
|
||||||
@@ -18,7 +18,7 @@ Link: https://lore.kernel.org/r/20250226030129.530345-5-riel@surriel.com
|
|||||||
|
|
||||||
--- a/arch/x86/mm/tlb.c
|
--- a/arch/x86/mm/tlb.c
|
||||||
+++ b/arch/x86/mm/tlb.c
|
+++ b/arch/x86/mm/tlb.c
|
||||||
@@ -1064,7 +1064,6 @@ void flush_tlb_mm_range(struct mm_struct
|
@@ -1083,7 +1083,6 @@ void flush_tlb_mm_range(struct mm_struct
|
||||||
mmu_notifier_arch_invalidate_secondary_tlbs(mm, start, end);
|
mmu_notifier_arch_invalidate_secondary_tlbs(mm, start, end);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@ Link: https://lore.kernel.org/r/20250226030129.530345-5-riel@surriel.com
|
|||||||
static void do_flush_tlb_all(void *info)
|
static void do_flush_tlb_all(void *info)
|
||||||
{
|
{
|
||||||
count_vm_tlb_event(NR_TLB_REMOTE_FLUSH_RECEIVED);
|
count_vm_tlb_event(NR_TLB_REMOTE_FLUSH_RECEIVED);
|
||||||
@@ -1074,7 +1073,32 @@ static void do_flush_tlb_all(void *info)
|
@@ -1093,7 +1092,32 @@ static void do_flush_tlb_all(void *info)
|
||||||
void flush_tlb_all(void)
|
void flush_tlb_all(void)
|
||||||
{
|
{
|
||||||
count_vm_tlb_event(NR_TLB_REMOTE_FLUSH);
|
count_vm_tlb_event(NR_TLB_REMOTE_FLUSH);
|
||||||
@@ -60,7 +60,7 @@ Link: https://lore.kernel.org/r/20250226030129.530345-5-riel@surriel.com
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void do_kernel_range_flush(void *info)
|
static void do_kernel_range_flush(void *info)
|
||||||
@@ -1087,6 +1111,22 @@ static void do_kernel_range_flush(void *
|
@@ -1106,6 +1130,22 @@ static void do_kernel_range_flush(void *
|
||||||
flush_tlb_one_kernel(addr);
|
flush_tlb_one_kernel(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,7 +83,7 @@ Link: https://lore.kernel.org/r/20250226030129.530345-5-riel@surriel.com
|
|||||||
void flush_tlb_kernel_range(unsigned long start, unsigned long end)
|
void flush_tlb_kernel_range(unsigned long start, unsigned long end)
|
||||||
{
|
{
|
||||||
struct flush_tlb_info *info;
|
struct flush_tlb_info *info;
|
||||||
@@ -1097,9 +1137,9 @@ void flush_tlb_kernel_range(unsigned lon
|
@@ -1116,9 +1156,9 @@ void flush_tlb_kernel_range(unsigned lon
|
||||||
TLB_GENERATION_INVALID);
|
TLB_GENERATION_INVALID);
|
||||||
|
|
||||||
if (info->end == TLB_FLUSH_ALL)
|
if (info->end == TLB_FLUSH_ALL)
|
@@ -1,4 +1,4 @@
|
|||||||
From a093136bdb306345cd686f47c8faae8a608cfb47 Mon Sep 17 00:00:00 2001
|
From 7cf099de79e12d6c4949f733c8cbb241bb08f07a Mon Sep 17 00:00:00 2001
|
||||||
From: Rik van Riel <riel@surriel.com>
|
From: Rik van Riel <riel@surriel.com>
|
||||||
Date: Tue, 25 Feb 2025 22:00:41 -0500
|
Date: Tue, 25 Feb 2025 22:00:41 -0500
|
||||||
Subject: x86/mm: Use broadcast TLB flushing in page reclaim
|
Subject: x86/mm: Use broadcast TLB flushing in page reclaim
|
||||||
@@ -19,7 +19,7 @@ Link: https://lore.kernel.org/r/20250226030129.530345-7-riel@surriel.com
|
|||||||
|
|
||||||
--- a/arch/x86/mm/tlb.c
|
--- a/arch/x86/mm/tlb.c
|
||||||
+++ b/arch/x86/mm/tlb.c
|
+++ b/arch/x86/mm/tlb.c
|
||||||
@@ -1320,7 +1320,9 @@ void arch_tlbbatch_flush(struct arch_tlb
|
@@ -1339,7 +1339,9 @@ void arch_tlbbatch_flush(struct arch_tlb
|
||||||
* a local TLB flush is needed. Optimize this use-case by calling
|
* a local TLB flush is needed. Optimize this use-case by calling
|
||||||
* flush_tlb_func_local() directly in this case.
|
* flush_tlb_func_local() directly in this case.
|
||||||
*/
|
*/
|
@@ -1,4 +1,4 @@
|
|||||||
From ef345ff96b47f21932c489edd2ebb44fbe3cb517 Mon Sep 17 00:00:00 2001
|
From f9ecaaca7ac26789d7d3e0d8022b7c99599dc8a3 Mon Sep 17 00:00:00 2001
|
||||||
From: Rik van Riel <riel@surriel.com>
|
From: Rik van Riel <riel@surriel.com>
|
||||||
Date: Tue, 25 Feb 2025 22:00:42 -0500
|
Date: Tue, 25 Feb 2025 22:00:42 -0500
|
||||||
Subject: x86/mm: Add global ASID allocation helper functions
|
Subject: x86/mm: Add global ASID allocation helper functions
|
@@ -1,4 +1,4 @@
|
|||||||
From b3eb743c32515bf8fca7b619dd2a2c64b5812dd8 Mon Sep 17 00:00:00 2001
|
From b56070b9f121507cabe352e03f0c534db2d5adc7 Mon Sep 17 00:00:00 2001
|
||||||
From: Rik van Riel <riel@surriel.com>
|
From: Rik van Riel <riel@surriel.com>
|
||||||
Date: Tue, 25 Feb 2025 22:00:43 -0500
|
Date: Tue, 25 Feb 2025 22:00:43 -0500
|
||||||
Subject: x86/mm: Handle global ASID context switch and TLB flush
|
Subject: x86/mm: Handle global ASID context switch and TLB flush
|
||||||
@@ -152,12 +152,16 @@ Link: https://lore.kernel.org/r/20250226030129.530345-9-riel@surriel.com
|
|||||||
* Leave this CPU in prev's mm_cpumask. Atomic writes to
|
* Leave this CPU in prev's mm_cpumask. Atomic writes to
|
||||||
* mm_cpumask can be expensive under contention. The CPU
|
* mm_cpumask can be expensive under contention. The CPU
|
||||||
* will be removed lazily at TLB flush time.
|
* will be removed lazily at TLB flush time.
|
||||||
@@ -768,14 +821,12 @@ void switch_mm_irqs_off(struct mm_struct
|
@@ -768,18 +821,12 @@ void switch_mm_irqs_off(struct mm_struct
|
||||||
next_tlb_gen = atomic64_read(&next->context.tlb_gen);
|
next_tlb_gen = atomic64_read(&next->context.tlb_gen);
|
||||||
|
|
||||||
choose_new_asid(next, next_tlb_gen, &new_asid, &need_flush);
|
choose_new_asid(next, next_tlb_gen, &new_asid, &need_flush);
|
||||||
-
|
-
|
||||||
- /* Let nmi_uaccess_okay() know that we're changing CR3. */
|
- /*
|
||||||
|
- * Indicate that CR3 is about to change. nmi_uaccess_okay()
|
||||||
|
- * and others are sensitive to the window where mm_cpumask(),
|
||||||
|
- * CR3 and cpu_tlbstate.loaded_mm are not all in sync.
|
||||||
|
- */
|
||||||
- this_cpu_write(cpu_tlbstate.loaded_mm, LOADED_MM_SWITCHING);
|
- this_cpu_write(cpu_tlbstate.loaded_mm, LOADED_MM_SWITCHING);
|
||||||
- barrier();
|
- barrier();
|
||||||
}
|
}
|
||||||
@@ -169,7 +173,7 @@ Link: https://lore.kernel.org/r/20250226030129.530345-9-riel@surriel.com
|
|||||||
this_cpu_write(cpu_tlbstate.ctxs[new_asid].ctx_id, next->context.ctx_id);
|
this_cpu_write(cpu_tlbstate.ctxs[new_asid].ctx_id, next->context.ctx_id);
|
||||||
this_cpu_write(cpu_tlbstate.ctxs[new_asid].tlb_gen, next_tlb_gen);
|
this_cpu_write(cpu_tlbstate.ctxs[new_asid].tlb_gen, next_tlb_gen);
|
||||||
load_new_mm_cr3(next->pgd, new_asid, new_lam, true);
|
load_new_mm_cr3(next->pgd, new_asid, new_lam, true);
|
||||||
@@ -894,7 +945,7 @@ static void flush_tlb_func(void *info)
|
@@ -898,7 +945,7 @@ static void flush_tlb_func(void *info)
|
||||||
const struct flush_tlb_info *f = info;
|
const struct flush_tlb_info *f = info;
|
||||||
struct mm_struct *loaded_mm = this_cpu_read(cpu_tlbstate.loaded_mm);
|
struct mm_struct *loaded_mm = this_cpu_read(cpu_tlbstate.loaded_mm);
|
||||||
u32 loaded_mm_asid = this_cpu_read(cpu_tlbstate.loaded_mm_asid);
|
u32 loaded_mm_asid = this_cpu_read(cpu_tlbstate.loaded_mm_asid);
|
||||||
@@ -178,7 +182,7 @@ Link: https://lore.kernel.org/r/20250226030129.530345-9-riel@surriel.com
|
|||||||
bool local = smp_processor_id() == f->initiating_cpu;
|
bool local = smp_processor_id() == f->initiating_cpu;
|
||||||
unsigned long nr_invalidate = 0;
|
unsigned long nr_invalidate = 0;
|
||||||
u64 mm_tlb_gen;
|
u64 mm_tlb_gen;
|
||||||
@@ -917,6 +968,16 @@ static void flush_tlb_func(void *info)
|
@@ -921,6 +968,16 @@ static void flush_tlb_func(void *info)
|
||||||
if (unlikely(loaded_mm == &init_mm))
|
if (unlikely(loaded_mm == &init_mm))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -195,7 +199,7 @@ Link: https://lore.kernel.org/r/20250226030129.530345-9-riel@surriel.com
|
|||||||
VM_WARN_ON(this_cpu_read(cpu_tlbstate.ctxs[loaded_mm_asid].ctx_id) !=
|
VM_WARN_ON(this_cpu_read(cpu_tlbstate.ctxs[loaded_mm_asid].ctx_id) !=
|
||||||
loaded_mm->context.ctx_id);
|
loaded_mm->context.ctx_id);
|
||||||
|
|
||||||
@@ -934,6 +995,8 @@ static void flush_tlb_func(void *info)
|
@@ -938,6 +995,8 @@ static void flush_tlb_func(void *info)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,7 +208,7 @@ Link: https://lore.kernel.org/r/20250226030129.530345-9-riel@surriel.com
|
|||||||
if (unlikely(f->new_tlb_gen != TLB_GENERATION_INVALID &&
|
if (unlikely(f->new_tlb_gen != TLB_GENERATION_INVALID &&
|
||||||
f->new_tlb_gen <= local_tlb_gen)) {
|
f->new_tlb_gen <= local_tlb_gen)) {
|
||||||
/*
|
/*
|
||||||
@@ -1101,7 +1164,7 @@ STATIC_NOPV void native_flush_tlb_multi(
|
@@ -1120,7 +1179,7 @@ STATIC_NOPV void native_flush_tlb_multi(
|
||||||
* up on the new contents of what used to be page tables, while
|
* up on the new contents of what used to be page tables, while
|
||||||
* doing a speculative memory access.
|
* doing a speculative memory access.
|
||||||
*/
|
*/
|
@@ -1,4 +1,4 @@
|
|||||||
From c63f1d0a496de7a926b92b52061905edfc8428a4 Mon Sep 17 00:00:00 2001
|
From 6d3b8545e2c3c638363fb449a99b5a6cbab87a49 Mon Sep 17 00:00:00 2001
|
||||||
From: Rik van Riel <riel@surriel.com>
|
From: Rik van Riel <riel@surriel.com>
|
||||||
Date: Tue, 25 Feb 2025 22:00:44 -0500
|
Date: Tue, 25 Feb 2025 22:00:44 -0500
|
||||||
Subject: x86/mm: Add global ASID process exit helpers
|
Subject: x86/mm: Add global ASID process exit helpers
|
@@ -1,4 +1,4 @@
|
|||||||
From e16bb18388207841efa841b9b11e69c886817024 Mon Sep 17 00:00:00 2001
|
From 077e9ceb65f514ea63afc65cce86ce8677e77012 Mon Sep 17 00:00:00 2001
|
||||||
From: Rik van Riel <riel@surriel.com>
|
From: Rik van Riel <riel@surriel.com>
|
||||||
Date: Tue, 25 Feb 2025 22:00:45 -0500
|
Date: Tue, 25 Feb 2025 22:00:45 -0500
|
||||||
Subject: x86/mm: Enable broadcast TLB invalidation for multi-threaded
|
Subject: x86/mm: Enable broadcast TLB invalidation for multi-threaded
|
||||||
@@ -203,7 +203,7 @@ Link: https://lore.kernel.org/r/20250226030129.530345-11-riel@surriel.com
|
|||||||
* Given an ASID, flush the corresponding user ASID. We can delay this
|
* Given an ASID, flush the corresponding user ASID. We can delay this
|
||||||
* until the next time we switch to it.
|
* until the next time we switch to it.
|
||||||
*
|
*
|
||||||
@@ -1260,9 +1359,12 @@ void flush_tlb_mm_range(struct mm_struct
|
@@ -1275,9 +1374,12 @@ void flush_tlb_mm_range(struct mm_struct
|
||||||
* a local TLB flush is needed. Optimize this use-case by calling
|
* a local TLB flush is needed. Optimize this use-case by calling
|
||||||
* flush_tlb_func_local() directly in this case.
|
* flush_tlb_func_local() directly in this case.
|
||||||
*/
|
*/
|
@@ -1,4 +1,4 @@
|
|||||||
From 9c88454149bd22cc3d8618b4445d32aaf48cadce Mon Sep 17 00:00:00 2001
|
From 1994cff363a37aff5b1232ca9f757b02ae244956 Mon Sep 17 00:00:00 2001
|
||||||
From: Rik van Riel <riel@surriel.com>
|
From: Rik van Riel <riel@surriel.com>
|
||||||
Date: Tue, 25 Feb 2025 22:00:47 -0500
|
Date: Tue, 25 Feb 2025 22:00:47 -0500
|
||||||
Subject: x86/mm: Enable AMD translation cache extensions
|
Subject: x86/mm: Enable AMD translation cache extensions
|
@@ -1,4 +1,4 @@
|
|||||||
From 20dfd0edb14a1d0aecd5eb227f2db64487201976 Mon Sep 17 00:00:00 2001
|
From 5932a2c8122050c4a2f71588778feb0677fe32b4 Mon Sep 17 00:00:00 2001
|
||||||
From: Tom Lendacky <thomas.lendacky@amd.com>
|
From: Tom Lendacky <thomas.lendacky@amd.com>
|
||||||
Date: Tue, 4 Mar 2025 12:59:56 +0100
|
Date: Tue, 4 Mar 2025 12:59:56 +0100
|
||||||
Subject: x86/mm: Always set the ASID valid bit for the INVLPGB instruction
|
Subject: x86/mm: Always set the ASID valid bit for the INVLPGB instruction
|
@@ -1,4 +1,4 @@
|
|||||||
From b5a210ad153e5448876c422f5c77d3dcd83abac6 Mon Sep 17 00:00:00 2001
|
From 0e0a5ca37a8e3b06f450f4093ba1b6d6f33c2161 Mon Sep 17 00:00:00 2001
|
||||||
From: Rik van Riel <riel@surriel.com>
|
From: Rik van Riel <riel@surriel.com>
|
||||||
Date: Wed, 19 Mar 2025 13:25:20 -0400
|
Date: Wed, 19 Mar 2025 13:25:20 -0400
|
||||||
Subject: x86/mm: Only do broadcast flush from reclaim if pages were unmapped
|
Subject: x86/mm: Only do broadcast flush from reclaim if pages were unmapped
|
||||||
@@ -57,7 +57,7 @@ Link: https://lore.kernel.org/r/20250319132520.6b10ad90@fangorn
|
|||||||
|
|
||||||
--- a/arch/x86/mm/tlb.c
|
--- a/arch/x86/mm/tlb.c
|
||||||
+++ b/arch/x86/mm/tlb.c
|
+++ b/arch/x86/mm/tlb.c
|
||||||
@@ -1633,8 +1633,9 @@ void arch_tlbbatch_flush(struct arch_tlb
|
@@ -1648,8 +1648,9 @@ void arch_tlbbatch_flush(struct arch_tlb
|
||||||
* a local TLB flush is needed. Optimize this use-case by calling
|
* a local TLB flush is needed. Optimize this use-case by calling
|
||||||
* flush_tlb_func_local() directly in this case.
|
* flush_tlb_func_local() directly in this case.
|
||||||
*/
|
*/
|
@@ -0,0 +1,92 @@
|
|||||||
|
From 6ae491224973eb4013ee67a8c05c420f057d5fee Mon Sep 17 00:00:00 2001
|
||||||
|
From: Dave Hansen <dave.hansen@linux.intel.com>
|
||||||
|
Date: Thu, 8 May 2025 15:41:32 -0700
|
||||||
|
Subject: x86/mm: Eliminate window where TLB flushes may be inadvertently
|
||||||
|
skipped
|
||||||
|
|
||||||
|
tl;dr: There is a window in the mm switching code where the new CR3 is
|
||||||
|
set and the CPU should be getting TLB flushes for the new mm. But
|
||||||
|
should_flush_tlb() has a bug and suppresses the flush. Fix it by
|
||||||
|
widening the window where should_flush_tlb() sends an IPI.
|
||||||
|
|
||||||
|
Long Version:
|
||||||
|
|
||||||
|
=== History ===
|
||||||
|
|
||||||
|
There were a few things leading up to this.
|
||||||
|
|
||||||
|
First, updating mm_cpumask() was observed to be too expensive, so it was
|
||||||
|
made lazier. But being lazy caused too many unnecessary IPIs to CPUs
|
||||||
|
due to the now-lazy mm_cpumask(). So code was added to cull
|
||||||
|
mm_cpumask() periodically[2]. But that culling was a bit too aggressive
|
||||||
|
and skipped sending TLB flushes to CPUs that need them. So here we are
|
||||||
|
again.
|
||||||
|
|
||||||
|
=== Problem ===
|
||||||
|
|
||||||
|
The too-aggressive code in should_flush_tlb() strikes in this window:
|
||||||
|
|
||||||
|
// Turn on IPIs for this CPU/mm combination, but only
|
||||||
|
// if should_flush_tlb() agrees:
|
||||||
|
cpumask_set_cpu(cpu, mm_cpumask(next));
|
||||||
|
|
||||||
|
next_tlb_gen = atomic64_read(&next->context.tlb_gen);
|
||||||
|
choose_new_asid(next, next_tlb_gen, &new_asid, &need_flush);
|
||||||
|
load_new_mm_cr3(need_flush);
|
||||||
|
// ^ After 'need_flush' is set to false, IPIs *MUST*
|
||||||
|
// be sent to this CPU and not be ignored.
|
||||||
|
|
||||||
|
this_cpu_write(cpu_tlbstate.loaded_mm, next);
|
||||||
|
// ^ Not until this point does should_flush_tlb()
|
||||||
|
// become true!
|
||||||
|
|
||||||
|
should_flush_tlb() will suppress TLB flushes between load_new_mm_cr3()
|
||||||
|
and writing to 'loaded_mm', which is a window where they should not be
|
||||||
|
suppressed. Whoops.
|
||||||
|
|
||||||
|
=== Solution ===
|
||||||
|
|
||||||
|
Thankfully, the fuzzy "just about to write CR3" window is already marked
|
||||||
|
with loaded_mm==LOADED_MM_SWITCHING. Simply checking for that state in
|
||||||
|
should_flush_tlb() is sufficient to ensure that the CPU is targeted with
|
||||||
|
an IPI.
|
||||||
|
|
||||||
|
This will cause more TLB flush IPIs. But the window is relatively small
|
||||||
|
and I do not expect this to cause any kind of measurable performance
|
||||||
|
impact.
|
||||||
|
|
||||||
|
Update the comment where LOADED_MM_SWITCHING is written since it grew
|
||||||
|
yet another user.
|
||||||
|
|
||||||
|
Peter Z also raised a concern that should_flush_tlb() might not observe
|
||||||
|
'loaded_mm' and 'is_lazy' in the same order that switch_mm_irqs_off()
|
||||||
|
writes them. Add a barrier to ensure that they are observed in the
|
||||||
|
order they are written.
|
||||||
|
|
||||||
|
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
|
||||||
|
Acked-by: Rik van Riel <riel@surriel.com>
|
||||||
|
Link: https://lore.kernel.org/oe-lkp/202411282207.6bd28eae-lkp@intel.com/ [1]
|
||||||
|
Fixes: 6db2526c1d69 ("x86/mm/tlb: Only trim the mm_cpumask once a second") [2]
|
||||||
|
Reported-by: Stephen Dolan <sdolan@janestreet.com>
|
||||||
|
Cc: stable@vger.kernel.org
|
||||||
|
Acked-by: Ingo Molnar <mingo@kernel.org>
|
||||||
|
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
|
||||||
|
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||||
|
---
|
||||||
|
arch/x86/mm/tlb.c | 22 +++++++++++++++++++---
|
||||||
|
1 file changed, 19 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/arch/x86/mm/tlb.c
|
||||||
|
+++ b/arch/x86/mm/tlb.c
|
||||||
|
@@ -900,8 +900,9 @@ void switch_mm_irqs_off(struct mm_struct
|
||||||
|
cond_mitigation(tsk);
|
||||||
|
|
||||||
|
/*
|
||||||
|
- * Let nmi_uaccess_okay() and finish_asid_transition()
|
||||||
|
- * know that CR3 is changing.
|
||||||
|
+ * Indicate that CR3 is about to change. nmi_uaccess_okay()
|
||||||
|
+ * and others are sensitive to the window where mm_cpumask(),
|
||||||
|
+ * CR3 and cpu_tlbstate.loaded_mm are not all in sync.
|
||||||
|
*/
|
||||||
|
this_cpu_write(cpu_tlbstate.loaded_mm, LOADED_MM_SWITCHING);
|
||||||
|
barrier();
|
@@ -1,33 +0,0 @@
|
|||||||
From 7b3f0f8d11f1b4319f593ba02d4dece890755dfa Mon Sep 17 00:00:00 2001
|
|
||||||
From: Namjae Jeon <linkinjeon@kernel.org>
|
|
||||||
Date: Wed, 30 Apr 2025 11:18:28 +0900
|
|
||||||
Subject: ksmbd: prevent rename with empty string
|
|
||||||
|
|
||||||
Client can send empty newname string to ksmbd server.
|
|
||||||
It will cause a kernel oops from d_alloc.
|
|
||||||
This patch return the error when attempting to rename
|
|
||||||
a file or directory with an empty new name string.
|
|
||||||
|
|
||||||
Cc: stable@vger.kernel.org
|
|
||||||
Reported-by: Norbert Szetei <norbert@doyensec.com>
|
|
||||||
Tested-by: Norbert Szetei <norbert@doyensec.com>
|
|
||||||
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
|
|
||||||
Signed-off-by: Steve French <stfrench@microsoft.com>
|
|
||||||
---
|
|
||||||
fs/smb/server/smb2pdu.c | 5 +++++
|
|
||||||
1 file changed, 5 insertions(+)
|
|
||||||
|
|
||||||
--- a/fs/smb/server/smb2pdu.c
|
|
||||||
+++ b/fs/smb/server/smb2pdu.c
|
|
||||||
@@ -633,6 +633,11 @@ smb2_get_name(const char *src, const int
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (*name == '\0') {
|
|
||||||
+ kfree(name);
|
|
||||||
+ return ERR_PTR(-EINVAL);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (*name == '\\') {
|
|
||||||
pr_err("not allow directory name included leading slash\n");
|
|
||||||
kfree(name);
|
|
35
debian/patches/patchset-pf/smb/0001-smb-client-fix-memory-leak-during-error-handling-for.patch
vendored
Normal file
35
debian/patches/patchset-pf/smb/0001-smb-client-fix-memory-leak-during-error-handling-for.patch
vendored
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
From 8ef14a884df5aaf48cf5f7ce6c91e7318cb07d4e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jethro Donaldson <devel@jro.nz>
|
||||||
|
Date: Thu, 15 May 2025 01:23:23 +1200
|
||||||
|
Subject: smb: client: fix memory leak during error handling for POSIX mkdir
|
||||||
|
|
||||||
|
The response buffer for the CREATE request handled by smb311_posix_mkdir()
|
||||||
|
is leaked on the error path (goto err_free_rsp_buf) because the structure
|
||||||
|
pointer *rsp passed to free_rsp_buf() is not assigned until *after* the
|
||||||
|
error condition is checked.
|
||||||
|
|
||||||
|
As *rsp is initialised to NULL, free_rsp_buf() becomes a no-op and the leak
|
||||||
|
is instead reported by __kmem_cache_shutdown() upon subsequent rmmod of
|
||||||
|
cifs.ko if (and only if) the error path has been hit.
|
||||||
|
|
||||||
|
Pass rsp_iov.iov_base to free_rsp_buf() instead, similar to the code in
|
||||||
|
other functions in smb2pdu.c for which *rsp is assigned late.
|
||||||
|
|
||||||
|
Cc: stable@vger.kernel.org
|
||||||
|
Signed-off-by: Jethro Donaldson <devel@jro.nz>
|
||||||
|
Signed-off-by: Steve French <stfrench@microsoft.com>
|
||||||
|
---
|
||||||
|
fs/smb/client/smb2pdu.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/fs/smb/client/smb2pdu.c
|
||||||
|
+++ b/fs/smb/client/smb2pdu.c
|
||||||
|
@@ -2967,7 +2967,7 @@ replay_again:
|
||||||
|
/* Eventually save off posix specific response info and timestamps */
|
||||||
|
|
||||||
|
err_free_rsp_buf:
|
||||||
|
- free_rsp_buf(resp_buftype, rsp);
|
||||||
|
+ free_rsp_buf(resp_buftype, rsp_iov.iov_base);
|
||||||
|
kfree(pc_buf);
|
||||||
|
err_free_req:
|
||||||
|
cifs_small_buf_release(req);
|
@@ -1,37 +0,0 @@
|
|||||||
From fb87d390de327c76b11ed544de83771118f7b0c5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Norbert Szetei <norbert@doyensec.com>
|
|
||||||
Date: Fri, 2 May 2025 08:21:58 +0900
|
|
||||||
Subject: ksmbd: prevent out-of-bounds stream writes by validating *pos
|
|
||||||
|
|
||||||
ksmbd_vfs_stream_write() did not validate whether the write offset
|
|
||||||
(*pos) was within the bounds of the existing stream data length (v_len).
|
|
||||||
If *pos was greater than or equal to v_len, this could lead to an
|
|
||||||
out-of-bounds memory write.
|
|
||||||
|
|
||||||
This patch adds a check to ensure *pos is less than v_len before
|
|
||||||
proceeding. If the condition fails, -EINVAL is returned.
|
|
||||||
|
|
||||||
Cc: stable@vger.kernel.org
|
|
||||||
Signed-off-by: Norbert Szetei <norbert@doyensec.com>
|
|
||||||
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
|
|
||||||
Signed-off-by: Steve French <stfrench@microsoft.com>
|
|
||||||
---
|
|
||||||
fs/smb/server/vfs.c | 7 +++++++
|
|
||||||
1 file changed, 7 insertions(+)
|
|
||||||
|
|
||||||
--- a/fs/smb/server/vfs.c
|
|
||||||
+++ b/fs/smb/server/vfs.c
|
|
||||||
@@ -443,6 +443,13 @@ static int ksmbd_vfs_stream_write(struct
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (v_len <= *pos) {
|
|
||||||
+ pr_err("stream write position %lld is out of bounds (stream length: %zd)\n",
|
|
||||||
+ *pos, v_len);
|
|
||||||
+ err = -EINVAL;
|
|
||||||
+ goto out;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (v_len < size) {
|
|
||||||
wbuf = kvzalloc(size, KSMBD_DEFAULT_GFP);
|
|
||||||
if (!wbuf) {
|
|
@@ -1,74 +0,0 @@
|
|||||||
From 67ea573ce44aeac74e659879cdeb6ac39212d0b9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Sean Heelan <seanheelan@gmail.com>
|
|
||||||
Date: Tue, 6 May 2025 22:04:52 +0900
|
|
||||||
Subject: ksmbd: Fix UAF in __close_file_table_ids
|
|
||||||
|
|
||||||
A use-after-free is possible if one thread destroys the file
|
|
||||||
via __ksmbd_close_fd while another thread holds a reference to
|
|
||||||
it. The existing checks on fp->refcount are not sufficient to
|
|
||||||
prevent this.
|
|
||||||
|
|
||||||
The fix takes ft->lock around the section which removes the
|
|
||||||
file from the file table. This prevents two threads acquiring the
|
|
||||||
same file pointer via __close_file_table_ids, as well as the other
|
|
||||||
functions which retrieve a file from the IDR and which already use
|
|
||||||
this same lock.
|
|
||||||
|
|
||||||
Cc: stable@vger.kernel.org
|
|
||||||
Signed-off-by: Sean Heelan <seanheelan@gmail.com>
|
|
||||||
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
|
|
||||||
Signed-off-by: Steve French <stfrench@microsoft.com>
|
|
||||||
---
|
|
||||||
fs/smb/server/vfs_cache.c | 33 ++++++++++++++++++++++++++-------
|
|
||||||
1 file changed, 26 insertions(+), 7 deletions(-)
|
|
||||||
|
|
||||||
--- a/fs/smb/server/vfs_cache.c
|
|
||||||
+++ b/fs/smb/server/vfs_cache.c
|
|
||||||
@@ -661,21 +661,40 @@ __close_file_table_ids(struct ksmbd_file
|
|
||||||
bool (*skip)(struct ksmbd_tree_connect *tcon,
|
|
||||||
struct ksmbd_file *fp))
|
|
||||||
{
|
|
||||||
- unsigned int id;
|
|
||||||
- struct ksmbd_file *fp;
|
|
||||||
- int num = 0;
|
|
||||||
+ struct ksmbd_file *fp;
|
|
||||||
+ unsigned int id = 0;
|
|
||||||
+ int num = 0;
|
|
||||||
|
|
||||||
- idr_for_each_entry(ft->idr, fp, id) {
|
|
||||||
- if (skip(tcon, fp))
|
|
||||||
+ while (1) {
|
|
||||||
+ write_lock(&ft->lock);
|
|
||||||
+ fp = idr_get_next(ft->idr, &id);
|
|
||||||
+ if (!fp) {
|
|
||||||
+ write_unlock(&ft->lock);
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (skip(tcon, fp) ||
|
|
||||||
+ !atomic_dec_and_test(&fp->refcount)) {
|
|
||||||
+ id++;
|
|
||||||
+ write_unlock(&ft->lock);
|
|
||||||
continue;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
set_close_state_blocked_works(fp);
|
|
||||||
+ idr_remove(ft->idr, fp->volatile_id);
|
|
||||||
+ fp->volatile_id = KSMBD_NO_FID;
|
|
||||||
+ write_unlock(&ft->lock);
|
|
||||||
+
|
|
||||||
+ down_write(&fp->f_ci->m_lock);
|
|
||||||
+ list_del_init(&fp->node);
|
|
||||||
+ up_write(&fp->f_ci->m_lock);
|
|
||||||
|
|
||||||
- if (!atomic_dec_and_test(&fp->refcount))
|
|
||||||
- continue;
|
|
||||||
__ksmbd_close_fd(ft, fp);
|
|
||||||
+
|
|
||||||
num++;
|
|
||||||
+ id++;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
return num;
|
|
||||||
}
|
|
||||||
|
|
@@ -185,7 +185,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
|||||||
return container_of(ns, struct ipc_namespace, ns);
|
return container_of(ns, struct ipc_namespace, ns);
|
||||||
--- a/mm/vmalloc.c
|
--- a/mm/vmalloc.c
|
||||||
+++ b/mm/vmalloc.c
|
+++ b/mm/vmalloc.c
|
||||||
@@ -3181,6 +3181,7 @@ struct vm_struct *get_vm_area(unsigned l
|
@@ -3182,6 +3182,7 @@ struct vm_struct *get_vm_area(unsigned l
|
||||||
NUMA_NO_NODE, GFP_KERNEL,
|
NUMA_NO_NODE, GFP_KERNEL,
|
||||||
__builtin_return_address(0));
|
__builtin_return_address(0));
|
||||||
}
|
}
|
||||||
|
@@ -55,7 +55,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
|||||||
|
|
||||||
--- a/Documentation/admin-guide/kernel-parameters.txt
|
--- a/Documentation/admin-guide/kernel-parameters.txt
|
||||||
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||||
@@ -4646,6 +4646,15 @@
|
@@ -4664,6 +4664,15 @@
|
||||||
nomsi [MSI] If the PCI_MSI kernel config parameter is
|
nomsi [MSI] If the PCI_MSI kernel config parameter is
|
||||||
enabled, this kernel boot option can be used to
|
enabled, this kernel boot option can be used to
|
||||||
disable the use of MSI interrupts system-wide.
|
disable the use of MSI interrupts system-wide.
|
||||||
|
@@ -24,7 +24,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
|||||||
bau= [X86_UV] Enable the BAU on SGI UV. The default
|
bau= [X86_UV] Enable the BAU on SGI UV. The default
|
||||||
behavior is to disable the BAU (i.e. bau=0).
|
behavior is to disable the BAU (i.e. bau=0).
|
||||||
Format: { "0" | "1" }
|
Format: { "0" | "1" }
|
||||||
@@ -4041,8 +4045,6 @@
|
@@ -4059,8 +4063,6 @@
|
||||||
|
|
||||||
noapictimer [APIC,X86] Don't set up the APIC timer
|
noapictimer [APIC,X86] Don't set up the APIC timer
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
|||||||
no_console_suspend
|
no_console_suspend
|
||||||
--- a/init/Kconfig
|
--- a/init/Kconfig
|
||||||
+++ b/init/Kconfig
|
+++ b/init/Kconfig
|
||||||
@@ -1372,6 +1372,18 @@ config SCHED_AUTOGROUP
|
@@ -1375,6 +1375,18 @@ config SCHED_AUTOGROUP
|
||||||
desktop applications. Task group autogeneration is currently based
|
desktop applications. Task group autogeneration is currently based
|
||||||
upon task session.
|
upon task session.
|
||||||
|
|
||||||
|
@@ -1,327 +0,0 @@
|
|||||||
--- a/Documentation/ABI/testing/sysfs-devices-system-cpu
|
|
||||||
+++ b/Documentation/ABI/testing/sysfs-devices-system-cpu
|
|
||||||
@@ -516,6 +516,7 @@ What: /sys/devices/system/cpu/vulnerabi
|
|
||||||
/sys/devices/system/cpu/vulnerabilities/mds
|
|
||||||
/sys/devices/system/cpu/vulnerabilities/meltdown
|
|
||||||
/sys/devices/system/cpu/vulnerabilities/mmio_stale_data
|
|
||||||
+ /sys/devices/system/cpu/vulnerabilities/old_microcode
|
|
||||||
/sys/devices/system/cpu/vulnerabilities/reg_file_data_sampling
|
|
||||||
/sys/devices/system/cpu/vulnerabilities/retbleed
|
|
||||||
/sys/devices/system/cpu/vulnerabilities/spec_store_bypass
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/Documentation/admin-guide/hw-vuln/old_microcode.rst
|
|
||||||
@@ -0,0 +1,21 @@
|
|
||||||
+.. SPDX-License-Identifier: GPL-2.0
|
|
||||||
+
|
|
||||||
+=============
|
|
||||||
+Old Microcode
|
|
||||||
+=============
|
|
||||||
+
|
|
||||||
+The kernel keeps a table of released microcode. Systems that had
|
|
||||||
+microcode older than this at boot will say "Vulnerable". This means
|
|
||||||
+that the system was vulnerable to some known CPU issue. It could be
|
|
||||||
+security or functional, the kernel does not know or care.
|
|
||||||
+
|
|
||||||
+You should update the CPU microcode to mitigate any exposure. This is
|
|
||||||
+usually accomplished by updating the files in
|
|
||||||
+/lib/firmware/intel-ucode/ via normal distribution updates. Intel also
|
|
||||||
+distributes these files in a github repo:
|
|
||||||
+
|
|
||||||
+ https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files.git
|
|
||||||
+
|
|
||||||
+Just like all the other hardware vulnerabilities, exposure is
|
|
||||||
+determined at boot. Runtime microcode updates do not change the status
|
|
||||||
+of this vulnerability.
|
|
||||||
--- a/arch/x86/include/asm/cpufeatures.h
|
|
||||||
+++ b/arch/x86/include/asm/cpufeatures.h
|
|
||||||
@@ -535,4 +535,6 @@
|
|
||||||
#define X86_BUG_RFDS X86_BUG(1*32 + 2) /* "rfds" CPU is vulnerable to Register File Data Sampling */
|
|
||||||
#define X86_BUG_BHI X86_BUG(1*32 + 3) /* "bhi" CPU is affected by Branch History Injection */
|
|
||||||
#define X86_BUG_IBPB_NO_RET X86_BUG(1*32 + 4) /* "ibpb_no_ret" IBPB omits return target predictions */
|
|
||||||
+#define X86_BUG_SPECTRE_V2_USER X86_BUG(1*32 + 5) /* "spectre_v2_user" CPU is affected by Spectre variant 2 attack between user processes */
|
|
||||||
+#define X86_BUG_OLD_MICROCODE X86_BUG(1*32 + 6) /* "old_microcode" CPU has old microcode, it is surely vulnerable to something */
|
|
||||||
#endif /* _ASM_X86_CPUFEATURES_H */
|
|
||||||
--- a/arch/x86/kernel/cpu/bugs.c
|
|
||||||
+++ b/arch/x86/kernel/cpu/bugs.c
|
|
||||||
@@ -2806,6 +2806,14 @@ static ssize_t rfds_show_state(char *buf
|
|
||||||
return sysfs_emit(buf, "%s\n", rfds_strings[rfds_mitigation]);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static ssize_t old_microcode_show_state(char *buf)
|
|
||||||
+{
|
|
||||||
+ if (boot_cpu_has(X86_FEATURE_HYPERVISOR))
|
|
||||||
+ return sysfs_emit(buf, "Unknown: running under hypervisor");
|
|
||||||
+
|
|
||||||
+ return sysfs_emit(buf, "Vulnerable\n");
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static char *stibp_state(void)
|
|
||||||
{
|
|
||||||
if (spectre_v2_in_eibrs_mode(spectre_v2_enabled) &&
|
|
||||||
@@ -2988,6 +2996,9 @@ static ssize_t cpu_show_common(struct de
|
|
||||||
case X86_BUG_RFDS:
|
|
||||||
return rfds_show_state(buf);
|
|
||||||
|
|
||||||
+ case X86_BUG_OLD_MICROCODE:
|
|
||||||
+ return old_microcode_show_state(buf);
|
|
||||||
+
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
@@ -3067,6 +3078,11 @@ ssize_t cpu_show_reg_file_data_sampling(
|
|
||||||
{
|
|
||||||
return cpu_show_common(dev, attr, buf, X86_BUG_RFDS);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ssize_t cpu_show_old_microcode(struct device *dev, struct device_attribute *attr, char *buf)
|
|
||||||
+{
|
|
||||||
+ return cpu_show_common(dev, attr, buf, X86_BUG_OLD_MICROCODE);
|
|
||||||
+}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void __warn_thunk(void)
|
|
||||||
--- a/arch/x86/kernel/cpu/common.c
|
|
||||||
+++ b/arch/x86/kernel/cpu/common.c
|
|
||||||
@@ -1317,10 +1317,52 @@ static bool __init vulnerable_to_rfds(u6
|
|
||||||
return cpu_matches(cpu_vuln_blacklist, RFDS);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static struct x86_cpu_id cpu_latest_microcode[] = {
|
|
||||||
+#include "microcode/intel-ucode-defs.h"
|
|
||||||
+ {}
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+static bool __init cpu_has_old_microcode(void)
|
|
||||||
+{
|
|
||||||
+ const struct x86_cpu_id *m = x86_match_cpu(cpu_latest_microcode);
|
|
||||||
+
|
|
||||||
+ /* Give unknown CPUs a pass: */
|
|
||||||
+ if (!m) {
|
|
||||||
+ /* Intel CPUs should be in the list. Warn if not: */
|
|
||||||
+ if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL)
|
|
||||||
+ pr_info("x86/CPU: Model not found in latest microcode list\n");
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Hosts usually lie to guests with a super high microcode
|
|
||||||
+ * version. Just ignore what hosts tell guests:
|
|
||||||
+ */
|
|
||||||
+ if (boot_cpu_has(X86_FEATURE_HYPERVISOR))
|
|
||||||
+ return false;
|
|
||||||
+
|
|
||||||
+ /* Consider all debug microcode to be old: */
|
|
||||||
+ if (boot_cpu_data.microcode & BIT(31))
|
|
||||||
+ return true;
|
|
||||||
+
|
|
||||||
+ /* Give new microocode a pass: */
|
|
||||||
+ if (boot_cpu_data.microcode >= m->driver_data)
|
|
||||||
+ return false;
|
|
||||||
+
|
|
||||||
+ /* Uh oh, too old: */
|
|
||||||
+ return true;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c)
|
|
||||||
{
|
|
||||||
u64 x86_arch_cap_msr = x86_read_arch_cap_msr();
|
|
||||||
|
|
||||||
+ if (cpu_has_old_microcode()) {
|
|
||||||
+ pr_warn("x86/CPU: Running old microcode\n");
|
|
||||||
+ setup_force_cpu_bug(X86_BUG_OLD_MICROCODE);
|
|
||||||
+ add_taint(TAINT_CPU_OUT_OF_SPEC, LOCKDEP_STILL_OK);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/* Set ITLB_MULTIHIT bug if cpu is not in the whitelist and not mitigated */
|
|
||||||
if (!cpu_matches(cpu_vuln_whitelist, NO_ITLB_MULTIHIT) &&
|
|
||||||
!(x86_arch_cap_msr & ARCH_CAP_PSCHANGE_MC_NO))
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/arch/x86/kernel/cpu/microcode/intel-ucode-defs.h
|
|
||||||
@@ -0,0 +1,150 @@
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x03, .steppings = 0x0004, .driver_data = 0x2 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x05, .steppings = 0x0001, .driver_data = 0x45 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x05, .steppings = 0x0002, .driver_data = 0x40 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x05, .steppings = 0x0004, .driver_data = 0x2c },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x05, .steppings = 0x0008, .driver_data = 0x10 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x06, .steppings = 0x0001, .driver_data = 0xa },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x06, .steppings = 0x0020, .driver_data = 0x3 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x06, .steppings = 0x0400, .driver_data = 0xd },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x06, .steppings = 0x2000, .driver_data = 0x7 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x07, .steppings = 0x0002, .driver_data = 0x14 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x07, .steppings = 0x0004, .driver_data = 0x38 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x07, .steppings = 0x0008, .driver_data = 0x2e },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x08, .steppings = 0x0002, .driver_data = 0x11 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x08, .steppings = 0x0008, .driver_data = 0x8 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x08, .steppings = 0x0040, .driver_data = 0xc },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x08, .steppings = 0x0400, .driver_data = 0x5 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x09, .steppings = 0x0020, .driver_data = 0x47 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x0a, .steppings = 0x0001, .driver_data = 0x3 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x0a, .steppings = 0x0002, .driver_data = 0x1 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x0b, .steppings = 0x0002, .driver_data = 0x1d },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x0b, .steppings = 0x0010, .driver_data = 0x2 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x0d, .steppings = 0x0040, .driver_data = 0x18 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x0e, .steppings = 0x0100, .driver_data = 0x39 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x0e, .steppings = 0x1000, .driver_data = 0x59 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x0f, .steppings = 0x0004, .driver_data = 0x5d },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x0f, .steppings = 0x0040, .driver_data = 0xd2 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x0f, .steppings = 0x0080, .driver_data = 0x6b },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x0f, .steppings = 0x0400, .driver_data = 0x95 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x0f, .steppings = 0x0800, .driver_data = 0xbc },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x0f, .steppings = 0x2000, .driver_data = 0xa4 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x16, .steppings = 0x0002, .driver_data = 0x44 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x17, .steppings = 0x0040, .driver_data = 0x60f },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x17, .steppings = 0x0080, .driver_data = 0x70a },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x17, .steppings = 0x0400, .driver_data = 0xa0b },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x1a, .steppings = 0x0010, .driver_data = 0x12 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x1a, .steppings = 0x0020, .driver_data = 0x1d },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x1c, .steppings = 0x0004, .driver_data = 0x219 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x1c, .steppings = 0x0400, .driver_data = 0x107 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x1d, .steppings = 0x0002, .driver_data = 0x29 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x1e, .steppings = 0x0020, .driver_data = 0xa },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x25, .steppings = 0x0004, .driver_data = 0x11 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x25, .steppings = 0x0020, .driver_data = 0x7 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x26, .steppings = 0x0002, .driver_data = 0x105 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x2a, .steppings = 0x0080, .driver_data = 0x2f },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x2c, .steppings = 0x0004, .driver_data = 0x1f },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x2d, .steppings = 0x0040, .driver_data = 0x621 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x2d, .steppings = 0x0080, .driver_data = 0x71a },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x2e, .steppings = 0x0040, .driver_data = 0xd },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x2f, .steppings = 0x0004, .driver_data = 0x3b },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x37, .steppings = 0x0100, .driver_data = 0x838 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x37, .steppings = 0x0200, .driver_data = 0x90d },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x3a, .steppings = 0x0200, .driver_data = 0x21 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x3c, .steppings = 0x0008, .driver_data = 0x28 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x3d, .steppings = 0x0010, .driver_data = 0x2f },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x3e, .steppings = 0x0010, .driver_data = 0x42e },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x3e, .steppings = 0x0040, .driver_data = 0x600 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x3e, .steppings = 0x0080, .driver_data = 0x715 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x3f, .steppings = 0x0004, .driver_data = 0x49 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x3f, .steppings = 0x0010, .driver_data = 0x1a },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x45, .steppings = 0x0002, .driver_data = 0x26 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x46, .steppings = 0x0002, .driver_data = 0x1c },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x47, .steppings = 0x0002, .driver_data = 0x22 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x4c, .steppings = 0x0008, .driver_data = 0x368 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x4c, .steppings = 0x0010, .driver_data = 0x411 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x4d, .steppings = 0x0100, .driver_data = 0x12d },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x4e, .steppings = 0x0008, .driver_data = 0xf0 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x55, .steppings = 0x0008, .driver_data = 0x1000191 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x55, .steppings = 0x0010, .driver_data = 0x2007006 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x55, .steppings = 0x0020, .driver_data = 0x3000010 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x55, .steppings = 0x0040, .driver_data = 0x4003605 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x55, .steppings = 0x0080, .driver_data = 0x5003707 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x55, .steppings = 0x0800, .driver_data = 0x7002904 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x56, .steppings = 0x0004, .driver_data = 0x1c },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x56, .steppings = 0x0008, .driver_data = 0x700001c },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x56, .steppings = 0x0010, .driver_data = 0xf00001a },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x56, .steppings = 0x0020, .driver_data = 0xe000015 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x5c, .steppings = 0x0004, .driver_data = 0x14 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x5c, .steppings = 0x0200, .driver_data = 0x48 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x5c, .steppings = 0x0400, .driver_data = 0x28 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x5e, .steppings = 0x0008, .driver_data = 0xf0 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x5f, .steppings = 0x0002, .driver_data = 0x3e },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x66, .steppings = 0x0008, .driver_data = 0x2a },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x6a, .steppings = 0x0020, .driver_data = 0xc0002f0 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x6a, .steppings = 0x0040, .driver_data = 0xd0003e7 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x6c, .steppings = 0x0002, .driver_data = 0x10002b0 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x7a, .steppings = 0x0002, .driver_data = 0x42 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x7a, .steppings = 0x0100, .driver_data = 0x24 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x7e, .steppings = 0x0020, .driver_data = 0xc6 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x8a, .steppings = 0x0002, .driver_data = 0x33 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x8c, .steppings = 0x0002, .driver_data = 0xb8 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x8c, .steppings = 0x0004, .driver_data = 0x38 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x8d, .steppings = 0x0002, .driver_data = 0x52 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x8e, .steppings = 0x0200, .driver_data = 0xf6 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x8e, .steppings = 0x0400, .driver_data = 0xf6 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x8e, .steppings = 0x0800, .driver_data = 0xf6 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x8e, .steppings = 0x1000, .driver_data = 0xfc },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x8f, .steppings = 0x0100, .driver_data = 0x2c000390 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x8f, .steppings = 0x0080, .driver_data = 0x2b000603 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x8f, .steppings = 0x0040, .driver_data = 0x2c000390 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x8f, .steppings = 0x0020, .driver_data = 0x2c000390 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x8f, .steppings = 0x0010, .driver_data = 0x2c000390 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x96, .steppings = 0x0002, .driver_data = 0x1a },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x97, .steppings = 0x0004, .driver_data = 0x37 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x97, .steppings = 0x0020, .driver_data = 0x37 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0xbf, .steppings = 0x0004, .driver_data = 0x37 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0xbf, .steppings = 0x0020, .driver_data = 0x37 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x9a, .steppings = 0x0008, .driver_data = 0x435 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x9a, .steppings = 0x0010, .driver_data = 0x435 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x9c, .steppings = 0x0001, .driver_data = 0x24000026 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x9e, .steppings = 0x0200, .driver_data = 0xf8 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x9e, .steppings = 0x0400, .driver_data = 0xf8 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x9e, .steppings = 0x0800, .driver_data = 0xf6 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x9e, .steppings = 0x1000, .driver_data = 0xf8 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0x9e, .steppings = 0x2000, .driver_data = 0x100 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0xa5, .steppings = 0x0004, .driver_data = 0xfc },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0xa5, .steppings = 0x0008, .driver_data = 0xfc },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0xa5, .steppings = 0x0020, .driver_data = 0xfc },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0xa6, .steppings = 0x0001, .driver_data = 0xfe },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0xa6, .steppings = 0x0002, .driver_data = 0xfc },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0xa7, .steppings = 0x0002, .driver_data = 0x62 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0xaa, .steppings = 0x0010, .driver_data = 0x20 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0xb7, .steppings = 0x0002, .driver_data = 0x12b },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0xba, .steppings = 0x0004, .driver_data = 0x4123 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0xba, .steppings = 0x0008, .driver_data = 0x4123 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0xba, .steppings = 0x0100, .driver_data = 0x4123 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0xbe, .steppings = 0x0001, .driver_data = 0x1a },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0xcf, .steppings = 0x0004, .driver_data = 0x21000283 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0x6, .model = 0xcf, .steppings = 0x0002, .driver_data = 0x21000283 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0xf, .model = 0x00, .steppings = 0x0080, .driver_data = 0x12 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0xf, .model = 0x00, .steppings = 0x0400, .driver_data = 0x15 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0xf, .model = 0x01, .steppings = 0x0004, .driver_data = 0x2e },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0xf, .model = 0x02, .steppings = 0x0010, .driver_data = 0x21 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0xf, .model = 0x02, .steppings = 0x0020, .driver_data = 0x2c },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0xf, .model = 0x02, .steppings = 0x0040, .driver_data = 0x10 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0xf, .model = 0x02, .steppings = 0x0080, .driver_data = 0x39 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0xf, .model = 0x02, .steppings = 0x0200, .driver_data = 0x2f },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0xf, .model = 0x03, .steppings = 0x0004, .driver_data = 0xa },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0xf, .model = 0x03, .steppings = 0x0008, .driver_data = 0xc },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0xf, .model = 0x03, .steppings = 0x0010, .driver_data = 0x17 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0xf, .model = 0x04, .steppings = 0x0002, .driver_data = 0x17 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0xf, .model = 0x04, .steppings = 0x0008, .driver_data = 0x5 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0xf, .model = 0x04, .steppings = 0x0010, .driver_data = 0x6 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0xf, .model = 0x04, .steppings = 0x0080, .driver_data = 0x3 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0xf, .model = 0x04, .steppings = 0x0100, .driver_data = 0xe },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0xf, .model = 0x04, .steppings = 0x0200, .driver_data = 0x3 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0xf, .model = 0x04, .steppings = 0x0400, .driver_data = 0x4 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0xf, .model = 0x06, .steppings = 0x0004, .driver_data = 0xf },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0xf, .model = 0x06, .steppings = 0x0010, .driver_data = 0x4 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0xf, .model = 0x06, .steppings = 0x0020, .driver_data = 0x8 },
|
|
||||||
+{ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, .vendor = X86_VENDOR_INTEL, .family = 0xf, .model = 0x06, .steppings = 0x0100, .driver_data = 0x9 },
|
|
||||||
--- a/drivers/base/cpu.c
|
|
||||||
+++ b/drivers/base/cpu.c
|
|
||||||
@@ -600,6 +600,7 @@ CPU_SHOW_VULN_FALLBACK(spec_rstack_overf
|
|
||||||
CPU_SHOW_VULN_FALLBACK(gds);
|
|
||||||
CPU_SHOW_VULN_FALLBACK(reg_file_data_sampling);
|
|
||||||
CPU_SHOW_VULN_FALLBACK(ghostwrite);
|
|
||||||
+CPU_SHOW_VULN_FALLBACK(old_microcode);
|
|
||||||
|
|
||||||
static DEVICE_ATTR(meltdown, 0444, cpu_show_meltdown, NULL);
|
|
||||||
static DEVICE_ATTR(spectre_v1, 0444, cpu_show_spectre_v1, NULL);
|
|
||||||
@@ -616,6 +617,7 @@ static DEVICE_ATTR(spec_rstack_overflow,
|
|
||||||
static DEVICE_ATTR(gather_data_sampling, 0444, cpu_show_gds, NULL);
|
|
||||||
static DEVICE_ATTR(reg_file_data_sampling, 0444, cpu_show_reg_file_data_sampling, NULL);
|
|
||||||
static DEVICE_ATTR(ghostwrite, 0444, cpu_show_ghostwrite, NULL);
|
|
||||||
+static DEVICE_ATTR(old_microcode, 0444, cpu_show_old_microcode, NULL);
|
|
||||||
|
|
||||||
static struct attribute *cpu_root_vulnerabilities_attrs[] = {
|
|
||||||
&dev_attr_meltdown.attr,
|
|
||||||
@@ -633,6 +635,7 @@ static struct attribute *cpu_root_vulner
|
|
||||||
&dev_attr_gather_data_sampling.attr,
|
|
||||||
&dev_attr_reg_file_data_sampling.attr,
|
|
||||||
&dev_attr_ghostwrite.attr,
|
|
||||||
+ &dev_attr_old_microcode.attr,
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
--- a/include/linux/cpu.h
|
|
||||||
+++ b/include/linux/cpu.h
|
|
||||||
@@ -78,6 +78,8 @@ extern ssize_t cpu_show_gds(struct devic
|
|
||||||
extern ssize_t cpu_show_reg_file_data_sampling(struct device *dev,
|
|
||||||
struct device_attribute *attr, char *buf);
|
|
||||||
extern ssize_t cpu_show_ghostwrite(struct device *dev, struct device_attribute *attr, char *buf);
|
|
||||||
+extern ssize_t cpu_show_old_microcode(struct device *dev,
|
|
||||||
+ struct device_attribute *attr, char *buf);
|
|
||||||
|
|
||||||
extern __printf(4, 5)
|
|
||||||
struct device *cpu_device_create(struct device *parent, void *drvdata,
|
|
@@ -30,7 +30,7 @@ selection.
|
|||||||
|
|
||||||
--- a/Documentation/admin-guide/kernel-parameters.txt
|
--- a/Documentation/admin-guide/kernel-parameters.txt
|
||||||
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||||
@@ -2283,6 +2283,9 @@
|
@@ -2300,6 +2300,9 @@
|
||||||
disable
|
disable
|
||||||
Do not enable intel_pstate as the default
|
Do not enable intel_pstate as the default
|
||||||
scaling driver for the supported processors
|
scaling driver for the supported processors
|
||||||
|
@@ -43,7 +43,7 @@ Contains:
|
|||||||
|
|
||||||
--- a/mm/internal.h
|
--- a/mm/internal.h
|
||||||
+++ b/mm/internal.h
|
+++ b/mm/internal.h
|
||||||
@@ -741,6 +741,7 @@ void post_alloc_hook(struct page *page,
|
@@ -736,6 +736,7 @@ void post_alloc_hook(struct page *page,
|
||||||
extern bool free_pages_prepare(struct page *page, unsigned int order);
|
extern bool free_pages_prepare(struct page *page, unsigned int order);
|
||||||
|
|
||||||
extern int user_min_free_kbytes;
|
extern int user_min_free_kbytes;
|
||||||
@@ -62,7 +62,7 @@ Contains:
|
|||||||
/* prevent >1 _updater_ of zone percpu pageset ->high and ->batch fields */
|
/* prevent >1 _updater_ of zone percpu pageset ->high and ->batch fields */
|
||||||
static DEFINE_MUTEX(pcp_batch_high_lock);
|
static DEFINE_MUTEX(pcp_batch_high_lock);
|
||||||
#define MIN_PERCPU_PAGELIST_HIGH_FRACTION (8)
|
#define MIN_PERCPU_PAGELIST_HIGH_FRACTION (8)
|
||||||
@@ -4220,6 +4222,7 @@ __alloc_pages_slowpath(gfp_t gfp_mask, u
|
@@ -4255,6 +4257,7 @@ __alloc_pages_slowpath(gfp_t gfp_mask, u
|
||||||
unsigned int cpuset_mems_cookie;
|
unsigned int cpuset_mems_cookie;
|
||||||
unsigned int zonelist_iter_cookie;
|
unsigned int zonelist_iter_cookie;
|
||||||
int reserve_flags;
|
int reserve_flags;
|
||||||
@@ -70,7 +70,7 @@ Contains:
|
|||||||
|
|
||||||
if (unlikely(nofail)) {
|
if (unlikely(nofail)) {
|
||||||
/*
|
/*
|
||||||
@@ -4279,8 +4282,13 @@ restart:
|
@@ -4314,8 +4317,13 @@ restart:
|
||||||
goto nopage;
|
goto nopage;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ Contains:
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* The adjusted alloc_flags might result in immediate success, so try
|
* The adjusted alloc_flags might result in immediate success, so try
|
||||||
@@ -4482,9 +4490,12 @@ nopage:
|
@@ -4517,9 +4525,12 @@ nopage:
|
||||||
goto retry;
|
goto retry;
|
||||||
}
|
}
|
||||||
fail:
|
fail:
|
||||||
|
@@ -9,7 +9,7 @@ Subject: ZEN: INTERACTIVE: Base config item
|
|||||||
|
|
||||||
--- a/init/Kconfig
|
--- a/init/Kconfig
|
||||||
+++ b/init/Kconfig
|
+++ b/init/Kconfig
|
||||||
@@ -162,6 +162,12 @@ config THREAD_INFO_IN_TASK
|
@@ -165,6 +165,12 @@ config THREAD_INFO_IN_TASK
|
||||||
|
|
||||||
menu "General setup"
|
menu "General setup"
|
||||||
|
|
||||||
|
@@ -24,7 +24,7 @@ Subject: ZEN: INTERACTIVE: Use BFQ as the elevator for SQ devices
|
|||||||
/*
|
/*
|
||||||
--- a/init/Kconfig
|
--- a/init/Kconfig
|
||||||
+++ b/init/Kconfig
|
+++ b/init/Kconfig
|
||||||
@@ -168,6 +168,10 @@ config ZEN_INTERACTIVE
|
@@ -171,6 +171,10 @@ config ZEN_INTERACTIVE
|
||||||
help
|
help
|
||||||
Tunes the kernel for responsiveness at the cost of throughput and power usage.
|
Tunes the kernel for responsiveness at the cost of throughput and power usage.
|
||||||
|
|
||||||
|
@@ -26,7 +26,7 @@ Subject: ZEN: INTERACTIVE: Use Kyber as the elevator for MQ devices
|
|||||||
return elevator_find_get("bfq");
|
return elevator_find_get("bfq");
|
||||||
--- a/init/Kconfig
|
--- a/init/Kconfig
|
||||||
+++ b/init/Kconfig
|
+++ b/init/Kconfig
|
||||||
@@ -171,6 +171,7 @@ config ZEN_INTERACTIVE
|
@@ -174,6 +174,7 @@ config ZEN_INTERACTIVE
|
||||||
--- Block Layer ----------------------------------------
|
--- Block Layer ----------------------------------------
|
||||||
|
|
||||||
Default scheduler for SQ..: mq-deadline -> bfq
|
Default scheduler for SQ..: mq-deadline -> bfq
|
||||||
|
@@ -32,7 +32,7 @@ Reasoning and details in the original patch: https://lwn.net/Articles/711248/
|
|||||||
|
|
||||||
--- a/init/Kconfig
|
--- a/init/Kconfig
|
||||||
+++ b/init/Kconfig
|
+++ b/init/Kconfig
|
||||||
@@ -173,6 +173,10 @@ config ZEN_INTERACTIVE
|
@@ -176,6 +176,10 @@ config ZEN_INTERACTIVE
|
||||||
Default scheduler for SQ..: mq-deadline -> bfq
|
Default scheduler for SQ..: mq-deadline -> bfq
|
||||||
Default scheduler for MQ..: none -> kyber
|
Default scheduler for MQ..: none -> kyber
|
||||||
|
|
||||||
|
@@ -42,7 +42,7 @@ caused by rebalancing too many tasks at once.
|
|||||||
|
|
||||||
--- a/init/Kconfig
|
--- a/init/Kconfig
|
||||||
+++ b/init/Kconfig
|
+++ b/init/Kconfig
|
||||||
@@ -177,6 +177,13 @@ config ZEN_INTERACTIVE
|
@@ -180,6 +180,13 @@ config ZEN_INTERACTIVE
|
||||||
|
|
||||||
Background-reclaim hugepages...: no -> yes
|
Background-reclaim hugepages...: no -> yes
|
||||||
|
|
||||||
|
@@ -75,7 +75,7 @@ Remove MuQSS cpufreq configuration.
|
|||||||
|
|
||||||
--- a/init/Kconfig
|
--- a/init/Kconfig
|
||||||
+++ b/init/Kconfig
|
+++ b/init/Kconfig
|
||||||
@@ -184,6 +184,12 @@ config ZEN_INTERACTIVE
|
@@ -187,6 +187,12 @@ config ZEN_INTERACTIVE
|
||||||
Bandwidth slice size...........: 5 -> 3 ms
|
Bandwidth slice size...........: 5 -> 3 ms
|
||||||
Task rebalancing threshold.....: 32 -> 8
|
Task rebalancing threshold.....: 32 -> 8
|
||||||
|
|
||||||
|
@@ -12,7 +12,7 @@ turn it off when CONFIG_ZEN_INTERACTIVE is set as well.
|
|||||||
|
|
||||||
--- a/init/Kconfig
|
--- a/init/Kconfig
|
||||||
+++ b/init/Kconfig
|
+++ b/init/Kconfig
|
||||||
@@ -176,6 +176,7 @@ config ZEN_INTERACTIVE
|
@@ -179,6 +179,7 @@ config ZEN_INTERACTIVE
|
||||||
--- Virtual Memory Subsystem ---------------------------
|
--- Virtual Memory Subsystem ---------------------------
|
||||||
|
|
||||||
Background-reclaim hugepages...: no -> yes
|
Background-reclaim hugepages...: no -> yes
|
||||||
|
@@ -33,7 +33,7 @@ Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com>
|
|||||||
|
|
||||||
--- a/init/Kconfig
|
--- a/init/Kconfig
|
||||||
+++ b/init/Kconfig
|
+++ b/init/Kconfig
|
||||||
@@ -177,6 +177,7 @@ config ZEN_INTERACTIVE
|
@@ -180,6 +180,7 @@ config ZEN_INTERACTIVE
|
||||||
|
|
||||||
Background-reclaim hugepages...: no -> yes
|
Background-reclaim hugepages...: no -> yes
|
||||||
Compact unevictable............: yes -> no
|
Compact unevictable............: yes -> no
|
||||||
|
@@ -47,7 +47,7 @@ Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com>
|
|||||||
|
|
||||||
--- a/init/Kconfig
|
--- a/init/Kconfig
|
||||||
+++ b/init/Kconfig
|
+++ b/init/Kconfig
|
||||||
@@ -178,6 +178,7 @@ config ZEN_INTERACTIVE
|
@@ -181,6 +181,7 @@ config ZEN_INTERACTIVE
|
||||||
Background-reclaim hugepages...: no -> yes
|
Background-reclaim hugepages...: no -> yes
|
||||||
Compact unevictable............: yes -> no
|
Compact unevictable............: yes -> no
|
||||||
Watermark boost factor.........: 1.5 -> 0
|
Watermark boost factor.........: 1.5 -> 0
|
||||||
|
@@ -34,7 +34,7 @@ Fixes: https://github.com/zen-kernel/zen-kernel/issues/282
|
|||||||
goto bad;
|
goto bad;
|
||||||
--- a/init/Kconfig
|
--- a/init/Kconfig
|
||||||
+++ b/init/Kconfig
|
+++ b/init/Kconfig
|
||||||
@@ -172,6 +172,7 @@ config ZEN_INTERACTIVE
|
@@ -175,6 +175,7 @@ config ZEN_INTERACTIVE
|
||||||
|
|
||||||
Default scheduler for SQ..: mq-deadline -> bfq
|
Default scheduler for SQ..: mq-deadline -> bfq
|
||||||
Default scheduler for MQ..: none -> kyber
|
Default scheduler for MQ..: none -> kyber
|
||||||
|
@@ -20,7 +20,7 @@ same change so Zen Kernel users benefit.
|
|||||||
|
|
||||||
--- a/init/Kconfig
|
--- a/init/Kconfig
|
||||||
+++ b/init/Kconfig
|
+++ b/init/Kconfig
|
||||||
@@ -180,6 +180,7 @@ config ZEN_INTERACTIVE
|
@@ -183,6 +183,7 @@ config ZEN_INTERACTIVE
|
||||||
Compact unevictable............: yes -> no
|
Compact unevictable............: yes -> no
|
||||||
Watermark boost factor.........: 1.5 -> 0
|
Watermark boost factor.........: 1.5 -> 0
|
||||||
Pageblock order................: 10 -> 3
|
Pageblock order................: 10 -> 3
|
||||||
|
@@ -9,7 +9,7 @@ Subject: ZEN: INTERACTIVE: Document PDS/BMQ configuration
|
|||||||
|
|
||||||
--- a/init/Kconfig
|
--- a/init/Kconfig
|
||||||
+++ b/init/Kconfig
|
+++ b/init/Kconfig
|
||||||
@@ -189,6 +189,11 @@ config ZEN_INTERACTIVE
|
@@ -192,6 +192,11 @@ config ZEN_INTERACTIVE
|
||||||
Bandwidth slice size...........: 5 -> 3 ms
|
Bandwidth slice size...........: 5 -> 3 ms
|
||||||
Task rebalancing threshold.....: 32 -> 8
|
Task rebalancing threshold.....: 32 -> 8
|
||||||
|
|
||||||
|
38
debian/patches/series
vendored
38
debian/patches/series
vendored
@@ -156,9 +156,23 @@ patchset-pf/cpuidle/0001-cpuidle-Prefer-teo-over-menu-governor.patch
|
|||||||
patchset-pf/crypto/0001-crypto-x86-aes-xts-make-the-fast-path-64-bit-specifi.patch
|
patchset-pf/crypto/0001-crypto-x86-aes-xts-make-the-fast-path-64-bit-specifi.patch
|
||||||
patchset-pf/crypto/0002-crypto-x86-aes-ctr-rewrite-AESNI-AVX-optimized-CTR-a.patch
|
patchset-pf/crypto/0002-crypto-x86-aes-ctr-rewrite-AESNI-AVX-optimized-CTR-a.patch
|
||||||
|
|
||||||
patchset-pf/smb/0001-ksmbd-prevent-rename-with-empty-string.patch
|
patchset-pf/invlpgb/0001-x86-mm-Make-MMU_GATHER_RCU_TABLE_FREE-unconditional.patch
|
||||||
patchset-pf/smb/0002-ksmbd-prevent-out-of-bounds-stream-writes-by-validat.patch
|
patchset-pf/invlpgb/0002-x86-mm-Remove-pv_ops.mmu.tlb_remove_table-call.patch
|
||||||
patchset-pf/smb/0003-ksmbd-Fix-UAF-in-__close_file_table_ids.patch
|
patchset-pf/invlpgb/0003-x86-mm-Consolidate-full-flush-threshold-decision.patch
|
||||||
|
patchset-pf/invlpgb/0004-x86-mm-Add-INVLPGB-feature-and-Kconfig-entry.patch
|
||||||
|
patchset-pf/invlpgb/0005-x86-mm-Add-INVLPGB-support-code.patch
|
||||||
|
patchset-pf/invlpgb/0006-x86-mm-Use-INVLPGB-for-kernel-TLB-flushes.patch
|
||||||
|
patchset-pf/invlpgb/0007-x86-mm-Use-broadcast-TLB-flushing-in-page-reclaim.patch
|
||||||
|
patchset-pf/invlpgb/0008-x86-mm-Add-global-ASID-allocation-helper-functions.patch
|
||||||
|
patchset-pf/invlpgb/0009-x86-mm-Handle-global-ASID-context-switch-and-TLB-flu.patch
|
||||||
|
patchset-pf/invlpgb/0010-x86-mm-Add-global-ASID-process-exit-helpers.patch
|
||||||
|
patchset-pf/invlpgb/0011-x86-mm-Enable-broadcast-TLB-invalidation-for-multi-t.patch
|
||||||
|
patchset-pf/invlpgb/0012-x86-mm-Enable-AMD-translation-cache-extensions.patch
|
||||||
|
patchset-pf/invlpgb/0013-x86-mm-Always-set-the-ASID-valid-bit-for-the-INVLPGB.patch
|
||||||
|
patchset-pf/invlpgb/0014-x86-mm-Only-do-broadcast-flush-from-reclaim-if-pages.patch
|
||||||
|
patchset-pf/invlpgb/0015-x86-mm-Eliminate-window-where-TLB-flushes-may-be-ina.patch
|
||||||
|
|
||||||
|
patchset-pf/smb/0001-smb-client-fix-memory-leak-during-error-handling-for.patch
|
||||||
|
|
||||||
patchset-pf/zstd/0001-zstd-import-upstream-v1.5.7.patch
|
patchset-pf/zstd/0001-zstd-import-upstream-v1.5.7.patch
|
||||||
patchset-pf/zstd/0002-lib-zstd-Refactor-intentional-wrap-around-test.patch
|
patchset-pf/zstd/0002-lib-zstd-Refactor-intentional-wrap-around-test.patch
|
||||||
@@ -203,21 +217,6 @@ patchset-xanmod/valve/0004-leds-steamdeck-Add-support-for-Steam-Deck-LED.patch
|
|||||||
patchset-xanmod/valve/0005-mfd-Add-MFD-core-driver-for-Steam-Deck.patch
|
patchset-xanmod/valve/0005-mfd-Add-MFD-core-driver-for-Steam-Deck.patch
|
||||||
patchset-xanmod/valve/0006-mfd-steamdeck-Expose-controller-board-power-in-sysfs.patch
|
patchset-xanmod/valve/0006-mfd-steamdeck-Expose-controller-board-power-in-sysfs.patch
|
||||||
|
|
||||||
patchset-zen/invlpgb/0001-x86-mm-Make-MMU_GATHER_RCU_TABLE_FREE-unconditional.patch
|
|
||||||
patchset-zen/invlpgb/0002-x86-mm-Remove-pv_ops.mmu.tlb_remove_table-call.patch
|
|
||||||
patchset-zen/invlpgb/0003-x86-mm-Consolidate-full-flush-threshold-decision.patch
|
|
||||||
patchset-zen/invlpgb/0004-x86-mm-Add-INVLPGB-feature-and-Kconfig-entry.patch
|
|
||||||
patchset-zen/invlpgb/0005-x86-mm-Add-INVLPGB-support-code.patch
|
|
||||||
patchset-zen/invlpgb/0006-x86-mm-Use-INVLPGB-for-kernel-TLB-flushes.patch
|
|
||||||
patchset-zen/invlpgb/0007-x86-mm-Use-broadcast-TLB-flushing-in-page-reclaim.patch
|
|
||||||
patchset-zen/invlpgb/0008-x86-mm-Add-global-ASID-allocation-helper-functions.patch
|
|
||||||
patchset-zen/invlpgb/0009-x86-mm-Handle-global-ASID-context-switch-and-TLB-flu.patch
|
|
||||||
patchset-zen/invlpgb/0010-x86-mm-Add-global-ASID-process-exit-helpers.patch
|
|
||||||
patchset-zen/invlpgb/0011-x86-mm-Enable-broadcast-TLB-invalidation-for-multi-t.patch
|
|
||||||
patchset-zen/invlpgb/0012-x86-mm-Enable-AMD-translation-cache-extensions.patch
|
|
||||||
patchset-zen/invlpgb/0013-x86-mm-Always-set-the-ASID-valid-bit-for-the-INVLPGB.patch
|
|
||||||
patchset-zen/invlpgb/0014-x86-mm-Only-do-broadcast-flush-from-reclaim-if-pages.patch
|
|
||||||
|
|
||||||
patchset-zen/ksm/0001-mm-expose-per-process-KSM-control-via-syscalls.patch
|
patchset-zen/ksm/0001-mm-expose-per-process-KSM-control-via-syscalls.patch
|
||||||
|
|
||||||
patchset-xanmod/xanmod/0001-kbuild-Re-add-.config-file-required-to-sign-external.patch
|
patchset-xanmod/xanmod/0001-kbuild-Re-add-.config-file-required-to-sign-external.patch
|
||||||
@@ -273,9 +272,6 @@ patchset-pf/fixes/0008-gcc-15-make-unterminated-string-initialization-just-.patc
|
|||||||
patchset-pf/fixes/0009-gcc-15-disable-Wunterminated-string-initialization-e.patch
|
patchset-pf/fixes/0009-gcc-15-disable-Wunterminated-string-initialization-e.patch
|
||||||
patchset-pf/fixes/0010-wifi-mac80211-mark-copy_mesh_setup-as-noinline.patch
|
patchset-pf/fixes/0010-wifi-mac80211-mark-copy_mesh_setup-as-noinline.patch
|
||||||
patchset-pf/fixes/0011-mei-vsc-Use-struct-vsc_tp_packet-as-vsc-tp-tx_buf-an.patch
|
patchset-pf/fixes/0011-mei-vsc-Use-struct-vsc_tp_packet-as-vsc-tp-tx_buf-an.patch
|
||||||
patchset-pf/fixes/0012-Revert-drm-amd-Stop-evicting-resources-on-APUs-in-su.patch
|
|
||||||
patchset-pf/fixes/0013-drm-amdgpu-fix-pm-notifier-handling.patch
|
|
||||||
|
|
||||||
patchset-zen/fixes/0001-arch-Kconfig-Default-to-maximum-amount-of-ASLR-bits.patch
|
patchset-zen/fixes/0001-arch-Kconfig-Default-to-maximum-amount-of-ASLR-bits.patch
|
||||||
patchset-zen/fixes/0002-drivers-firmware-skip-simpledrm-if-nvidia-drm.modese.patch
|
patchset-zen/fixes/0002-drivers-firmware-skip-simpledrm-if-nvidia-drm.modese.patch
|
||||||
patchset-zen/fixes/0003-x86-cpu-Help-users-notice-when-running-old-Intel-microcode.patch
|
|
||||||
|
Reference in New Issue
Block a user