Merge commit '8700c95adb03' into timers/nohz
The full dynticks tree needs the latest RCU and sched upstream updates in order to fix some dependencies. Merge a common upstream merge point that has these updates. Conflicts: include/linux/perf_event.h kernel/rcutree.h kernel/rcutree_plugin.h Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
This commit is contained in:
+57
-18
@@ -28,10 +28,6 @@ config BUILDTIME_EXTABLE_SORT
|
||||
|
||||
menu "General setup"
|
||||
|
||||
config EXPERIMENTAL
|
||||
bool
|
||||
default y
|
||||
|
||||
config BROKEN
|
||||
bool
|
||||
|
||||
@@ -583,13 +579,16 @@ config RCU_FAST_NO_HZ
|
||||
depends on NO_HZ_COMMON && SMP
|
||||
default n
|
||||
help
|
||||
This option causes RCU to attempt to accelerate grace periods in
|
||||
order to allow CPUs to enter dynticks-idle state more quickly.
|
||||
On the other hand, this option increases the overhead of the
|
||||
dynticks-idle checking, thus degrading scheduling latency.
|
||||
This option permits CPUs to enter dynticks-idle state even if
|
||||
they have RCU callbacks queued, and prevents RCU from waking
|
||||
these CPUs up more than roughly once every four jiffies (by
|
||||
default, you can adjust this using the rcutree.rcu_idle_gp_delay
|
||||
parameter), thus improving energy efficiency. On the other
|
||||
hand, this option increases the duration of RCU grace periods,
|
||||
for example, slowing down synchronize_rcu().
|
||||
|
||||
Say Y if energy efficiency is critically important, and you don't
|
||||
care about real-time response.
|
||||
Say Y if energy efficiency is critically important, and you
|
||||
don't care about increased grace-period durations.
|
||||
|
||||
Say N if you are unsure.
|
||||
|
||||
@@ -656,7 +655,7 @@ config RCU_BOOST_DELAY
|
||||
Accept the default if unsure.
|
||||
|
||||
config RCU_NOCB_CPU
|
||||
bool "Offload RCU callback processing from boot-selected CPUs"
|
||||
bool "Offload RCU callback processing from boot-selected CPUs (EXPERIMENTAL"
|
||||
depends on TREE_RCU || TREE_PREEMPT_RCU
|
||||
default n
|
||||
help
|
||||
@@ -667,16 +666,56 @@ config RCU_NOCB_CPU
|
||||
|
||||
This option offloads callback invocation from the set of
|
||||
CPUs specified at boot time by the rcu_nocbs parameter.
|
||||
For each such CPU, a kthread ("rcuoN") will be created to
|
||||
invoke callbacks, where the "N" is the CPU being offloaded.
|
||||
Nothing prevents this kthread from running on the specified
|
||||
CPUs, but (1) the kthreads may be preempted between each
|
||||
callback, and (2) affinity or cgroups can be used to force
|
||||
the kthreads to run on whatever set of CPUs is desired.
|
||||
For each such CPU, a kthread ("rcuox/N") will be created to
|
||||
invoke callbacks, where the "N" is the CPU being offloaded,
|
||||
and where the "x" is "b" for RCU-bh, "p" for RCU-preempt, and
|
||||
"s" for RCU-sched. Nothing prevents this kthread from running
|
||||
on the specified CPUs, but (1) the kthreads may be preempted
|
||||
between each callback, and (2) affinity or cgroups can be used
|
||||
to force the kthreads to run on whatever set of CPUs is desired.
|
||||
|
||||
Say Y here if you want reduced OS jitter on selected CPUs.
|
||||
Say Y here if you want to help to debug reduced OS jitter.
|
||||
Say N here if you are unsure.
|
||||
|
||||
choice
|
||||
prompt "Build-forced no-CBs CPUs"
|
||||
default RCU_NOCB_CPU_NONE
|
||||
help
|
||||
This option allows no-CBs CPUs to be specified at build time.
|
||||
Additional no-CBs CPUs may be specified by the rcu_nocbs=
|
||||
boot parameter.
|
||||
|
||||
config RCU_NOCB_CPU_NONE
|
||||
bool "No build_forced no-CBs CPUs"
|
||||
depends on RCU_NOCB_CPU
|
||||
help
|
||||
This option does not force any of the CPUs to be no-CBs CPUs.
|
||||
Only CPUs designated by the rcu_nocbs= boot parameter will be
|
||||
no-CBs CPUs.
|
||||
|
||||
config RCU_NOCB_CPU_ZERO
|
||||
bool "CPU 0 is a build_forced no-CBs CPU"
|
||||
depends on RCU_NOCB_CPU
|
||||
help
|
||||
This option forces CPU 0 to be a no-CBs CPU. Additional CPUs
|
||||
may be designated as no-CBs CPUs using the rcu_nocbs= boot
|
||||
parameter will be no-CBs CPUs.
|
||||
|
||||
Select this if CPU 0 needs to be a no-CBs CPU for real-time
|
||||
or energy-efficiency reasons.
|
||||
|
||||
config RCU_NOCB_CPU_ALL
|
||||
bool "All CPUs are build_forced no-CBs CPUs"
|
||||
depends on RCU_NOCB_CPU
|
||||
help
|
||||
This option forces all CPUs to be no-CBs CPUs. The rcu_nocbs=
|
||||
boot parameter will be ignored.
|
||||
|
||||
Select this if all CPUs need to be no-CBs CPUs for real-time
|
||||
or energy-efficiency reasons.
|
||||
|
||||
endchoice
|
||||
|
||||
endmenu # "RCU Subsystem"
|
||||
|
||||
config IKCONFIG
|
||||
|
||||
+19
-27
@@ -9,6 +9,8 @@
|
||||
* Simplified starting of init: Michael A. Griffith <grif@acm.org>
|
||||
*/
|
||||
|
||||
#define DEBUG /* Enable initcall_debug */
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/proc_fs.h>
|
||||
@@ -174,8 +176,8 @@ static int __init obsolete_checksetup(char *line)
|
||||
if (line[n] == '\0' || line[n] == '=')
|
||||
had_early_param = 1;
|
||||
} else if (!p->setup_func) {
|
||||
printk(KERN_WARNING "Parameter %s is obsolete,"
|
||||
" ignored\n", p->str);
|
||||
pr_warn("Parameter %s is obsolete, ignored\n",
|
||||
p->str);
|
||||
return 1;
|
||||
} else if (p->setup_func(line + n))
|
||||
return 1;
|
||||
@@ -384,7 +386,7 @@ static noinline void __init_refok rest_init(void)
|
||||
init_idle_bootup_task(current);
|
||||
schedule_preempt_disabled();
|
||||
/* Call into cpu_idle with preempt disabled */
|
||||
cpu_idle();
|
||||
cpu_startup_entry(CPUHP_ONLINE);
|
||||
}
|
||||
|
||||
/* Check for early params. */
|
||||
@@ -398,8 +400,7 @@ static int __init do_early_param(char *param, char *val, const char *unused)
|
||||
strcmp(p->str, "earlycon") == 0)
|
||||
) {
|
||||
if (p->setup_func(val) != 0)
|
||||
printk(KERN_WARNING
|
||||
"Malformed early option '%s'\n", param);
|
||||
pr_warn("Malformed early option '%s'\n", param);
|
||||
}
|
||||
}
|
||||
/* We accept everything at this stage. */
|
||||
@@ -497,7 +498,7 @@ asmlinkage void __init start_kernel(void)
|
||||
tick_init();
|
||||
boot_cpu_init();
|
||||
page_address_init();
|
||||
printk(KERN_NOTICE "%s", linux_banner);
|
||||
pr_notice("%s", linux_banner);
|
||||
setup_arch(&command_line);
|
||||
mm_init_owner(&init_mm, &init_task);
|
||||
mm_init_cpumask(&init_mm);
|
||||
@@ -509,7 +510,7 @@ asmlinkage void __init start_kernel(void)
|
||||
build_all_zonelists(NULL, NULL);
|
||||
page_alloc_init();
|
||||
|
||||
printk(KERN_NOTICE "Kernel command line: %s\n", boot_command_line);
|
||||
pr_notice("Kernel command line: %s\n", boot_command_line);
|
||||
parse_early_param();
|
||||
parse_args("Booting kernel", static_command_line, __start___param,
|
||||
__stop___param - __start___param,
|
||||
@@ -539,11 +540,8 @@ asmlinkage void __init start_kernel(void)
|
||||
* fragile until we cpu_idle() for the first time.
|
||||
*/
|
||||
preempt_disable();
|
||||
if (!irqs_disabled()) {
|
||||
printk(KERN_WARNING "start_kernel(): bug: interrupts were "
|
||||
"enabled *very* early, fixing it\n");
|
||||
if (WARN(!irqs_disabled(), "Interrupts were enabled *very* early, fixing it\n"))
|
||||
local_irq_disable();
|
||||
}
|
||||
idr_init_cache();
|
||||
perf_event_init();
|
||||
rcu_init();
|
||||
@@ -559,9 +557,7 @@ asmlinkage void __init start_kernel(void)
|
||||
time_init();
|
||||
profile_init();
|
||||
call_function_init();
|
||||
if (!irqs_disabled())
|
||||
printk(KERN_CRIT "start_kernel(): bug: interrupts were "
|
||||
"enabled early\n");
|
||||
WARN(!irqs_disabled(), "Interrupts were enabled early\n");
|
||||
early_boot_irqs_disabled = false;
|
||||
local_irq_enable();
|
||||
|
||||
@@ -588,8 +584,7 @@ asmlinkage void __init start_kernel(void)
|
||||
#ifdef CONFIG_BLK_DEV_INITRD
|
||||
if (initrd_start && !initrd_below_start_ok &&
|
||||
page_to_pfn(virt_to_page((void *)initrd_start)) < min_low_pfn) {
|
||||
printk(KERN_CRIT "initrd overwritten (0x%08lx < 0x%08lx) - "
|
||||
"disabling it.\n",
|
||||
pr_crit("initrd overwritten (0x%08lx < 0x%08lx) - disabling it.\n",
|
||||
page_to_pfn(virt_to_page((void *)initrd_start)),
|
||||
min_low_pfn);
|
||||
initrd_start = 0;
|
||||
@@ -668,14 +663,14 @@ static int __init_or_module do_one_initcall_debug(initcall_t fn)
|
||||
unsigned long long duration;
|
||||
int ret;
|
||||
|
||||
printk(KERN_DEBUG "calling %pF @ %i\n", fn, task_pid_nr(current));
|
||||
pr_debug("calling %pF @ %i\n", fn, task_pid_nr(current));
|
||||
calltime = ktime_get();
|
||||
ret = fn();
|
||||
rettime = ktime_get();
|
||||
delta = ktime_sub(rettime, calltime);
|
||||
duration = (unsigned long long) ktime_to_ns(delta) >> 10;
|
||||
printk(KERN_DEBUG "initcall %pF returned %d after %lld usecs\n", fn,
|
||||
ret, duration);
|
||||
pr_debug("initcall %pF returned %d after %lld usecs\n",
|
||||
fn, ret, duration);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -703,9 +698,7 @@ int __init_or_module do_one_initcall(initcall_t fn)
|
||||
strlcat(msgbuf, "disabled interrupts ", sizeof(msgbuf));
|
||||
local_irq_enable();
|
||||
}
|
||||
if (msgbuf[0]) {
|
||||
printk("initcall %pF returned with %s\n", fn, msgbuf);
|
||||
}
|
||||
WARN(msgbuf[0], "initcall %pF returned with %s\n", fn, msgbuf);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -833,8 +826,7 @@ static int __ref kernel_init(void *unused)
|
||||
if (ramdisk_execute_command) {
|
||||
if (!run_init_process(ramdisk_execute_command))
|
||||
return 0;
|
||||
printk(KERN_WARNING "Failed to execute %s\n",
|
||||
ramdisk_execute_command);
|
||||
pr_err("Failed to execute %s\n", ramdisk_execute_command);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -846,8 +838,8 @@ static int __ref kernel_init(void *unused)
|
||||
if (execute_command) {
|
||||
if (!run_init_process(execute_command))
|
||||
return 0;
|
||||
printk(KERN_WARNING "Failed to execute %s. Attempting "
|
||||
"defaults...\n", execute_command);
|
||||
pr_err("Failed to execute %s. Attempting defaults...\n",
|
||||
execute_command);
|
||||
}
|
||||
if (!run_init_process("/sbin/init") ||
|
||||
!run_init_process("/etc/init") ||
|
||||
@@ -892,7 +884,7 @@ static noinline void __init kernel_init_freeable(void)
|
||||
|
||||
/* Open the /dev/console on the rootfs, this should never fail */
|
||||
if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)
|
||||
printk(KERN_WARNING "Warning: unable to open an initial console.\n");
|
||||
pr_err("Warning: unable to open an initial console.\n");
|
||||
|
||||
(void) sys_dup(0);
|
||||
(void) sys_dup(0);
|
||||
|
||||
Reference in New Issue
Block a user