Merge branch 'core/percpu' into stackprotector
Conflicts: arch/x86/include/asm/pda.h arch/x86/include/asm/system.h Also, moved include/asm-x86/stackprotector.h to arch/x86/include/asm. Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
209
init/Kconfig
209
init/Kconfig
@@ -271,11 +271,75 @@ config LOG_BUF_SHIFT
|
||||
13 => 8 KB
|
||||
12 => 4 KB
|
||||
|
||||
#
|
||||
# Architectures with an unreliable sched_clock() should select this:
|
||||
#
|
||||
config HAVE_UNSTABLE_SCHED_CLOCK
|
||||
bool
|
||||
|
||||
config GROUP_SCHED
|
||||
bool "Group CPU scheduler"
|
||||
depends on EXPERIMENTAL
|
||||
default n
|
||||
help
|
||||
This feature lets CPU scheduler recognize task groups and control CPU
|
||||
bandwidth allocation to such task groups.
|
||||
In order to create a group from arbitrary set of processes, use
|
||||
CONFIG_CGROUPS. (See Control Group support.)
|
||||
|
||||
config FAIR_GROUP_SCHED
|
||||
bool "Group scheduling for SCHED_OTHER"
|
||||
depends on GROUP_SCHED
|
||||
default GROUP_SCHED
|
||||
|
||||
config RT_GROUP_SCHED
|
||||
bool "Group scheduling for SCHED_RR/FIFO"
|
||||
depends on EXPERIMENTAL
|
||||
depends on GROUP_SCHED
|
||||
default n
|
||||
help
|
||||
This feature lets you explicitly allocate real CPU bandwidth
|
||||
to users or control groups (depending on the "Basis for grouping tasks"
|
||||
setting below. If enabled, it will also make it impossible to
|
||||
schedule realtime tasks for non-root users until you allocate
|
||||
realtime bandwidth for them.
|
||||
See Documentation/scheduler/sched-rt-group.txt for more information.
|
||||
|
||||
choice
|
||||
depends on GROUP_SCHED
|
||||
prompt "Basis for grouping tasks"
|
||||
default USER_SCHED
|
||||
|
||||
config USER_SCHED
|
||||
bool "user id"
|
||||
help
|
||||
This option will choose userid as the basis for grouping
|
||||
tasks, thus providing equal CPU bandwidth to each user.
|
||||
|
||||
config CGROUP_SCHED
|
||||
bool "Control groups"
|
||||
depends on CGROUPS
|
||||
help
|
||||
This option allows you to create arbitrary task groups
|
||||
using the "cgroup" pseudo filesystem and control
|
||||
the cpu bandwidth allocated to each such task group.
|
||||
Refer to Documentation/cgroups.txt for more information
|
||||
on "cgroup" pseudo filesystem.
|
||||
|
||||
endchoice
|
||||
|
||||
menu "Control Group support"
|
||||
config CGROUPS
|
||||
bool "Control Group support"
|
||||
help
|
||||
This option will let you use process cgroup subsystems
|
||||
such as Cpusets
|
||||
This option add support for grouping sets of processes together, for
|
||||
use with process control subsystems such as Cpusets, CFS, memory
|
||||
controls or device isolation.
|
||||
See
|
||||
- Documentation/cpusets.txt (Cpusets)
|
||||
- Documentation/scheduler/sched-design-CFS.txt (CFS)
|
||||
- Documentation/cgroups/ (features for grouping, isolation)
|
||||
- Documentation/controllers/ (features for resource control)
|
||||
|
||||
Say N if unsure.
|
||||
|
||||
@@ -324,61 +388,6 @@ config CPUSETS
|
||||
|
||||
Say N if unsure.
|
||||
|
||||
#
|
||||
# Architectures with an unreliable sched_clock() should select this:
|
||||
#
|
||||
config HAVE_UNSTABLE_SCHED_CLOCK
|
||||
bool
|
||||
|
||||
config GROUP_SCHED
|
||||
bool "Group CPU scheduler"
|
||||
depends on EXPERIMENTAL
|
||||
default n
|
||||
help
|
||||
This feature lets CPU scheduler recognize task groups and control CPU
|
||||
bandwidth allocation to such task groups.
|
||||
|
||||
config FAIR_GROUP_SCHED
|
||||
bool "Group scheduling for SCHED_OTHER"
|
||||
depends on GROUP_SCHED
|
||||
default GROUP_SCHED
|
||||
|
||||
config RT_GROUP_SCHED
|
||||
bool "Group scheduling for SCHED_RR/FIFO"
|
||||
depends on EXPERIMENTAL
|
||||
depends on GROUP_SCHED
|
||||
default n
|
||||
help
|
||||
This feature lets you explicitly allocate real CPU bandwidth
|
||||
to users or control groups (depending on the "Basis for grouping tasks"
|
||||
setting below. If enabled, it will also make it impossible to
|
||||
schedule realtime tasks for non-root users until you allocate
|
||||
realtime bandwidth for them.
|
||||
See Documentation/scheduler/sched-rt-group.txt for more information.
|
||||
|
||||
choice
|
||||
depends on GROUP_SCHED
|
||||
prompt "Basis for grouping tasks"
|
||||
default USER_SCHED
|
||||
|
||||
config USER_SCHED
|
||||
bool "user id"
|
||||
help
|
||||
This option will choose userid as the basis for grouping
|
||||
tasks, thus providing equal CPU bandwidth to each user.
|
||||
|
||||
config CGROUP_SCHED
|
||||
bool "Control groups"
|
||||
depends on CGROUPS
|
||||
help
|
||||
This option allows you to create arbitrary task groups
|
||||
using the "cgroup" pseudo filesystem and control
|
||||
the cpu bandwidth allocated to each such task group.
|
||||
Refer to Documentation/cgroups.txt for more information
|
||||
on "cgroup" pseudo filesystem.
|
||||
|
||||
endchoice
|
||||
|
||||
config CGROUP_CPUACCT
|
||||
bool "Simple CPU accounting cgroup subsystem"
|
||||
depends on CGROUPS
|
||||
@@ -393,9 +402,6 @@ config RESOURCE_COUNTERS
|
||||
infrastructure that works with cgroups
|
||||
depends on CGROUPS
|
||||
|
||||
config MM_OWNER
|
||||
bool
|
||||
|
||||
config CGROUP_MEM_RES_CTLR
|
||||
bool "Memory Resource Controller for Control Groups"
|
||||
depends on CGROUPS && RESOURCE_COUNTERS
|
||||
@@ -414,36 +420,68 @@ config CGROUP_MEM_RES_CTLR
|
||||
sure you need the memory resource controller. Even when you enable
|
||||
this, you can set "cgroup_disable=memory" at your boot option to
|
||||
disable memory resource controller and you can avoid overheads.
|
||||
(and lose benefits of memory resource contoller)
|
||||
(and lose benefits of memory resource controller)
|
||||
|
||||
This config option also selects MM_OWNER config option, which
|
||||
could in turn add some fork/exit overhead.
|
||||
|
||||
config MM_OWNER
|
||||
bool
|
||||
|
||||
config CGROUP_MEM_RES_CTLR_SWAP
|
||||
bool "Memory Resource Controller Swap Extension(EXPERIMENTAL)"
|
||||
depends on CGROUP_MEM_RES_CTLR && SWAP && EXPERIMENTAL
|
||||
help
|
||||
Add swap management feature to memory resource controller. When you
|
||||
enable this, you can limit mem+swap usage per cgroup. In other words,
|
||||
when you disable this, memory resource controller has no cares to
|
||||
usage of swap...a process can exhaust all of the swap. This extension
|
||||
is useful when you want to avoid exhaustion swap but this itself
|
||||
adds more overheads and consumes memory for remembering information.
|
||||
Especially if you use 32bit system or small memory system, please
|
||||
be careful about enabling this. When memory resource controller
|
||||
is disabled by boot option, this will be automatically disabled and
|
||||
there will be no overhead from this. Even when you set this config=y,
|
||||
if boot option "noswapaccount" is set, swap will not be accounted.
|
||||
|
||||
|
||||
endmenu
|
||||
|
||||
config SYSFS_DEPRECATED
|
||||
bool
|
||||
|
||||
config SYSFS_DEPRECATED_V2
|
||||
bool "Create deprecated sysfs files"
|
||||
bool "Create deprecated sysfs layout for older userspace tools"
|
||||
depends on SYSFS
|
||||
default y
|
||||
select SYSFS_DEPRECATED
|
||||
help
|
||||
This option creates deprecated symlinks such as the
|
||||
"device"-link, the <subsystem>:<name>-link, and the
|
||||
"bus"-link. It may also add deprecated key in the
|
||||
uevent environment.
|
||||
None of these features or values should be used today, as
|
||||
they export driver core implementation details to userspace
|
||||
or export properties which can't be kept stable across kernel
|
||||
releases.
|
||||
This option switches the layout of sysfs to the deprecated
|
||||
version.
|
||||
|
||||
If enabled, this option will also move any device structures
|
||||
that belong to a class, back into the /sys/class hierarchy, in
|
||||
order to support older versions of udev and some userspace
|
||||
programs.
|
||||
The current sysfs layout features a unified device tree at
|
||||
/sys/devices/, which is able to express a hierarchy between
|
||||
class devices. If the deprecated option is set to Y, the
|
||||
unified device tree is split into a bus device tree at
|
||||
/sys/devices/ and several individual class device trees at
|
||||
/sys/class/. The class and bus devices will be connected by
|
||||
"<subsystem>:<name>" and the "device" links. The "block"
|
||||
class devices, will not show up in /sys/class/block/. Some
|
||||
subsystems will suppress the creation of some devices which
|
||||
depend on the unified device tree.
|
||||
|
||||
If you are using a distro with the most recent userspace
|
||||
packages, it should be safe to say N here.
|
||||
This option is not a pure compatibility option that can
|
||||
be safely enabled on newer distributions. It will change the
|
||||
layout of sysfs to the non-extensible deprecated version,
|
||||
and disable some features, which can not be exported without
|
||||
confusing older userspace tools. Since 2007/2008 all major
|
||||
distributions do not enable this option, and ship no tools which
|
||||
depend on the deprecated layout or this option.
|
||||
|
||||
If you are using a new kernel on an older distribution, or use
|
||||
older userspace tools, you might need to say Y here. Do not say Y,
|
||||
if the original kernel, that came with your distribution, has
|
||||
this option set to N.
|
||||
|
||||
config PROC_PID_CPUSET
|
||||
bool "Include legacy /proc/<pid>/cpuset file"
|
||||
@@ -838,10 +876,6 @@ config RT_MUTEXES
|
||||
boolean
|
||||
select PLIST
|
||||
|
||||
config TINY_SHMEM
|
||||
default !SHMEM
|
||||
bool
|
||||
|
||||
config BASE_SMALL
|
||||
int
|
||||
default 0 if BASE_FULL
|
||||
@@ -916,14 +950,17 @@ config MODULE_SRCVERSION_ALL
|
||||
the version). With this option, such a "srcversion" field
|
||||
will be created for all modules. If unsure, say N.
|
||||
|
||||
config KMOD
|
||||
def_bool y
|
||||
help
|
||||
This is being removed soon. These days, CONFIG_MODULES
|
||||
implies CONFIG_KMOD, so use that instead.
|
||||
|
||||
endif # MODULES
|
||||
|
||||
config INIT_ALL_POSSIBLE
|
||||
bool
|
||||
help
|
||||
Back when each arch used to define their own cpu_online_map and
|
||||
cpu_possible_map, some of them chose to initialize cpu_possible_map
|
||||
with all 1s, and others with all 0s. When they were centralised,
|
||||
it was better to provide this option than to break all the archs
|
||||
and have several arch maintainers persuing me down dark alleys.
|
||||
|
||||
config STOP_MACHINE
|
||||
bool
|
||||
default y
|
||||
|
@@ -13,6 +13,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/initrd.h>
|
||||
#include <linux/async.h>
|
||||
|
||||
#include <linux/nfs_fs.h>
|
||||
#include <linux/nfs_fs_sb.h>
|
||||
@@ -220,10 +221,10 @@ static int __init do_mount_root(char *name, char *fs, int flags, void *data)
|
||||
|
||||
sys_chdir("/root");
|
||||
ROOT_DEV = current->fs->pwd.mnt->mnt_sb->s_dev;
|
||||
printk("VFS: Mounted root (%s filesystem)%s.\n",
|
||||
printk("VFS: Mounted root (%s filesystem)%s on device %u:%u.\n",
|
||||
current->fs->pwd.mnt->mnt_sb->s_type->name,
|
||||
current->fs->pwd.mnt->mnt_sb->s_flags & MS_RDONLY ?
|
||||
" readonly" : "");
|
||||
" readonly" : "", MAJOR(ROOT_DEV), MINOR(ROOT_DEV));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -372,6 +373,7 @@ void __init prepare_namespace(void)
|
||||
/* wait for the known devices to complete their probing */
|
||||
while (driver_probe_done() != 0)
|
||||
msleep(100);
|
||||
async_synchronize_full();
|
||||
|
||||
md_run_setup();
|
||||
|
||||
|
@@ -271,7 +271,7 @@ static int __init raid_setup(char *str)
|
||||
__setup("raid=", raid_setup);
|
||||
__setup("md=", md_setup);
|
||||
|
||||
static void autodetect_raid(void)
|
||||
static void __init autodetect_raid(void)
|
||||
{
|
||||
int fd;
|
||||
|
||||
|
@@ -9,6 +9,7 @@
|
||||
#include <linux/string.h>
|
||||
|
||||
#include "do_mounts.h"
|
||||
#include "../fs/squashfs/squashfs_fs.h"
|
||||
|
||||
int __initdata rd_prompt = 1;/* 1 = prompt for RAM disk, 0 = don't prompt */
|
||||
|
||||
@@ -41,6 +42,7 @@ static int __init crd_load(int in_fd, int out_fd);
|
||||
* ext2
|
||||
* romfs
|
||||
* cramfs
|
||||
* squashfs
|
||||
* gzip
|
||||
*/
|
||||
static int __init
|
||||
@@ -51,6 +53,7 @@ identify_ramdisk_image(int fd, int start_block)
|
||||
struct ext2_super_block *ext2sb;
|
||||
struct romfs_super_block *romfsb;
|
||||
struct cramfs_super *cramfsb;
|
||||
struct squashfs_super_block *squashfsb;
|
||||
int nblocks = -1;
|
||||
unsigned char *buf;
|
||||
|
||||
@@ -62,6 +65,7 @@ identify_ramdisk_image(int fd, int start_block)
|
||||
ext2sb = (struct ext2_super_block *) buf;
|
||||
romfsb = (struct romfs_super_block *) buf;
|
||||
cramfsb = (struct cramfs_super *) buf;
|
||||
squashfsb = (struct squashfs_super_block *) buf;
|
||||
memset(buf, 0xe5, size);
|
||||
|
||||
/*
|
||||
@@ -99,6 +103,16 @@ identify_ramdisk_image(int fd, int start_block)
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* squashfs is at block zero too */
|
||||
if (le32_to_cpu(squashfsb->s_magic) == SQUASHFS_MAGIC) {
|
||||
printk(KERN_NOTICE
|
||||
"RAMDISK: squashfs filesystem found at block %d\n",
|
||||
start_block);
|
||||
nblocks = (le64_to_cpu(squashfsb->bytes_used) + BLOCK_SIZE - 1)
|
||||
>> BLOCK_SIZE_BITS;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/*
|
||||
* Read block 1 to test for minix and ext2 superblock
|
||||
*/
|
||||
|
@@ -317,6 +317,7 @@ static int __init do_name(void)
|
||||
if (wfd >= 0) {
|
||||
sys_fchown(wfd, uid, gid);
|
||||
sys_fchmod(wfd, mode);
|
||||
sys_ftruncate(wfd, body_len);
|
||||
vcollected = kstrdup(collected, GFP_KERNEL);
|
||||
state = CopyFile;
|
||||
}
|
||||
|
48
init/main.c
48
init/main.c
@@ -51,7 +51,6 @@
|
||||
#include <linux/rmap.h>
|
||||
#include <linux/mempolicy.h>
|
||||
#include <linux/key.h>
|
||||
#include <linux/unwind.h>
|
||||
#include <linux/buffer_head.h>
|
||||
#include <linux/page_cgroup.h>
|
||||
#include <linux/debug_locks.h>
|
||||
@@ -64,6 +63,7 @@
|
||||
#include <linux/signal.h>
|
||||
#include <linux/idr.h>
|
||||
#include <linux/ftrace.h>
|
||||
#include <linux/async.h>
|
||||
#include <trace/boot.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
@@ -76,15 +76,6 @@
|
||||
#include <asm/smp.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This is one of the first .c files built. Error out early if we have compiler
|
||||
* trouble.
|
||||
*/
|
||||
|
||||
#if __GNUC__ == 4 && __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ == 0
|
||||
#warning gcc-4.1.0 is known to miscompile the kernel. A different compiler version is recommended.
|
||||
#endif
|
||||
|
||||
static int kernel_init(void *);
|
||||
|
||||
extern void init_IRQ(void);
|
||||
@@ -118,7 +109,7 @@ EXPORT_SYMBOL(system_state);
|
||||
|
||||
extern void time_init(void);
|
||||
/* Default late time init is NULL. archs can override this later. */
|
||||
void (*late_time_init)(void);
|
||||
void (*__initdata late_time_init)(void);
|
||||
extern void softirq_init(void);
|
||||
|
||||
/* Untouched command line saved by arch-specific code. */
|
||||
@@ -381,12 +372,7 @@ EXPORT_SYMBOL(nr_cpu_ids);
|
||||
/* An arch may set nr_cpu_ids earlier if needed, so this would be redundant */
|
||||
static void __init setup_nr_cpu_ids(void)
|
||||
{
|
||||
int cpu, highest_cpu = 0;
|
||||
|
||||
for_each_possible_cpu(cpu)
|
||||
highest_cpu = cpu;
|
||||
|
||||
nr_cpu_ids = highest_cpu + 1;
|
||||
nr_cpu_ids = find_last_bit(cpumask_bits(cpu_possible_mask),NR_CPUS) + 1;
|
||||
}
|
||||
|
||||
#ifndef CONFIG_HAVE_SETUP_PER_CPU_AREA
|
||||
@@ -462,7 +448,7 @@ static void __init setup_command_line(char *command_line)
|
||||
* gcc-3.4 accidentally inlines this function, so use noinline.
|
||||
*/
|
||||
|
||||
static void noinline __init_refok rest_init(void)
|
||||
static noinline void __init_refok rest_init(void)
|
||||
__releases(kernel_lock)
|
||||
{
|
||||
int pid;
|
||||
@@ -528,9 +514,9 @@ static void __init boot_cpu_init(void)
|
||||
{
|
||||
int cpu = smp_processor_id();
|
||||
/* Mark the boot cpu "present", "online" etc for SMP and UP case */
|
||||
cpu_set(cpu, cpu_online_map);
|
||||
cpu_set(cpu, cpu_present_map);
|
||||
cpu_set(cpu, cpu_possible_map);
|
||||
set_cpu_online(cpu, true);
|
||||
set_cpu_present(cpu, true);
|
||||
set_cpu_possible(cpu, true);
|
||||
}
|
||||
|
||||
void __init __weak smp_setup_processor_id(void)
|
||||
@@ -541,15 +527,6 @@ void __init __weak thread_info_cache_init(void)
|
||||
{
|
||||
}
|
||||
|
||||
void __init __weak arch_early_irq_init(void)
|
||||
{
|
||||
}
|
||||
|
||||
void __init __weak early_irq_init(void)
|
||||
{
|
||||
arch_early_irq_init();
|
||||
}
|
||||
|
||||
asmlinkage void __init start_kernel(void)
|
||||
{
|
||||
char * command_line;
|
||||
@@ -561,7 +538,6 @@ asmlinkage void __init start_kernel(void)
|
||||
* Need to run as early as possible, to initialize the
|
||||
* lockdep hash:
|
||||
*/
|
||||
unwind_init();
|
||||
lockdep_init();
|
||||
debug_objects_early_init();
|
||||
|
||||
@@ -589,7 +565,6 @@ asmlinkage void __init start_kernel(void)
|
||||
setup_arch(&command_line);
|
||||
mm_init_owner(&init_mm, &init_task);
|
||||
setup_command_line(command_line);
|
||||
unwind_setup();
|
||||
setup_per_cpu_areas();
|
||||
setup_nr_cpu_ids();
|
||||
smp_prepare_boot_cpu(); /* arch-specific boot-cpu hooks */
|
||||
@@ -632,7 +607,8 @@ asmlinkage void __init start_kernel(void)
|
||||
sched_clock_init();
|
||||
profile_init();
|
||||
if (!irqs_disabled())
|
||||
printk("start_kernel(): bug: interrupts were enabled early\n");
|
||||
printk(KERN_CRIT "start_kernel(): bug: interrupts were "
|
||||
"enabled early\n");
|
||||
early_boot_irqs_on();
|
||||
local_irq_enable();
|
||||
|
||||
@@ -717,7 +693,7 @@ asmlinkage void __init start_kernel(void)
|
||||
rest_init();
|
||||
}
|
||||
|
||||
static int initcall_debug;
|
||||
int initcall_debug;
|
||||
core_param(initcall_debug, initcall_debug, bool, 0644);
|
||||
|
||||
int do_one_initcall(initcall_t fn)
|
||||
@@ -816,8 +792,10 @@ static void run_init_process(char *init_filename)
|
||||
/* This is a non __init function. Force it to be noinline otherwise gcc
|
||||
* makes it inline to init() and it becomes part of init.text section
|
||||
*/
|
||||
static int noinline init_post(void)
|
||||
static noinline int init_post(void)
|
||||
{
|
||||
/* need to finish all async __init code before freeing the memory */
|
||||
async_synchronize_full();
|
||||
free_initmem();
|
||||
unlock_kernel();
|
||||
mark_rodata_ro();
|
||||
|
Reference in New Issue
Block a user