diff options
Diffstat (limited to 'kernel/cpuset.c')
-rw-r--r-- | kernel/cpuset.c | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/kernel/cpuset.c b/kernel/cpuset.c index 584bb4e6c042..794af5024c2f 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c | |||
@@ -912,6 +912,10 @@ static int update_nodemask(struct cpuset *cs, char *buf) | |||
912 | int fudge; | 912 | int fudge; |
913 | int retval; | 913 | int retval; |
914 | 914 | ||
915 | /* top_cpuset.mems_allowed tracks node_online_map; it's read-only */ | ||
916 | if (cs == &top_cpuset) | ||
917 | return -EACCES; | ||
918 | |||
915 | trialcs = *cs; | 919 | trialcs = *cs; |
916 | retval = nodelist_parse(buf, trialcs.mems_allowed); | 920 | retval = nodelist_parse(buf, trialcs.mems_allowed); |
917 | if (retval < 0) | 921 | if (retval < 0) |
@@ -2042,9 +2046,8 @@ out: | |||
2042 | * (of no affect) on systems that are actively using CPU hotplug | 2046 | * (of no affect) on systems that are actively using CPU hotplug |
2043 | * but making no active use of cpusets. | 2047 | * but making no active use of cpusets. |
2044 | * | 2048 | * |
2045 | * This handles CPU hotplug (cpuhp) events. If someday Memory | 2049 | * This routine ensures that top_cpuset.cpus_allowed tracks |
2046 | * Nodes can be hotplugged (dynamically changing node_online_map) | 2050 | * cpu_online_map on each CPU hotplug (cpuhp) event. |
2047 | * then we should handle that too, perhaps in a similar way. | ||
2048 | */ | 2051 | */ |
2049 | 2052 | ||
2050 | #ifdef CONFIG_HOTPLUG_CPU | 2053 | #ifdef CONFIG_HOTPLUG_CPU |
@@ -2063,6 +2066,25 @@ static int cpuset_handle_cpuhp(struct notifier_block *nb, | |||
2063 | } | 2066 | } |
2064 | #endif | 2067 | #endif |
2065 | 2068 | ||
2069 | /* | ||
2070 | * Keep top_cpuset.mems_allowed tracking node_online_map. | ||
2071 | * Call this routine anytime after you change node_online_map. | ||
2072 | * See also the previous routine cpuset_handle_cpuhp(). | ||
2073 | */ | ||
2074 | |||
2075 | #ifdef CONFIG_MEMORY_HOTPLUG | ||
2076 | void cpuset_track_online_nodes() | ||
2077 | { | ||
2078 | mutex_lock(&manage_mutex); | ||
2079 | mutex_lock(&callback_mutex); | ||
2080 | |||
2081 | top_cpuset.mems_allowed = node_online_map; | ||
2082 | |||
2083 | mutex_unlock(&callback_mutex); | ||
2084 | mutex_unlock(&manage_mutex); | ||
2085 | } | ||
2086 | #endif | ||
2087 | |||
2066 | /** | 2088 | /** |
2067 | * cpuset_init_smp - initialize cpus_allowed | 2089 | * cpuset_init_smp - initialize cpus_allowed |
2068 | * | 2090 | * |