diff options
| author | Mauro Carvalho Chehab <mchehab@redhat.com> | 2013-01-11 10:28:19 -0500 |
|---|---|---|
| committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2013-01-11 10:28:19 -0500 |
| commit | 734d1ece37fbf3d2ddfc71bc6c69e0fe35f02542 (patch) | |
| tree | c4805dd7e746b1feb9e09e9849f3245d0b2c0c6b /init | |
| parent | 216c82c6aba63eeb49d7654b448e0d47bea255bb (diff) | |
| parent | 9931faca02c604c22335f5a935a501bb2ace6e20 (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/Kconfig | 115 | ||||
| -rw-r--r-- | init/do_mounts.c | 61 | ||||
| -rw-r--r-- | init/main.c | 7 | ||||
| -rw-r--r-- | init/version.c | 2 |
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 | ||
| 489 | config CONTEXT_TRACKING | ||
| 490 | bool | ||
| 491 | |||
| 489 | config RCU_USER_QS | 492 | config 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 | ||
| 505 | config RCU_USER_QS_FORCE | 509 | config 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 | ||
| 519 | config RCU_FANOUT | 519 | config 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 | ||
| 657 | config 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 | |||
| 658 | endmenu # "RCU Subsystem" | 679 | endmenu # "RCU Subsystem" |
| 659 | 680 | ||
| 660 | config IKCONFIG | 681 | config IKCONFIG |
| @@ -696,6 +717,50 @@ config LOG_BUF_SHIFT | |||
| 696 | config HAVE_UNSTABLE_SCHED_CLOCK | 717 | config 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 | # | ||
| 724 | config 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 | # | ||
| 730 | config ARCH_WANT_NUMA_VARIABLE_LOCALITY | ||
| 731 | bool | ||
| 732 | |||
| 733 | # | ||
| 734 | # For architectures that are willing to define _PAGE_NUMA as _PAGE_PROTNONE | ||
| 735 | config ARCH_WANTS_PROT_NUMA_PROT_NONE | ||
| 736 | bool | ||
| 737 | |||
| 738 | config 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 | |||
| 744 | config 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 | |||
| 752 | config 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 | |||
| 699 | menuconfig CGROUPS | 764 | menuconfig 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 | |||
| 817 | config MEMCG_KMEM | 882 | config 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 |
| 72 | struct 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 | */ |
| 79 | static int match_dev_by_uuid(struct device *dev, void *data) | 84 | static 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; |
| 91 | no_match: | 96 | no_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 | */ |
| 109 | static dev_t devt_from_partuuid(char *uuid_str) | 114 | static 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) | |||
| 158 | no_offset: | 166 | no_offset: |
| 159 | put_device(dev); | 167 | put_device(dev); |
| 160 | done: | 168 | done: |
| 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) | |||
| 797 | static int run_init_process(const char *init_filename) | 797 | static 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 | ||
| 803 | static void __init kernel_init_freeable(void); | 805 | static 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 | }; |
| 38 | EXPORT_SYMBOL_GPL(init_uts_ns); | 40 | EXPORT_SYMBOL_GPL(init_uts_ns); |
| 39 | 41 | ||
