Linux 5.15.130
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.130 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/admin-guide/kernel-parameters.txt | 4 -- Makefile | 2 - arch/arm/kernel/module-plts.c | 2 - arch/arm64/kernel/module-plts.c | 3 +- drivers/acpi/thermal.c | 6 ---- include/linux/moduleloader.h | 5 +++ kernel/module.c | 2 - kernel/rcu/tasks.h | 36 +++++++++++++++++------- kernel/rcu/tree_exp.h | 5 ++- 9 files changed, 41 insertions(+), 24 deletions(-)
Arnd Bergmann (1):
arm64: module-plts: inline linux/moduleloader.h
Greg Kroah-Hartman (1):
Linux 5.15.130
James Morse (3):
module: Expose module_init_layout_section()
arm64: module: Use module_init_layout_section() to spot init sections
ARM: module: Use module_init_layout_section() to spot init sections
Mario Limonciello (1):
ACPI: thermal: Drop nocrt parameter
Neeraj Upadhyay (1):
rcu-tasks: Fix IPI failure handling in trc_wait_for_one_reader
Paul E. McKenney (3):
rcu: Prevent expedited GP from enabling tick on offline CPU
rcu-tasks: Wait for trc_read_check_handler() IPIs
rcu-tasks: Add trc_inspect_reader() checks for exiting critical section
Greg Kroah-Hartman
maintainerDocumentation/admin-guide/kernel-parameters.txt +0 -4
@@ -5770,10 +5770,6 @@ -1: disable all critical trip points in all thermal zones <degrees C>: override all critical trip points - thermal.nocrt= [HW,ACPI] - Set to disable actions on ACPI thermal zone - critical and hot trip points. - thermal.off= [HW,ACPI] 1: disable ACPI thermal control
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 129 +SUBLEVEL = 130 EXTRAVERSION = NAME = Trick or Treat
arch/arm/kernel/module-plts.c +1 -1
@@ -256,7 +256,7 @@ int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr *sechdrs,/* sort by type and symbol index */ sort (rels, numrels,sizeof (Elf32_Rel), cmp_rel,NULL ); -if (strncmp (secstrings + dstsec->sh_name,".init" ,5 ) !=0 ) +if (!module_init_layout_section (secstrings + dstsec->sh_name)) core_plts +=count_plts (syms, dstsec->sh_addr, rels, numrels, s->sh_info);else
arch/arm64/kernel/module-plts.c +2 -1
@@ -7,6 +7,7 @@#include <linux/ftrace.h> #include <linux/kernel.h> #include <linux/module.h> +#include <linux/moduleloader.h> #include <linux/sort.h> static struct plt_entry __get_adrp_add_pair(u64 dst, u64 pc,
@@ -342,7 +343,7 @@ int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr *sechdrs,if (nents)sort (rels, nents,sizeof (Elf64_Rela), cmp_rela,NULL ); -if (!str_has_prefix (secstrings + dstsec->sh_name,".init" )) +if (!module_init_layout_section (secstrings + dstsec->sh_name)) core_plts +=count_plts (syms, rels, numrels, sechdrs[i].sh_info, dstsec);else
drivers/acpi/thermal.c +1 -5
@@ -59,10 +59,6 @@ static int tzp;module_param (tzp, int,0444 );MODULE_PARM_DESC (tzp,"Thermal zone polling frequency, in 1/10 seconds." ); -static int nocrt; -module_param (nocrt, int,0 ); -MODULE_PARM_DESC (nocrt,"Set to take no action upon ACPI thermal zone critical trips points." ); -static int off;module_param (off, int,0 );MODULE_PARM_DESC (off,"Set to disable ACPI thermal support." );
@@ -1132,7 +1128,7 @@ static int thermal_nocrt(const struct dmi_system_id *d) {pr_notice ("%s detected: disabling all critical thermal trip point actions.\n" , d->ident); - nocrt =1 ; + crt =-1 ;return 0 ; }static int thermal_tzp (const struct dmi_system_id *d) {
include/linux/moduleloader.h +5 -0
@@ -39,6 +39,11 @@ bool module_init_section(const char *name);*/ bool module_exit_section (const char *name); +/* Describes whether within_module_init() will consider this an init section +* or not. This behaviour changes with CONFIG_MODULE_UNLOAD. +*/ +bool module_init_layout_section (const char *sname); +/* * Apply the given relocation to the (simplified) ELF. Return -error * or 0.
kernel/module.c +1 -1
@@ -2407,7 +2407,7 @@ static long get_offset(struct module *mod, unsigned int *size,return ret; } -static bool module_init_layout_section (const char *sname) +bool module_init_layout_section (const char *sname) {#ifndef CONFIG_MODULE_UNLOAD if (module_exit_section (sname))
kernel/rcu/tasks.h +26 -10
@@ -951,7 +951,7 @@ static void trc_read_check_handler(void *t_in)static bool trc_inspect_reader (struct task_struct *t,void *arg) {int cpu =task_cpu (t); -bool in_qs = false; +int nesting;bool ofl =cpu_is_offline (cpu);if (task_curr (t)) {
@@ -971,18 +971,18 @@ static bool trc_inspect_reader(struct task_struct *t, void *arg) n_heavy_reader_updates++;if (ofl) n_heavy_reader_ofl_updates++; - in_qs = true; + nesting =0 ; }else {// The task is not running, so C-language access is safe. - in_qs =likely (!t->trc_reader_nesting); + nesting = t->trc_reader_nesting; } -// Mark as checked so that the grace-period kthread will -// remove it from the holdout list. - t->trc_reader_checked = true; - -if (in_qs) -return true;// Already in quiescent state, done!!! +// If not exiting a read-side critical section, mark as checked +// so that the grace-period kthread will remove it from the +// holdout list. + t->trc_reader_checked = nesting >=0 ; +if (nesting <=0 ) +return !nesting;// If in QS, done, otherwise try again later. // The task is in a read-side critical section, so set up its // state so that it will awaken the grace-period kthread upon exit
@@ -1041,9 +1041,11 @@ static void trc_wait_for_one_reader(struct task_struct *t,if (smp_call_function_single (cpu, trc_read_check_handler, t,0 )) {// Just in case there is some other reason for // failure than the target CPU being offline. +WARN_ONCE (1 ,"%s(): smp_call_function_single() failed for CPU: %d\n" , + __func__, cpu); rcu_tasks_trace.n_ipis_fails++;per_cpu (trc_ipi_to_cpu, cpu) = false; - t->trc_ipi_to_cpu = cpu; + t->trc_ipi_to_cpu =-1 ; } } }
@@ -1164,14 +1166,28 @@ static void check_all_holdout_tasks_trace(struct list_head *hop, } } +static void rcu_tasks_trace_empty_fn (void *unused) +{ +} +/* Wait for grace period to complete and provide ordering. */ static void rcu_tasks_trace_postgp (struct rcu_tasks *rtp) { +int cpu;bool firstreport;struct task_struct *g, *t;LIST_HEAD (holdouts);long ret; +// Wait for any lingering IPI handlers to complete. Note that +// if a CPU has gone offline or transitioned to userspace in the +// meantime, all IPI handlers should have been drained beforehand. +// Yes, this assumes that CPUs process IPIs in order. If that ever +// changes, there will need to be a recheck and/or timed wait. +for_each_online_cpu (cpu) +if (smp_load_acquire (per_cpu_ptr (&trc_ipi_to_cpu, cpu))) +smp_call_function_single (cpu, rcu_tasks_trace_empty_fn,NULL ,1 ); +// Remove the safety count. smp_mb__before_atomic ();// Order vs. earlier atomics atomic_dec (&trc_n_readers_need_end);
kernel/rcu/tree_exp.h +4 -1
@@ -507,7 +507,10 @@ static void synchronize_rcu_expedited_wait(void)if (rdp->rcu_forced_tick_exp)continue ; rdp->rcu_forced_tick_exp = true; -tick_dep_set_cpu (cpu,TICK_DEP_BIT_RCU_EXP ); +preempt_disable (); +if (cpu_online (cpu)) +tick_dep_set_cpu (cpu,TICK_DEP_BIT_RCU_EXP ); +preempt_enable (); } } j =READ_ONCE (jiffies_till_first_fqs);