aboutsummaryrefslogtreecommitdiffstats
path: root/init
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2013-01-11 10:28:19 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-01-11 10:28:19 -0500
commit734d1ece37fbf3d2ddfc71bc6c69e0fe35f02542 (patch)
treec4805dd7e746b1feb9e09e9849f3245d0b2c0c6b /init
parent216c82c6aba63eeb49d7654b448e0d47bea255bb (diff)
parent9931faca02c604c22335f5a935a501bb2ace6e20 (diff)
Merge tag 'v3.8-rc3' into v4l_for_linus
Linux 3.8-rc3 * tag 'v3.8-rc3': (11110 commits) Linux 3.8-rc3 mm: reinstante dropped pmd_trans_splitting() check cred: Remove tgcred pointer from struct cred drm/ttm: fix fence locking in ttm_buffer_object_transfer ARM: clps711x: Fix bad merge of clockevents setup ARM: highbank: save and restore L2 cache and GIC on suspend ARM: highbank: add a power request clear ARM: highbank: fix secondary boot and hotplug ARM: highbank: fix typos with hignbank in power request functions ARM: dts: fix highbank cpu mpidr values ARM: dts: add device_type prop to cpu nodes on Calxeda platforms drm/prime: drop reference on imported dma-buf come from gem xen/netfront: improve truesize tracking ARM: mx5: Fix MX53 flexcan2 clock ARM: OMAP2+: am33xx-hwmod: Fix wrongly terminated am33xx_usbss_mpu_irqs array sctp: fix Kconfig bug in default cookie hmac selection EDAC: Cleanup device deregistering path EDAC: Fix EDAC Kconfig menu EDAC: Fix kernel panic on module unloading ALSA: hda - add mute LED for HP Pavilion 17 (Realtek codec) ...
Diffstat (limited to 'init')
-rw-r--r--init/Kconfig115
-rw-r--r--init/do_mounts.c61
-rw-r--r--init/main.c7
-rw-r--r--init/version.c2
4 files changed, 135 insertions, 50 deletions
diff --git a/init/Kconfig b/init/Kconfig
index 6fdd6e339326..7d30240e5bfe 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -486,35 +486,35 @@ config PREEMPT_RCU
486 This option enables preemptible-RCU code that is common between 486 This option enables preemptible-RCU code that is common between
487 the TREE_PREEMPT_RCU and TINY_PREEMPT_RCU implementations. 487 the TREE_PREEMPT_RCU and TINY_PREEMPT_RCU implementations.
488 488
489config CONTEXT_TRACKING
490 bool
491
489config RCU_USER_QS 492config RCU_USER_QS
490 bool "Consider userspace as in RCU extended quiescent state" 493 bool "Consider userspace as in RCU extended quiescent state"
491 depends on HAVE_RCU_USER_QS && SMP 494 depends on HAVE_CONTEXT_TRACKING && SMP
495 select CONTEXT_TRACKING
492 help 496 help
493 This option sets hooks on kernel / userspace boundaries and 497 This option sets hooks on kernel / userspace boundaries and
494 puts RCU in extended quiescent state when the CPU runs in 498 puts RCU in extended quiescent state when the CPU runs in
495 userspace. It means that when a CPU runs in userspace, it is 499 userspace. It means that when a CPU runs in userspace, it is
496 excluded from the global RCU state machine and thus doesn't 500 excluded from the global RCU state machine and thus doesn't
497 to keep the timer tick on for RCU. 501 try to keep the timer tick on for RCU.
498 502
499 Unless you want to hack and help the development of the full 503 Unless you want to hack and help the development of the full
500 tickless feature, you shouldn't enable this option. It adds 504 dynticks mode, you shouldn't enable this option. It also
501 unnecessary overhead. 505 adds unnecessary overhead.
502 506
503 If unsure say N 507 If unsure say N
504 508
505config RCU_USER_QS_FORCE 509config CONTEXT_TRACKING_FORCE
506 bool "Force userspace extended QS by default" 510 bool "Force context tracking"
507 depends on RCU_USER_QS 511 depends on CONTEXT_TRACKING
508 help 512 help
509 Set the hooks in user/kernel boundaries by default in order to 513 Probe on user/kernel boundaries by default in order to
510 test this feature that treats userspace as an extended quiescent 514 test the features that rely on it such as userspace RCU extended
511 state until we have a real user like a full adaptive nohz option. 515 quiescent states.
512 516 This test is there for debugging until we have a real user like the
513 Unless you want to hack and help the development of the full 517 full dynticks mode.
514 tickless feature, you shouldn't enable this option. It adds
515 unnecessary overhead.
516
517 If unsure say N
518 518
519config RCU_FANOUT 519config RCU_FANOUT
520 int "Tree-based hierarchical RCU fanout value" 520 int "Tree-based hierarchical RCU fanout value"
@@ -582,14 +582,13 @@ config RCU_FAST_NO_HZ
582 depends on NO_HZ && SMP 582 depends on NO_HZ && SMP
583 default n 583 default n
584 help 584 help
585 This option causes RCU to attempt to accelerate grace periods 585 This option causes RCU to attempt to accelerate grace periods in
586 in order to allow CPUs to enter dynticks-idle state more 586 order to allow CPUs to enter dynticks-idle state more quickly.
587 quickly. On the other hand, this option increases the overhead 587 On the other hand, this option increases the overhead of the
588 of the dynticks-idle checking, particularly on systems with 588 dynticks-idle checking, thus degrading scheduling latency.
589 large numbers of CPUs.
590 589
591 Say Y if energy efficiency is critically important, particularly 590 Say Y if energy efficiency is critically important, and you don't
592 if you have relatively few CPUs. 591 care about real-time response.
593 592
594 Say N if you are unsure. 593 Say N if you are unsure.
595 594
@@ -655,6 +654,28 @@ config RCU_BOOST_DELAY
655 654
656 Accept the default if unsure. 655 Accept the default if unsure.
657 656
657config RCU_NOCB_CPU
658 bool "Offload RCU callback processing from boot-selected CPUs"
659 depends on TREE_RCU || TREE_PREEMPT_RCU
660 default n
661 help
662 Use this option to reduce OS jitter for aggressive HPC or
663 real-time workloads. It can also be used to offload RCU
664 callback invocation to energy-efficient CPUs in battery-powered
665 asymmetric multiprocessors.
666
667 This option offloads callback invocation from the set of
668 CPUs specified at boot time by the rcu_nocbs parameter.
669 For each such CPU, a kthread ("rcuoN") will be created to
670 invoke callbacks, where the "N" is the CPU being offloaded.
671 Nothing prevents this kthread from running on the specified
672 CPUs, but (1) the kthreads may be preempted between each
673 callback, and (2) affinity or cgroups can be used to force
674 the kthreads to run on whatever set of CPUs is desired.
675
676 Say Y here if you want reduced OS jitter on selected CPUs.
677 Say N here if you are unsure.
678
658endmenu # "RCU Subsystem" 679endmenu # "RCU Subsystem"
659 680
660config IKCONFIG 681config IKCONFIG
@@ -696,6 +717,50 @@ config LOG_BUF_SHIFT
696config HAVE_UNSTABLE_SCHED_CLOCK 717config HAVE_UNSTABLE_SCHED_CLOCK
697 bool 718 bool
698 719
720#
721# For architectures that want to enable the support for NUMA-affine scheduler
722# balancing logic:
723#
724config ARCH_SUPPORTS_NUMA_BALANCING
725 bool
726
727# For architectures that (ab)use NUMA to represent different memory regions
728# all cpu-local but of different latencies, such as SuperH.
729#
730config ARCH_WANT_NUMA_VARIABLE_LOCALITY
731 bool
732
733#
734# For architectures that are willing to define _PAGE_NUMA as _PAGE_PROTNONE
735config ARCH_WANTS_PROT_NUMA_PROT_NONE
736 bool
737
738config ARCH_USES_NUMA_PROT_NONE
739 bool
740 default y
741 depends on ARCH_WANTS_PROT_NUMA_PROT_NONE
742 depends on NUMA_BALANCING
743
744config NUMA_BALANCING_DEFAULT_ENABLED
745 bool "Automatically enable NUMA aware memory/task placement"
746 default y
747 depends on NUMA_BALANCING
748 help
749 If set, autonumic NUMA balancing will be enabled if running on a NUMA
750 machine.
751
752config NUMA_BALANCING
753 bool "Memory placement aware NUMA scheduler"
754 depends on ARCH_SUPPORTS_NUMA_BALANCING
755 depends on !ARCH_WANT_NUMA_VARIABLE_LOCALITY
756 depends on SMP && NUMA && MIGRATION
757 help
758 This option adds support for automatic NUMA aware memory/task placement.
759 The mechanism is quite primitive and is based on migrating memory when
760 it is references to the node the task is running on.
761
762 This system will be inactive on UMA systems.
763
699menuconfig CGROUPS 764menuconfig CGROUPS
700 boolean "Control Group support" 765 boolean "Control Group support"
701 depends on EVENTFD 766 depends on EVENTFD
@@ -817,7 +882,7 @@ config MEMCG_SWAP_ENABLED
817config MEMCG_KMEM 882config MEMCG_KMEM
818 bool "Memory Resource Controller Kernel Memory accounting (EXPERIMENTAL)" 883 bool "Memory Resource Controller Kernel Memory accounting (EXPERIMENTAL)"
819 depends on MEMCG && EXPERIMENTAL 884 depends on MEMCG && EXPERIMENTAL
820 default n 885 depends on SLUB || SLAB
821 help 886 help
822 The Kernel Memory extension for Memory Resource Controller can limit 887 The Kernel Memory extension for Memory Resource Controller can limit
823 the amount of memory used by kernel objects in the system. Those are 888 the amount of memory used by kernel objects in the system. Those are
@@ -1004,11 +1069,9 @@ config UIDGID_CONVERTED
1004 # Filesystems 1069 # Filesystems
1005 depends on 9P_FS = n 1070 depends on 9P_FS = n
1006 depends on AFS_FS = n 1071 depends on AFS_FS = n
1007 depends on AUTOFS4_FS = n
1008 depends on CEPH_FS = n 1072 depends on CEPH_FS = n
1009 depends on CIFS = n 1073 depends on CIFS = n
1010 depends on CODA_FS = n 1074 depends on CODA_FS = n
1011 depends on FUSE_FS = n
1012 depends on GFS2_FS = n 1075 depends on GFS2_FS = n
1013 depends on NCP_FS = n 1076 depends on NCP_FS = n
1014 depends on NFSD = n 1077 depends on NFSD = n
diff --git a/init/do_mounts.c b/init/do_mounts.c
index f8a66424360d..1d1b6348f903 100644
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
@@ -69,23 +69,28 @@ __setup("ro", readonly);
69__setup("rw", readwrite); 69__setup("rw", readwrite);
70 70
71#ifdef CONFIG_BLOCK 71#ifdef CONFIG_BLOCK
72struct uuidcmp {
73 const char *uuid;
74 int len;
75};
76
72/** 77/**
73 * match_dev_by_uuid - callback for finding a partition using its uuid 78 * match_dev_by_uuid - callback for finding a partition using its uuid
74 * @dev: device passed in by the caller 79 * @dev: device passed in by the caller
75 * @data: opaque pointer to a 36 byte char array with a UUID 80 * @data: opaque pointer to the desired struct uuidcmp to match
76 * 81 *
77 * Returns 1 if the device matches, and 0 otherwise. 82 * Returns 1 if the device matches, and 0 otherwise.
78 */ 83 */
79static int match_dev_by_uuid(struct device *dev, void *data) 84static int match_dev_by_uuid(struct device *dev, void *data)
80{ 85{
81 u8 *uuid = data; 86 struct uuidcmp *cmp = data;
82 struct hd_struct *part = dev_to_part(dev); 87 struct hd_struct *part = dev_to_part(dev);
83 88
84 if (!part->info) 89 if (!part->info)
85 goto no_match; 90 goto no_match;
86 91
87 if (memcmp(uuid, part->info->uuid, sizeof(part->info->uuid))) 92 if (strncasecmp(cmp->uuid, part->info->uuid, cmp->len))
88 goto no_match; 93 goto no_match;
89 94
90 return 1; 95 return 1;
91no_match: 96no_match:
@@ -95,7 +100,7 @@ no_match:
95 100
96/** 101/**
97 * devt_from_partuuid - looks up the dev_t of a partition by its UUID 102 * devt_from_partuuid - looks up the dev_t of a partition by its UUID
98 * @uuid: min 36 byte char array containing a hex ascii UUID 103 * @uuid: char array containing ascii UUID
99 * 104 *
100 * The function will return the first partition which contains a matching 105 * The function will return the first partition which contains a matching
101 * UUID value in its partition_meta_info struct. This does not search 106 * UUID value in its partition_meta_info struct. This does not search
@@ -106,38 +111,41 @@ no_match:
106 * 111 *
107 * Returns the matching dev_t on success or 0 on failure. 112 * Returns the matching dev_t on success or 0 on failure.
108 */ 113 */
109static dev_t devt_from_partuuid(char *uuid_str) 114static dev_t devt_from_partuuid(const char *uuid_str)
110{ 115{
111 dev_t res = 0; 116 dev_t res = 0;
117 struct uuidcmp cmp;
112 struct device *dev = NULL; 118 struct device *dev = NULL;
113 u8 uuid[16];
114 struct gendisk *disk; 119 struct gendisk *disk;
115 struct hd_struct *part; 120 struct hd_struct *part;
116 int offset = 0; 121 int offset = 0;
122 bool clear_root_wait = false;
123 char *slash;
117 124
118 if (strlen(uuid_str) < 36) 125 cmp.uuid = uuid_str;
119 goto done;
120 126
127 slash = strchr(uuid_str, '/');
121 /* Check for optional partition number offset attributes. */ 128 /* Check for optional partition number offset attributes. */
122 if (uuid_str[36]) { 129 if (slash) {
123 char c = 0; 130 char c = 0;
124 /* Explicitly fail on poor PARTUUID syntax. */ 131 /* Explicitly fail on poor PARTUUID syntax. */
125 if (sscanf(&uuid_str[36], 132 if (sscanf(slash + 1,
126 "/PARTNROFF=%d%c", &offset, &c) != 1) { 133 "PARTNROFF=%d%c", &offset, &c) != 1) {
127 printk(KERN_ERR "VFS: PARTUUID= is invalid.\n" 134 clear_root_wait = true;
128 "Expected PARTUUID=<valid-uuid-id>[/PARTNROFF=%%d]\n");
129 if (root_wait)
130 printk(KERN_ERR
131 "Disabling rootwait; root= is invalid.\n");
132 root_wait = 0;
133 goto done; 135 goto done;
134 } 136 }
137 cmp.len = slash - uuid_str;
138 } else {
139 cmp.len = strlen(uuid_str);
135 } 140 }
136 141
137 /* Pack the requested UUID in the expected format. */ 142 if (!cmp.len) {
138 part_pack_uuid(uuid_str, uuid); 143 clear_root_wait = true;
144 goto done;
145 }
139 146
140 dev = class_find_device(&block_class, NULL, uuid, &match_dev_by_uuid); 147 dev = class_find_device(&block_class, NULL, &cmp,
148 &match_dev_by_uuid);
141 if (!dev) 149 if (!dev)
142 goto done; 150 goto done;
143 151
@@ -158,6 +166,13 @@ static dev_t devt_from_partuuid(char *uuid_str)
158no_offset: 166no_offset:
159 put_device(dev); 167 put_device(dev);
160done: 168done:
169 if (clear_root_wait) {
170 pr_err("VFS: PARTUUID= is invalid.\n"
171 "Expected PARTUUID=<valid-uuid-id>[/PARTNROFF=%%d]\n");
172 if (root_wait)
173 pr_err("Disabling rootwait; root= is invalid.\n");
174 root_wait = 0;
175 }
161 return res; 176 return res;
162} 177}
163#endif 178#endif
@@ -174,6 +189,10 @@ done:
174 * used when disk name of partitioned disk ends on a digit. 189 * used when disk name of partitioned disk ends on a digit.
175 * 6) PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF representing the 190 * 6) PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF representing the
176 * unique id of a partition if the partition table provides it. 191 * unique id of a partition if the partition table provides it.
192 * The UUID may be either an EFI/GPT UUID, or refer to an MSDOS
193 * partition using the format SSSSSSSS-PP, where SSSSSSSS is a zero-
194 * filled hex representation of the 32-bit "NT disk signature", and PP
195 * is a zero-filled hex representation of the 1-based partition number.
177 * 7) PARTUUID=<UUID>/PARTNROFF=<int> to select a partition in relation to 196 * 7) PARTUUID=<UUID>/PARTNROFF=<int> to select a partition in relation to
178 * a partition with a known unique id. 197 * a partition with a known unique id.
179 * 198 *
diff --git a/init/main.c b/init/main.c
index e33e09df3cbc..85d69dffe864 100644
--- a/init/main.c
+++ b/init/main.c
@@ -797,7 +797,9 @@ static void __init do_pre_smp_initcalls(void)
797static int run_init_process(const char *init_filename) 797static int run_init_process(const char *init_filename)
798{ 798{
799 argv_init[0] = init_filename; 799 argv_init[0] = init_filename;
800 return kernel_execve(init_filename, argv_init, envp_init); 800 return do_execve(init_filename,
801 (const char __user *const __user *)argv_init,
802 (const char __user *const __user *)envp_init);
801} 803}
802 804
803static void __init kernel_init_freeable(void); 805static void __init kernel_init_freeable(void);
@@ -812,7 +814,6 @@ static int __ref kernel_init(void *unused)
812 system_state = SYSTEM_RUNNING; 814 system_state = SYSTEM_RUNNING;
813 numa_default_policy(); 815 numa_default_policy();
814 816
815 current->signal->flags |= SIGNAL_UNKILLABLE;
816 flush_delayed_fput(); 817 flush_delayed_fput();
817 818
818 if (ramdisk_execute_command) { 819 if (ramdisk_execute_command) {
@@ -857,7 +858,7 @@ static void __init kernel_init_freeable(void)
857 /* 858 /*
858 * init can allocate pages on any node 859 * init can allocate pages on any node
859 */ 860 */
860 set_mems_allowed(node_states[N_HIGH_MEMORY]); 861 set_mems_allowed(node_states[N_MEMORY]);
861 /* 862 /*
862 * init can run on any cpu. 863 * init can run on any cpu.
863 */ 864 */
diff --git a/init/version.c b/init/version.c
index 86fe0ccb997a..58170f18912d 100644
--- a/init/version.c
+++ b/init/version.c
@@ -12,6 +12,7 @@
12#include <linux/utsname.h> 12#include <linux/utsname.h>
13#include <generated/utsrelease.h> 13#include <generated/utsrelease.h>
14#include <linux/version.h> 14#include <linux/version.h>
15#include <linux/proc_fs.h>
15 16
16#ifndef CONFIG_KALLSYMS 17#ifndef CONFIG_KALLSYMS
17#define version(a) Version_ ## a 18#define version(a) Version_ ## a
@@ -34,6 +35,7 @@ struct uts_namespace init_uts_ns = {
34 .domainname = UTS_DOMAINNAME, 35 .domainname = UTS_DOMAINNAME,
35 }, 36 },
36 .user_ns = &init_user_ns, 37 .user_ns = &init_user_ns,
38 .proc_inum = PROC_UTS_INIT_INO,
37}; 39};
38EXPORT_SYMBOL_GPL(init_uts_ns); 40EXPORT_SYMBOL_GPL(init_uts_ns);
39 41