From bb222b722673c5829c76da991fc4fd9b2cf433ea Mon Sep 17 00:00:00 2001 From: ferreo Date: Sun, 23 Feb 2025 16:24:51 +0100 Subject: [PATCH] Update patches/0001-cachyos-base-all.patch --- patches/0001-cachyos-base-all.patch | 468 +++++++--------------------- 1 file changed, 112 insertions(+), 356 deletions(-) diff --git a/patches/0001-cachyos-base-all.patch b/patches/0001-cachyos-base-all.patch index 8108b0b..735adf0 100644 --- a/patches/0001-cachyos-base-all.patch +++ b/patches/0001-cachyos-base-all.patch @@ -1,15 +1,15 @@ -From 7ab1776e0655d3eee1b58834caa1a26994a08d67 Mon Sep 17 00:00:00 2001 +From 521dea9a496313ed35debb9af0dcf2c0faeef35d Mon Sep 17 00:00:00 2001 From: Peter Jung -Date: Mon, 17 Feb 2025 16:28:48 +0100 +Date: Fri, 21 Feb 2025 14:37:58 +0100 Subject: [PATCH 01/12] amd-pstate Signed-off-by: Peter Jung --- - drivers/cpufreq/amd-pstate-trace.h | 52 ++- + drivers/cpufreq/amd-pstate-trace.h | 52 +++- drivers/cpufreq/amd-pstate-ut.c | 12 +- - drivers/cpufreq/amd-pstate.c | 490 ++++++++++++++--------------- + drivers/cpufreq/amd-pstate.c | 397 +++++++++++++++-------------- drivers/cpufreq/amd-pstate.h | 3 - - 4 files changed, 284 insertions(+), 273 deletions(-) + 4 files changed, 259 insertions(+), 205 deletions(-) diff --git a/drivers/cpufreq/amd-pstate-trace.h b/drivers/cpufreq/amd-pstate-trace.h index 35f38ae67fb1..8d692415d905 100644 @@ -156,7 +156,7 @@ index a261d7300951..3a0a380c3590 100644 } } else { diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c -index f6d04eb40af9..6a1e02389831 100644 +index f71057c2cf90..6a1e02389831 100644 --- a/drivers/cpufreq/amd-pstate.c +++ b/drivers/cpufreq/amd-pstate.c @@ -22,6 +22,7 @@ @@ -543,21 +543,15 @@ index f6d04eb40af9..6a1e02389831 100644 policy->max = policy->cpuinfo.max_freq; -@@ -727,12 +744,10 @@ static int amd_pstate_set_boost(struct cpufreq_policy *policy, int state) - pr_err("Boost mode is not supported by this processor or SBIOS\n"); - return -EOPNOTSUPP; - } -- mutex_lock(&amd_pstate_driver_lock); -+ guard(mutex)(&amd_pstate_driver_lock); -+ +@@ -730,8 +747,6 @@ static int amd_pstate_set_boost(struct cpufreq_policy *policy, int state) + guard(mutex)(&amd_pstate_driver_lock); + ret = amd_pstate_cpu_boost_update(policy, state); - WRITE_ONCE(cpudata->boost_state, !ret ? state : false); - policy->boost_enabled = !ret ? state : false; refresh_frequency_limits(policy); -- mutex_unlock(&amd_pstate_driver_lock); return ret; - } @@ -752,9 +767,6 @@ static int amd_pstate_init_boost_support(struct amd_cpudata *cpudata) goto exit_err; } @@ -568,57 +562,7 @@ index f6d04eb40af9..6a1e02389831 100644 ret = rdmsrl_on_cpu(cpudata->cpu, MSR_K7_HWCR, &boost_val); if (ret) { pr_err_once("failed to read initial CPU boost state!\n"); -@@ -809,24 +821,28 @@ static void amd_pstate_init_prefcore(struct amd_cpudata *cpudata) - - static void amd_pstate_update_limits(unsigned int cpu) - { -- struct cpufreq_policy *policy = cpufreq_cpu_get(cpu); -+ struct cpufreq_policy *policy = NULL; - struct amd_cpudata *cpudata; - u32 prev_high = 0, cur_high = 0; - int ret; - bool highest_perf_changed = false; - -+ if (!amd_pstate_prefcore) -+ return; -+ -+ policy = cpufreq_cpu_get(cpu); - if (!policy) - return; - - cpudata = policy->driver_data; - -- if (!amd_pstate_prefcore) -- return; -+ guard(mutex)(&amd_pstate_driver_lock); - -- mutex_lock(&amd_pstate_driver_lock); - ret = amd_get_highest_perf(cpu, &cur_high); -- if (ret) -- goto free_cpufreq_put; -+ if (ret) { -+ cpufreq_cpu_put(policy); -+ return; -+ } - - prev_high = READ_ONCE(cpudata->prefcore_ranking); - highest_perf_changed = (prev_high != cur_high); -@@ -836,14 +852,11 @@ static void amd_pstate_update_limits(unsigned int cpu) - if (cur_high < CPPC_MAX_PERF) - sched_set_itmt_core_prio((int)cur_high, cpu); - } -- --free_cpufreq_put: - cpufreq_cpu_put(policy); - - if (!highest_perf_changed) - cpufreq_update_policy(cpu); - -- mutex_unlock(&amd_pstate_driver_lock); - } - - /* -@@ -905,29 +918,29 @@ static int amd_pstate_init_freq(struct amd_cpudata *cpudata) +@@ -906,29 +918,29 @@ static int amd_pstate_init_freq(struct amd_cpudata *cpudata) return ret; if (quirks && quirks->lowest_freq) @@ -657,7 +601,7 @@ index f6d04eb40af9..6a1e02389831 100644 /** * Below values need to be initialized correctly, otherwise driver will fail to load -@@ -937,13 +950,13 @@ static int amd_pstate_init_freq(struct amd_cpudata *cpudata) +@@ -938,13 +950,13 @@ static int amd_pstate_init_freq(struct amd_cpudata *cpudata) */ if (min_freq <= 0 || max_freq <= 0 || nominal_freq <= 0 || min_freq > max_freq) { pr_err("min_freq(%d) or max_freq(%d) or nominal_freq(%d) value is incorrect\n", @@ -674,7 +618,7 @@ index f6d04eb40af9..6a1e02389831 100644 return -EINVAL; } -@@ -1160,7 +1173,6 @@ static ssize_t show_energy_performance_available_preferences( +@@ -1161,7 +1173,6 @@ static ssize_t show_energy_performance_available_preferences( static ssize_t store_energy_performance_preference( struct cpufreq_policy *policy, const char *buf, size_t count) { @@ -682,23 +626,16 @@ index f6d04eb40af9..6a1e02389831 100644 char str_preference[21]; ssize_t ret; -@@ -1172,11 +1184,11 @@ static ssize_t store_energy_performance_preference( - if (ret < 0) - return -EINVAL; +@@ -1175,7 +1186,7 @@ static ssize_t store_energy_performance_preference( + + guard(mutex)(&amd_pstate_limits_lock); -- mutex_lock(&amd_pstate_limits_lock); - ret = amd_pstate_set_energy_pref_index(cpudata, ret); -- mutex_unlock(&amd_pstate_limits_lock); -+ guard(mutex)(&amd_pstate_limits_lock); - -- return ret ?: count; + ret = amd_pstate_set_energy_pref_index(policy, ret); -+ -+ return ret ? ret : count; - } - static ssize_t show_energy_performance_preference( -@@ -1185,9 +1197,22 @@ static ssize_t show_energy_performance_preference( + return ret ? ret : count; + } +@@ -1186,9 +1197,22 @@ static ssize_t show_energy_performance_preference( struct amd_cpudata *cpudata = policy->driver_data; int preference; @@ -724,7 +661,7 @@ index f6d04eb40af9..6a1e02389831 100644 return sysfs_emit(buf, "%s\n", energy_perf_strings[preference]); } -@@ -1236,6 +1261,9 @@ static int amd_pstate_register_driver(int mode) +@@ -1237,6 +1261,9 @@ static int amd_pstate_register_driver(int mode) return ret; } @@ -734,34 +671,7 @@ index f6d04eb40af9..6a1e02389831 100644 ret = cpufreq_register_driver(current_pstate_driver); if (ret) { amd_pstate_driver_cleanup(); -@@ -1340,13 +1368,10 @@ EXPORT_SYMBOL_GPL(amd_pstate_update_status); - static ssize_t status_show(struct device *dev, - struct device_attribute *attr, char *buf) - { -- ssize_t ret; - -- mutex_lock(&amd_pstate_driver_lock); -- ret = amd_pstate_show_status(buf); -- mutex_unlock(&amd_pstate_driver_lock); -+ guard(mutex)(&amd_pstate_driver_lock); - -- return ret; -+ return amd_pstate_show_status(buf); - } - - static ssize_t status_store(struct device *a, struct device_attribute *b, -@@ -1355,9 +1380,8 @@ static ssize_t status_store(struct device *a, struct device_attribute *b, - char *p = memchr(buf, '\n', count); - int ret; - -- mutex_lock(&amd_pstate_driver_lock); -+ guard(mutex)(&amd_pstate_driver_lock); - ret = amd_pstate_update_status(buf, p ? p - buf : count); -- mutex_unlock(&amd_pstate_driver_lock); - - return ret < 0 ? ret : count; - } -@@ -1451,7 +1475,6 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy) +@@ -1448,7 +1475,6 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy) return -ENOMEM; cpudata->cpu = policy->cpu; @@ -769,7 +679,7 @@ index f6d04eb40af9..6a1e02389831 100644 ret = amd_pstate_init_perf(cpudata); if (ret) -@@ -1477,8 +1500,6 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy) +@@ -1474,8 +1500,6 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy) policy->driver_data = cpudata; @@ -778,7 +688,7 @@ index f6d04eb40af9..6a1e02389831 100644 policy->min = policy->cpuinfo.min_freq; policy->max = policy->cpuinfo.max_freq; -@@ -1489,10 +1510,13 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy) +@@ -1486,10 +1510,13 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy) * the default cpufreq governor is neither powersave nor performance. */ if (amd_pstate_acpi_pm_profile_server() || @@ -794,7 +704,7 @@ index f6d04eb40af9..6a1e02389831 100644 if (cpu_feature_enabled(X86_FEATURE_CPPC)) { ret = rdmsrl_on_cpu(cpudata->cpu, MSR_AMD_CPPC_REQ, &value); -@@ -1505,6 +1529,9 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy) +@@ -1502,6 +1529,9 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy) return ret; WRITE_ONCE(cpudata->cppc_cap1_cached, value); } @@ -804,7 +714,7 @@ index f6d04eb40af9..6a1e02389831 100644 current_pstate_driver->adjust_perf = NULL; -@@ -1530,51 +1557,24 @@ static void amd_pstate_epp_cpu_exit(struct cpufreq_policy *policy) +@@ -1527,51 +1557,24 @@ static void amd_pstate_epp_cpu_exit(struct cpufreq_policy *policy) static int amd_pstate_epp_update_limit(struct cpufreq_policy *policy) { struct amd_cpudata *cpudata = policy->driver_data; @@ -867,39 +777,29 @@ index f6d04eb40af9..6a1e02389831 100644 } static int amd_pstate_epp_set_policy(struct cpufreq_policy *policy) -@@ -1603,87 +1603,63 @@ static int amd_pstate_epp_set_policy(struct cpufreq_policy *policy) +@@ -1600,8 +1603,9 @@ static int amd_pstate_epp_set_policy(struct cpufreq_policy *policy) return 0; } -static void amd_pstate_epp_reenable(struct amd_cpudata *cpudata) +static int amd_pstate_epp_reenable(struct cpufreq_policy *policy) { -- struct cppc_perf_ctrls perf_ctrls; -- u64 value, max_perf; + struct amd_cpudata *cpudata = policy->driver_data; -+ u64 max_perf; + u64 max_perf; int ret; - ret = amd_pstate_cppc_enable(true); - if (ret) - pr_err("failed to enable amd pstate during resume, return %d\n", ret); +@@ -1611,17 +1615,26 @@ static void amd_pstate_epp_reenable(struct amd_cpudata *cpudata) -- value = READ_ONCE(cpudata->cppc_req_cached); max_perf = READ_ONCE(cpudata->highest_perf); -- if (cpu_feature_enabled(X86_FEATURE_CPPC)) { -- wrmsrl_on_cpu(cpudata->cpu, MSR_AMD_CPPC_REQ, value); -- } else { -- perf_ctrls.max_perf = max_perf; -- cppc_set_perf(cpudata->cpu, &perf_ctrls); -- perf_ctrls.energy_perf = AMD_CPPC_ENERGY_PERF_PREF(cpudata->epp_cached); -- cppc_set_epp_perf(cpudata->cpu, &perf_ctrls, 1); +- amd_pstate_update_perf(cpudata, 0, 0, max_perf, false); +- amd_pstate_set_epp(cpudata, cpudata->epp_cached); + if (trace_amd_pstate_epp_perf_enabled()) { + trace_amd_pstate_epp_perf(cpudata->cpu, cpudata->highest_perf, + cpudata->epp_cached, + FIELD_GET(AMD_CPPC_MIN_PERF_MASK, cpudata->cppc_req_cached), + max_perf, policy->boost_enabled); - } ++ } + + return amd_pstate_update_perf(cpudata, 0, 0, max_perf, cpudata->epp_cached, false); } @@ -911,93 +811,41 @@ index f6d04eb40af9..6a1e02389831 100644 pr_debug("AMD CPU Core %d going online\n", cpudata->cpu); -- if (cppc_state == AMD_PSTATE_ACTIVE) { -- amd_pstate_epp_reenable(cpudata); -- cpudata->suspended = false; -- } +- amd_pstate_epp_reenable(cpudata); + ret = amd_pstate_epp_reenable(policy); + if (ret) + return ret; -+ cpudata->suspended = false; + cpudata->suspended = false; return 0; - } +@@ -1639,10 +1652,14 @@ static int amd_pstate_epp_cpu_offline(struct cpufreq_policy *policy) --static void amd_pstate_epp_offline(struct cpufreq_policy *policy) --{ -- struct amd_cpudata *cpudata = policy->driver_data; -- struct cppc_perf_ctrls perf_ctrls; -- int min_perf; -- u64 value; -- -- min_perf = READ_ONCE(cpudata->lowest_perf); -- value = READ_ONCE(cpudata->cppc_req_cached); -- -- mutex_lock(&amd_pstate_limits_lock); -- if (cpu_feature_enabled(X86_FEATURE_CPPC)) { -- cpudata->epp_policy = CPUFREQ_POLICY_UNKNOWN; -- -- /* Set max perf same as min perf */ -- value &= ~AMD_CPPC_MAX_PERF(~0L); -- value |= AMD_CPPC_MAX_PERF(min_perf); -- value &= ~AMD_CPPC_MIN_PERF(~0L); -- value |= AMD_CPPC_MIN_PERF(min_perf); -- wrmsrl_on_cpu(cpudata->cpu, MSR_AMD_CPPC_REQ, value); -- } else { -- perf_ctrls.desired_perf = 0; -- perf_ctrls.min_perf = min_perf; -- perf_ctrls.max_perf = min_perf; -- cppc_set_perf(cpudata->cpu, &perf_ctrls); -- perf_ctrls.energy_perf = AMD_CPPC_ENERGY_PERF_PREF(HWP_EPP_BALANCE_POWERSAVE); -- cppc_set_epp_perf(cpudata->cpu, &perf_ctrls, 1); -- } -- mutex_unlock(&amd_pstate_limits_lock); --} -- - static int amd_pstate_epp_cpu_offline(struct cpufreq_policy *policy) - { - struct amd_cpudata *cpudata = policy->driver_data; -- -- pr_debug("AMD CPU Core %d going offline\n", cpudata->cpu); -+ int min_perf; + guard(mutex)(&amd_pstate_limits_lock); - if (cpudata->suspended) - return 0; - -- if (cppc_state == AMD_PSTATE_ACTIVE) -- amd_pstate_epp_offline(policy); -+ min_perf = READ_ONCE(cpudata->lowest_perf); - -- return 0; -+ guard(mutex)(&amd_pstate_limits_lock); -+ +- amd_pstate_update_perf(cpudata, min_perf, 0, min_perf, false); +- amd_pstate_set_epp(cpudata, AMD_CPPC_EPP_BALANCE_POWERSAVE); + if (trace_amd_pstate_epp_perf_enabled()) { + trace_amd_pstate_epp_perf(cpudata->cpu, cpudata->highest_perf, + AMD_CPPC_EPP_BALANCE_POWERSAVE, + min_perf, min_perf, policy->boost_enabled); + } -+ + +- return 0; + return amd_pstate_update_perf(cpudata, min_perf, 0, min_perf, + AMD_CPPC_EPP_BALANCE_POWERSAVE, false); } static int amd_pstate_epp_suspend(struct cpufreq_policy *policy) -@@ -1711,12 +1687,10 @@ static int amd_pstate_epp_resume(struct cpufreq_policy *policy) - struct amd_cpudata *cpudata = policy->driver_data; - - if (cpudata->suspended) { -- mutex_lock(&amd_pstate_limits_lock); -+ guard(mutex)(&amd_pstate_limits_lock); +@@ -1673,7 +1690,7 @@ static int amd_pstate_epp_resume(struct cpufreq_policy *policy) + guard(mutex)(&amd_pstate_limits_lock); /* enable amd pstate from suspend state*/ - amd_pstate_epp_reenable(cpudata); -- -- mutex_unlock(&amd_pstate_limits_lock); + amd_pstate_epp_reenable(policy); cpudata->suspended = false; } -@@ -1869,6 +1843,8 @@ static int __init amd_pstate_init(void) +@@ -1826,6 +1843,8 @@ static int __init amd_pstate_init(void) static_call_update(amd_pstate_cppc_enable, shmem_cppc_enable); static_call_update(amd_pstate_init_perf, shmem_init_perf); static_call_update(amd_pstate_update_perf, shmem_update_perf); @@ -1035,9 +883,9 @@ index cd573bc6b6db..9747e3be6cee 100644 -- 2.48.0.rc1 -From c01c10767015f219e780922e3c96f575a12209c1 Mon Sep 17 00:00:00 2001 +From 31240ebeb2bb55bec0be0f5a3d1949980a0d5531 Mon Sep 17 00:00:00 2001 From: Peter Jung -Date: Mon, 17 Feb 2025 16:30:20 +0100 +Date: Fri, 21 Feb 2025 14:45:47 +0100 Subject: [PATCH 02/12] amd-tlb-broadcast Signed-off-by: Peter Jung @@ -1048,18 +896,18 @@ Signed-off-by: Peter Jung arch/x86/include/asm/cpufeatures.h | 1 + arch/x86/include/asm/disabled-features.h | 8 +- arch/x86/include/asm/invlpgb.h | 107 +++++ - arch/x86/include/asm/mmu.h | 8 + - arch/x86/include/asm/mmu_context.h | 15 + + arch/x86/include/asm/mmu.h | 6 + + arch/x86/include/asm/mmu_context.h | 14 + arch/x86/include/asm/msr-index.h | 2 + arch/x86/include/asm/paravirt.h | 5 - arch/x86/include/asm/paravirt_types.h | 2 - - arch/x86/include/asm/tlbflush.h | 101 ++++- + arch/x86/include/asm/tlbflush.h | 100 ++++- arch/x86/kernel/alternative.c | 10 +- arch/x86/kernel/cpu/amd.c | 12 + arch/x86/kernel/kvm.c | 1 - arch/x86/kernel/paravirt.c | 6 - arch/x86/mm/pgtable.c | 16 +- - arch/x86/mm/tlb.c | 553 +++++++++++++++++++++-- + arch/x86/mm/tlb.c | 518 +++++++++++++++++++++-- arch/x86/xen/mmu_pv.c | 1 - include/linux/mm_types.h | 1 + mm/memory.c | 1 - @@ -1067,11 +915,11 @@ Signed-off-by: Peter Jung mm/swap_state.c | 1 - mm/vma.c | 2 - tools/arch/x86/include/asm/msr-index.h | 2 + - 25 files changed, 768 insertions(+), 97 deletions(-) + 25 files changed, 732 insertions(+), 94 deletions(-) create mode 100644 arch/x86/include/asm/invlpgb.h diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig -index ef6cfea9df73..1f824dcab4dc 100644 +index c2fb8fe86a45..2a4653d19299 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -273,7 +273,7 @@ config X86 @@ -1268,19 +1116,10 @@ index 000000000000..220aba708b72 + +#endif /* _ASM_X86_INVLPGB */ diff --git a/arch/x86/include/asm/mmu.h b/arch/x86/include/asm/mmu.h -index ce4677b8b735..d71cd599fec4 100644 +index 3b496cdcb74b..d71cd599fec4 100644 --- a/arch/x86/include/asm/mmu.h +++ b/arch/x86/include/asm/mmu.h -@@ -37,6 +37,8 @@ typedef struct { - */ - atomic64_t tlb_gen; - -+ unsigned long next_trim_cpumask; -+ - #ifdef CONFIG_MODIFY_LDT_SYSCALL - struct rw_semaphore ldt_usr_sem; - struct ldt_struct *ldt; -@@ -67,6 +69,12 @@ typedef struct { +@@ -69,6 +69,12 @@ typedef struct { u16 pkey_allocation_map; s16 execute_only_pkey; #endif @@ -1294,7 +1133,7 @@ index ce4677b8b735..d71cd599fec4 100644 #define INIT_MM_CONTEXT(mm) \ diff --git a/arch/x86/include/asm/mmu_context.h b/arch/x86/include/asm/mmu_context.h -index 2886cb668d7f..d670699d32c2 100644 +index 795fdd53bd0a..d670699d32c2 100644 --- a/arch/x86/include/asm/mmu_context.h +++ b/arch/x86/include/asm/mmu_context.h @@ -139,6 +139,8 @@ static inline void mm_reset_untag_mask(struct mm_struct *mm) @@ -1306,15 +1145,7 @@ index 2886cb668d7f..d670699d32c2 100644 /* * Init a new mm. Used on mm copies, like at fork() * and on mm's that are brand-new, like at execve(). -@@ -151,6 +153,7 @@ static inline int init_new_context(struct task_struct *tsk, - - mm->context.ctx_id = atomic64_inc_return(&last_mm_ctx_id); - atomic64_set(&mm->context.tlb_gen, 0); -+ mm->context.next_trim_cpumask = jiffies + HZ; - - #ifdef CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS - if (cpu_feature_enabled(X86_FEATURE_OSPKE)) { -@@ -160,6 +163,14 @@ static inline int init_new_context(struct task_struct *tsk, +@@ -161,6 +163,14 @@ static inline int init_new_context(struct task_struct *tsk, mm->context.execute_only_pkey = -1; } #endif @@ -1329,7 +1160,7 @@ index 2886cb668d7f..d670699d32c2 100644 mm_reset_untag_mask(mm); init_new_context_ldt(mm); return 0; -@@ -169,6 +180,10 @@ static inline int init_new_context(struct task_struct *tsk, +@@ -170,6 +180,10 @@ static inline int init_new_context(struct task_struct *tsk, static inline void destroy_context(struct mm_struct *mm) { destroy_context_ldt(mm); @@ -1341,7 +1172,7 @@ index 2886cb668d7f..d670699d32c2 100644 extern void switch_mm(struct mm_struct *prev, struct mm_struct *next, diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h -index 3ae84c3b8e6d..dc1c1057f26e 100644 +index 61e991507353..6844ebeed377 100644 --- a/arch/x86/include/asm/msr-index.h +++ b/arch/x86/include/asm/msr-index.h @@ -25,6 +25,7 @@ @@ -1390,7 +1221,7 @@ index 8d4fbe1be489..13405959e4db 100644 void (*exit_mmap)(struct mm_struct *mm); void (*notify_page_enc_status_changed)(unsigned long pfn, int npages, bool enc); diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h -index 69e79fff41b8..89dddbcd1322 100644 +index 02fc2aa06e9e..89dddbcd1322 100644 --- a/arch/x86/include/asm/tlbflush.h +++ b/arch/x86/include/asm/tlbflush.h @@ -6,10 +6,12 @@ @@ -1430,15 +1261,7 @@ index 69e79fff41b8..89dddbcd1322 100644 extern void initialize_tlbstate_and_flush(void); /* -@@ -222,6 +234,7 @@ struct flush_tlb_info { - unsigned int initiating_cpu; - u8 stride_shift; - u8 freed_tables; -+ u8 trim_cpumask; - }; - - void flush_tlb_local(void); -@@ -230,6 +243,82 @@ void flush_tlb_one_kernel(unsigned long addr); +@@ -231,6 +243,82 @@ void flush_tlb_one_kernel(unsigned long addr); void flush_tlb_multi(const struct cpumask *cpumask, const struct flush_tlb_info *info); @@ -1521,7 +1344,7 @@ index 69e79fff41b8..89dddbcd1322 100644 #ifdef CONFIG_PARAVIRT #include #endif -@@ -277,21 +366,15 @@ static inline u64 inc_mm_tlb_gen(struct mm_struct *mm) +@@ -278,21 +366,15 @@ static inline u64 inc_mm_tlb_gen(struct mm_struct *mm) return atomic64_inc_return(&mm->context.tlb_gen); } @@ -1707,7 +1530,7 @@ index 5745a354a241..3dc4af1f7868 100644 #endif /* CONFIG_PGTABLE_LEVELS > 4 */ #endif /* CONFIG_PGTABLE_LEVELS > 3 */ diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c -index a2becb85bea7..482b7def3677 100644 +index 90a9e4740913..482b7def3677 100644 --- a/arch/x86/mm/tlb.c +++ b/arch/x86/mm/tlb.c @@ -74,13 +74,15 @@ @@ -2202,46 +2025,7 @@ index a2becb85bea7..482b7def3677 100644 if (unlikely(f->new_tlb_gen != TLB_GENERATION_INVALID && f->new_tlb_gen <= local_tlb_gen)) { /* -@@ -893,9 +1243,36 @@ static void flush_tlb_func(void *info) - nr_invalidate); - } - --static bool tlb_is_not_lazy(int cpu, void *data) -+static bool should_flush_tlb(int cpu, void *data) -+{ -+ struct flush_tlb_info *info = data; -+ -+ /* Lazy TLB will get flushed at the next context switch. */ -+ if (per_cpu(cpu_tlbstate_shared.is_lazy, cpu)) -+ return false; -+ -+ /* No mm means kernel memory flush. */ -+ if (!info->mm) -+ return true; -+ -+ /* The target mm is loaded, and the CPU is not lazy. */ -+ if (per_cpu(cpu_tlbstate.loaded_mm, cpu) == info->mm) -+ return true; -+ -+ /* In cpumask, but not the loaded mm? Periodically remove by flushing. */ -+ if (info->trim_cpumask) -+ return true; -+ -+ return false; -+} -+ -+static bool should_trim_cpumask(struct mm_struct *mm) - { -- return !per_cpu(cpu_tlbstate_shared.is_lazy, cpu); -+ if (time_after(jiffies, READ_ONCE(mm->context.next_trim_cpumask))) { -+ WRITE_ONCE(mm->context.next_trim_cpumask, jiffies + HZ); -+ return true; -+ } -+ return false; - } - - DEFINE_PER_CPU_SHARED_ALIGNED(struct tlb_state_shared, cpu_tlbstate_shared); -@@ -926,10 +1303,10 @@ STATIC_NOPV void native_flush_tlb_multi(const struct cpumask *cpumask, +@@ -953,7 +1303,7 @@ STATIC_NOPV void native_flush_tlb_multi(const struct cpumask *cpumask, * up on the new contents of what used to be page tables, while * doing a speculative memory access. */ @@ -2249,17 +2033,11 @@ index a2becb85bea7..482b7def3677 100644 + if (info->freed_tables || in_asid_transition(info->mm)) on_each_cpu_mask(cpumask, flush_tlb_func, (void *)info, true); else -- on_each_cpu_cond_mask(tlb_is_not_lazy, flush_tlb_func, -+ on_each_cpu_cond_mask(should_flush_tlb, flush_tlb_func, - (void *)info, 1, cpumask); - } - -@@ -980,6 +1357,16 @@ static struct flush_tlb_info *get_flush_tlb_info(struct mm_struct *mm, - info->freed_tables = freed_tables; - info->new_tlb_gen = new_tlb_gen; + on_each_cpu_cond_mask(should_flush_tlb, flush_tlb_func, +@@ -1009,6 +1359,15 @@ static struct flush_tlb_info *get_flush_tlb_info(struct mm_struct *mm, info->initiating_cpu = smp_processor_id(); -+ info->trim_cpumask = 0; -+ + info->trim_cpumask = 0; + + /* + * If the number of flushes is so large that a full flush + * would be faster, do a full flush. @@ -2268,10 +2046,11 @@ index a2becb85bea7..482b7def3677 100644 + info->start = 0; + info->end = TLB_FLUSH_ALL; + } - ++ return info; } -@@ -998,17 +1385,8 @@ void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start, + +@@ -1026,17 +1385,8 @@ void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start, bool freed_tables) { struct flush_tlb_info *info; @@ -2290,7 +2069,7 @@ index a2becb85bea7..482b7def3677 100644 /* This is also a barrier that synchronizes with switch_mm(). */ new_tlb_gen = inc_mm_tlb_gen(mm); -@@ -1021,8 +1399,12 @@ void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start, +@@ -1049,9 +1399,12 @@ void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start, * a local TLB flush is needed. Optimize this use-case by calling * flush_tlb_func_local() directly in this case. */ @@ -2298,13 +2077,13 @@ index a2becb85bea7..482b7def3677 100644 + if (mm_global_asid(mm)) { + broadcast_tlb_flush(info); + } else if (cpumask_any_but(mm_cpumask(mm), cpu) < nr_cpu_ids) { -+ info->trim_cpumask = should_trim_cpumask(mm); + info->trim_cpumask = should_trim_cpumask(mm); flush_tlb_multi(mm_cpumask(mm), info); + consider_global_asid(mm); } else if (mm == this_cpu_read(cpu_tlbstate.loaded_mm)) { lockdep_assert_irqs_enabled(); local_irq_disable(); -@@ -1036,6 +1418,16 @@ void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start, +@@ -1065,6 +1418,16 @@ void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start, } @@ -2321,7 +2100,7 @@ index a2becb85bea7..482b7def3677 100644 static void do_flush_tlb_all(void *info) { count_vm_tlb_event(NR_TLB_REMOTE_FLUSH_RECEIVED); -@@ -1044,10 +1436,34 @@ static void do_flush_tlb_all(void *info) +@@ -1073,10 +1436,34 @@ static void do_flush_tlb_all(void *info) void flush_tlb_all(void) { @@ -2356,7 +2135,7 @@ index a2becb85bea7..482b7def3677 100644 static void do_kernel_range_flush(void *info) { struct flush_tlb_info *f = info; -@@ -1060,22 +1476,21 @@ static void do_kernel_range_flush(void *info) +@@ -1089,22 +1476,21 @@ static void do_kernel_range_flush(void *info) void flush_tlb_kernel_range(unsigned long start, unsigned long end) { @@ -2367,15 +2146,15 @@ index a2becb85bea7..482b7def3677 100644 - } else { - struct flush_tlb_info *info; + struct flush_tlb_info *info; ++ ++ guard(preempt)(); - preempt_disable(); - info = get_flush_tlb_info(NULL, start, end, 0, false, - TLB_GENERATION_INVALID); -+ guard(preempt)(); - + info = get_flush_tlb_info(NULL, start, end, PAGE_SHIFT, false, + TLB_GENERATION_INVALID); -+ + + if (broadcast_kernel_range_flush(info)) + ; /* Fall through. */ + else if (info->end == TLB_FLUSH_ALL) @@ -2390,7 +2169,7 @@ index a2becb85bea7..482b7def3677 100644 } /* -@@ -1263,12 +1678,52 @@ void arch_tlbbatch_flush(struct arch_tlbflush_unmap_batch *batch) +@@ -1292,12 +1678,52 @@ void arch_tlbbatch_flush(struct arch_tlbflush_unmap_batch *batch) local_irq_enable(); } @@ -2444,10 +2223,10 @@ index a2becb85bea7..482b7def3677 100644 * Blindly accessing user memory from NMI context can be dangerous * if we're in the middle of switching the current user task or diff --git a/arch/x86/xen/mmu_pv.c b/arch/x86/xen/mmu_pv.c -index 55a4996d0c04..041e17282af0 100644 +index d078de2c952b..38971c6dcd4b 100644 --- a/arch/x86/xen/mmu_pv.c +++ b/arch/x86/xen/mmu_pv.c -@@ -2137,7 +2137,6 @@ static const typeof(pv_ops) xen_mmu_ops __initconst = { +@@ -2189,7 +2189,6 @@ static const typeof(pv_ops) xen_mmu_ops __initconst = { .flush_tlb_kernel = xen_flush_tlb, .flush_tlb_one_user = xen_flush_tlb_one_user, .flush_tlb_multi = xen_flush_tlb_multi, @@ -2554,9 +2333,9 @@ index 3ae84c3b8e6d..dc1c1057f26e 100644 -- 2.48.0.rc1 -From 479754290512670400557c6fb91a252676261db8 Mon Sep 17 00:00:00 2001 +From 29126d387284698bd160aeea6086ed8bafc53134 Mon Sep 17 00:00:00 2001 From: Peter Jung -Date: Mon, 17 Feb 2025 16:30:31 +0100 +Date: Fri, 21 Feb 2025 14:39:56 +0100 Subject: [PATCH 03/12] bbr3 Signed-off-by: Peter Jung @@ -5940,9 +5719,9 @@ index b412ed88ccd9..d70f8b742b21 100644 -- 2.48.0.rc1 -From dbc43ac67696e3fbebdc6930aa7f057b255c2d6c Mon Sep 17 00:00:00 2001 +From a0e342962d38af24849200d7089cbd54d6576fe8 Mon Sep 17 00:00:00 2001 From: Peter Jung -Date: Mon, 17 Feb 2025 16:30:44 +0100 +Date: Fri, 21 Feb 2025 14:40:07 +0100 Subject: [PATCH 04/12] cachy Signed-off-by: Peter Jung @@ -6156,7 +5935,7 @@ index f48eaa98d22d..fc777c14cff6 100644 unprivileged_userfaultfd ======================== diff --git a/Makefile b/Makefile -index 423d087afad2..4af7030f914e 100644 +index c436a6e64971..c6bd6363ed96 100644 --- a/Makefile +++ b/Makefile @@ -860,11 +860,19 @@ KBUILD_CFLAGS += -fno-delete-null-pointer-checks @@ -7603,10 +7382,10 @@ index e8ae7681bf0a..8a0d873983f3 100644 } diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c -index 21bd635bcdfc..6f4032038fc7 100644 +index c0b98749dde7..3aff1eea82ff 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c +++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c -@@ -2809,7 +2809,10 @@ int smu_get_power_limit(void *handle, +@@ -2810,7 +2810,10 @@ int smu_get_power_limit(void *handle, *limit = smu->max_power_limit; break; case SMU_PPT_LIMIT_MIN: @@ -7618,7 +7397,7 @@ index 21bd635bcdfc..6f4032038fc7 100644 break; default: return -EINVAL; -@@ -2833,7 +2836,14 @@ static int smu_set_power_limit(void *handle, uint32_t limit) +@@ -2834,7 +2837,14 @@ static int smu_set_power_limit(void *handle, uint32_t limit) if (smu->ppt_funcs->set_power_limit) return smu->ppt_funcs->set_power_limit(smu, limit_type, limit); @@ -11971,7 +11750,7 @@ index 000000000000..e105e6f5cc91 +MODULE_AUTHOR("Daniel Drake "); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c -index 76f4df75b08a..49c1a91c611d 100644 +index 0a1f668999ce..d4163fa9c27a 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -3746,6 +3746,106 @@ static void quirk_no_bus_reset(struct pci_dev *dev) @@ -13552,7 +13331,7 @@ index 7d0a05660e5e..3a3116dca89c 100644 #ifdef CONFIG_NUMA_BALANCING /* Restrict the NUMA promotion throughput (MB/s) for each target node. */ diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h -index c5d67a43fe52..da653eba7884 100644 +index 66744d60904d..4b3fffa1d5f5 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -2820,7 +2820,7 @@ extern void deactivate_task(struct rq *rq, struct task_struct *p, int flags); @@ -14133,9 +13912,9 @@ index 6872b5aff73e..1910fe1b2471 100644 -- 2.48.0.rc1 -From 65f50bcb3c1ee4ac40786548409e07869bdaece7 Mon Sep 17 00:00:00 2001 +From c92d718c7ad95a5eae66eb820b6d7879fa127443 Mon Sep 17 00:00:00 2001 From: Peter Jung -Date: Mon, 17 Feb 2025 16:32:16 +0100 +Date: Fri, 21 Feb 2025 14:40:38 +0100 Subject: [PATCH 05/12] crypto Signed-off-by: Peter Jung @@ -14907,9 +14686,9 @@ index fbf43482e1f5..11e95fc62636 100644 -- 2.48.0.rc1 -From 5a1609eb06ee64b2b55edacaf5e79b521a46bbb3 Mon Sep 17 00:00:00 2001 +From 3cb3e2023181b4be0e5a454b75e86ecddca9646a Mon Sep 17 00:00:00 2001 From: Peter Jung -Date: Mon, 17 Feb 2025 16:32:27 +0100 +Date: Fri, 21 Feb 2025 14:41:10 +0100 Subject: [PATCH 06/12] fixes Signed-off-by: Peter Jung @@ -15167,10 +14946,10 @@ index b027a4030976..5cc750200f19 100644 return ret; diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c -index 76030e54a3f5..83cae9398987 100644 +index c1dec2453af4..1a2553498f89 100644 --- a/kernel/sched/ext.c +++ b/kernel/sched/ext.c -@@ -5264,9 +5264,10 @@ static void scx_dump_task(struct seq_buf *s, struct scx_dump_ctx *dctx, +@@ -5279,9 +5279,10 @@ static void scx_dump_task(struct seq_buf *s, struct scx_dump_ctx *dctx, scx_get_task_state(p), p->scx.flags & ~SCX_TASK_STATE_MASK, p->scx.dsq_flags, ops_state & SCX_OPSS_STATE_MASK, ops_state >> SCX_OPSS_QSEQ_SHIFT); @@ -15203,9 +14982,9 @@ index dca706617adc..89d3aef160b7 100644 -- 2.48.0.rc1 -From c683c53853220a36525db834e14be617dda17d0a Mon Sep 17 00:00:00 2001 +From 3ff29239964e763e644499525f6abb1e6b5de3cb Mon Sep 17 00:00:00 2001 From: Peter Jung -Date: Mon, 17 Feb 2025 16:32:45 +0100 +Date: Fri, 21 Feb 2025 14:41:23 +0100 Subject: [PATCH 07/12] itmt-core-ranking Signed-off-by: Peter Jung @@ -15521,7 +15300,7 @@ index 3a3116dca89c..a27896a05103 100644 case group_misfit_task: /* diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h -index da653eba7884..dee2797009e3 100644 +index 4b3fffa1d5f5..fa4c60eb4043 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -2056,7 +2056,6 @@ struct sched_group { @@ -15568,9 +15347,9 @@ index 9748a4c8d668..59b8157cb114 100644 -- 2.48.0.rc1 -From 98dab1891e0b8e8cae7ae4fbddaf87b94040c2a9 Mon Sep 17 00:00:00 2001 +From b822a217d4e67f24160f4a0602b9d5bb66c1d5a8 Mon Sep 17 00:00:00 2001 From: Peter Jung -Date: Mon, 17 Feb 2025 16:32:59 +0100 +Date: Fri, 21 Feb 2025 14:42:10 +0100 Subject: [PATCH 08/12] ntsync Signed-off-by: Peter Jung @@ -18618,9 +18397,9 @@ index 000000000000..3aad311574c4 -- 2.48.0.rc1 -From e959305333470311ce6636ab70e094197ce99351 Mon Sep 17 00:00:00 2001 +From 975a79a5278fd9b12781af42cab0ca820ee4598c Mon Sep 17 00:00:00 2001 From: Peter Jung -Date: Mon, 17 Feb 2025 16:33:10 +0100 +Date: Fri, 21 Feb 2025 14:42:22 +0100 Subject: [PATCH 09/12] perf-per-core Signed-off-by: Peter Jung @@ -19516,9 +19295,9 @@ index 8277c64f88db..b5a5e1411469 100644 -- 2.48.0.rc1 -From cbe148fadf7905c3c9d85f4792427a5286b3d548 Mon Sep 17 00:00:00 2001 +From 73a7a93279dfd9eca8703374f7e45340f2cd9f5b Mon Sep 17 00:00:00 2001 From: Peter Jung -Date: Mon, 17 Feb 2025 16:33:25 +0100 +Date: Fri, 21 Feb 2025 14:42:40 +0100 Subject: [PATCH 10/12] pksm Signed-off-by: Peter Jung @@ -19949,9 +19728,9 @@ index e9115b4d8b63..2afc778f2d17 100644 -- 2.48.0.rc1 -From ee21e489dd618c304f7f31415e389ba57ee5548e Mon Sep 17 00:00:00 2001 +From edfb199a3ed4ad6d5524c21801f40a406c3c85df Mon Sep 17 00:00:00 2001 From: Peter Jung -Date: Mon, 17 Feb 2025 16:33:34 +0100 +Date: Fri, 21 Feb 2025 14:43:09 +0100 Subject: [PATCH 11/12] t2 Signed-off-by: Peter Jung @@ -19978,7 +19757,6 @@ Signed-off-by: Peter Jung drivers/hid/hid-quirks.c | 8 +- drivers/hwmon/applesmc.c | 1138 ++++++++++++----- drivers/input/mouse/bcm5974.c | 138 ++ - .../broadcom/brcm80211/brcmfmac/pcie.c | 4 +- drivers/pci/vgaarb.c | 1 + drivers/platform/x86/apple-gmux.c | 18 + drivers/staging/Kconfig | 2 + @@ -20013,7 +19791,7 @@ Signed-off-by: Peter Jung lib/test_printf.c | 20 +- lib/vsprintf.c | 36 +- scripts/checkpatch.pl | 2 +- - 57 files changed, 8350 insertions(+), 338 deletions(-) + 56 files changed, 8348 insertions(+), 336 deletions(-) create mode 100644 Documentation/ABI/testing/sysfs-driver-hid-appletb-kbd create mode 100644 drivers/gpu/drm/tiny/appletbdrm.c create mode 100644 drivers/hid/hid-appletb-bl.c @@ -21900,7 +21678,7 @@ index 000000000000..fa28a691da6a +MODULE_DESCRIPTION("MacBookPro Touch Bar Keyboard Mode Driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c -index 82900857bfd8..c16edd3f4a37 100644 +index e50887a6d22c..c436340331b4 100644 --- a/drivers/hid/hid-multitouch.c +++ b/drivers/hid/hid-multitouch.c @@ -73,6 +73,7 @@ MODULE_LICENSE("GPL"); @@ -22034,7 +21812,7 @@ index 82900857bfd8..c16edd3f4a37 100644 if (cls->is_indirect) app->mt_flags |= INPUT_MT_POINTER; -@@ -1769,6 +1791,15 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id) +@@ -1772,6 +1794,15 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id) } } @@ -22050,7 +21828,7 @@ index 82900857bfd8..c16edd3f4a37 100644 td = devm_kzalloc(&hdev->dev, sizeof(struct mt_device), GFP_KERNEL); if (!td) { dev_err(&hdev->dev, "cannot allocate multitouch data\n"); -@@ -1816,10 +1847,6 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id) +@@ -1819,10 +1850,6 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id) timer_setup(&td->release_timer, mt_expired_timeout, 0); @@ -22061,7 +21839,7 @@ index 82900857bfd8..c16edd3f4a37 100644 if (mtclass->quirks & MT_QUIRK_FIX_CONST_CONTACT_ID) mt_fix_const_fields(hdev, HID_DG_CONTACTID); -@@ -2301,6 +2328,11 @@ static const struct hid_device_id mt_devices[] = { +@@ -2304,6 +2331,11 @@ static const struct hid_device_id mt_devices[] = { MT_USB_DEVICE(USB_VENDOR_ID_XIROKU, USB_DEVICE_ID_XIROKU_CSR2) }, @@ -24248,28 +24026,6 @@ index dfdfb59cc8b5..e0da70576167 100644 {} }; -diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c -index e4395b1f8c11..d2caa80e9412 100644 ---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c -@@ -2712,7 +2712,7 @@ static const struct pci_device_id brcmf_pcie_devid_table[] = { - BRCMF_PCIE_DEVICE(BRCM_PCIE_4350_DEVICE_ID, WCC), - BRCMF_PCIE_DEVICE_SUB(0x4355, BRCM_PCIE_VENDOR_ID_BROADCOM, 0x4355, WCC), - BRCMF_PCIE_DEVICE(BRCM_PCIE_4354_RAW_DEVICE_ID, WCC), -- BRCMF_PCIE_DEVICE(BRCM_PCIE_4355_DEVICE_ID, WCC), -+ BRCMF_PCIE_DEVICE(BRCM_PCIE_4355_DEVICE_ID, WCC_SEED), - BRCMF_PCIE_DEVICE(BRCM_PCIE_4356_DEVICE_ID, WCC), - BRCMF_PCIE_DEVICE(BRCM_PCIE_43567_DEVICE_ID, WCC), - BRCMF_PCIE_DEVICE(BRCM_PCIE_43570_DEVICE_ID, WCC), -@@ -2723,7 +2723,7 @@ static const struct pci_device_id brcmf_pcie_devid_table[] = { - BRCMF_PCIE_DEVICE(BRCM_PCIE_43602_2G_DEVICE_ID, WCC), - BRCMF_PCIE_DEVICE(BRCM_PCIE_43602_5G_DEVICE_ID, WCC), - BRCMF_PCIE_DEVICE(BRCM_PCIE_43602_RAW_DEVICE_ID, WCC), -- BRCMF_PCIE_DEVICE(BRCM_PCIE_4364_DEVICE_ID, WCC), -+ BRCMF_PCIE_DEVICE(BRCM_PCIE_4364_DEVICE_ID, WCC_SEED), - BRCMF_PCIE_DEVICE(BRCM_PCIE_4365_DEVICE_ID, BCA), - BRCMF_PCIE_DEVICE(BRCM_PCIE_4365_2G_DEVICE_ID, BCA), - BRCMF_PCIE_DEVICE(BRCM_PCIE_4365_5G_DEVICE_ID, BCA), diff --git a/drivers/pci/vgaarb.c b/drivers/pci/vgaarb.c index 78748e8d2dba..2b2b558cebe6 100644 --- a/drivers/pci/vgaarb.c @@ -30299,9 +30055,9 @@ index 9eed3683ad76..7ddbf75f4c26 100755 -- 2.48.0.rc1 -From 3cff5b38b4b38bf4e6c96b0d7c0a9950c42f5673 Mon Sep 17 00:00:00 2001 +From 047728cdbfdbf23f914674f8fb9cbae2bce866e0 Mon Sep 17 00:00:00 2001 From: Peter Jung -Date: Mon, 17 Feb 2025 16:33:45 +0100 +Date: Fri, 21 Feb 2025 14:43:30 +0100 Subject: [PATCH 12/12] zstd Signed-off-by: Peter Jung