diff options
Diffstat (limited to 'kernel/sysctl.c')
-rw-r--r-- | kernel/sysctl.c | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 0f1bd83db985..51054fea5d99 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c | |||
@@ -194,9 +194,9 @@ static int sysrq_sysctl_handler(ctl_table *table, int write, | |||
194 | static struct ctl_table root_table[]; | 194 | static struct ctl_table root_table[]; |
195 | static struct ctl_table_root sysctl_table_root; | 195 | static struct ctl_table_root sysctl_table_root; |
196 | static struct ctl_table_header root_table_header = { | 196 | static struct ctl_table_header root_table_header = { |
197 | .count = 1, | 197 | {{.count = 1, |
198 | .ctl_table = root_table, | 198 | .ctl_table = root_table, |
199 | .ctl_entry = LIST_HEAD_INIT(sysctl_table_root.default_set.list), | 199 | .ctl_entry = LIST_HEAD_INIT(sysctl_table_root.default_set.list),}}, |
200 | .root = &sysctl_table_root, | 200 | .root = &sysctl_table_root, |
201 | .set = &sysctl_table_root.default_set, | 201 | .set = &sysctl_table_root.default_set, |
202 | }; | 202 | }; |
@@ -361,20 +361,13 @@ static struct ctl_table kern_table[] = { | |||
361 | .mode = 0644, | 361 | .mode = 0644, |
362 | .proc_handler = sched_rt_handler, | 362 | .proc_handler = sched_rt_handler, |
363 | }, | 363 | }, |
364 | { | ||
365 | .procname = "sched_compat_yield", | ||
366 | .data = &sysctl_sched_compat_yield, | ||
367 | .maxlen = sizeof(unsigned int), | ||
368 | .mode = 0644, | ||
369 | .proc_handler = proc_dointvec, | ||
370 | }, | ||
371 | #ifdef CONFIG_SCHED_AUTOGROUP | 364 | #ifdef CONFIG_SCHED_AUTOGROUP |
372 | { | 365 | { |
373 | .procname = "sched_autogroup_enabled", | 366 | .procname = "sched_autogroup_enabled", |
374 | .data = &sysctl_sched_autogroup_enabled, | 367 | .data = &sysctl_sched_autogroup_enabled, |
375 | .maxlen = sizeof(unsigned int), | 368 | .maxlen = sizeof(unsigned int), |
376 | .mode = 0644, | 369 | .mode = 0644, |
377 | .proc_handler = proc_dointvec, | 370 | .proc_handler = proc_dointvec_minmax, |
378 | .extra1 = &zero, | 371 | .extra1 = &zero, |
379 | .extra2 = &one, | 372 | .extra2 = &one, |
380 | }, | 373 | }, |
@@ -948,7 +941,7 @@ static struct ctl_table kern_table[] = { | |||
948 | .data = &sysctl_perf_event_sample_rate, | 941 | .data = &sysctl_perf_event_sample_rate, |
949 | .maxlen = sizeof(sysctl_perf_event_sample_rate), | 942 | .maxlen = sizeof(sysctl_perf_event_sample_rate), |
950 | .mode = 0644, | 943 | .mode = 0644, |
951 | .proc_handler = proc_dointvec, | 944 | .proc_handler = perf_proc_update_handler, |
952 | }, | 945 | }, |
953 | #endif | 946 | #endif |
954 | #ifdef CONFIG_KMEMCHECK | 947 | #ifdef CONFIG_KMEMCHECK |
@@ -1567,11 +1560,16 @@ void sysctl_head_get(struct ctl_table_header *head) | |||
1567 | spin_unlock(&sysctl_lock); | 1560 | spin_unlock(&sysctl_lock); |
1568 | } | 1561 | } |
1569 | 1562 | ||
1563 | static void free_head(struct rcu_head *rcu) | ||
1564 | { | ||
1565 | kfree(container_of(rcu, struct ctl_table_header, rcu)); | ||
1566 | } | ||
1567 | |||
1570 | void sysctl_head_put(struct ctl_table_header *head) | 1568 | void sysctl_head_put(struct ctl_table_header *head) |
1571 | { | 1569 | { |
1572 | spin_lock(&sysctl_lock); | 1570 | spin_lock(&sysctl_lock); |
1573 | if (!--head->count) | 1571 | if (!--head->count) |
1574 | kfree(head); | 1572 | call_rcu(&head->rcu, free_head); |
1575 | spin_unlock(&sysctl_lock); | 1573 | spin_unlock(&sysctl_lock); |
1576 | } | 1574 | } |
1577 | 1575 | ||
@@ -1948,10 +1946,10 @@ void unregister_sysctl_table(struct ctl_table_header * header) | |||
1948 | start_unregistering(header); | 1946 | start_unregistering(header); |
1949 | if (!--header->parent->count) { | 1947 | if (!--header->parent->count) { |
1950 | WARN_ON(1); | 1948 | WARN_ON(1); |
1951 | kfree(header->parent); | 1949 | call_rcu(&header->parent->rcu, free_head); |
1952 | } | 1950 | } |
1953 | if (!--header->count) | 1951 | if (!--header->count) |
1954 | kfree(header); | 1952 | call_rcu(&header->rcu, free_head); |
1955 | spin_unlock(&sysctl_lock); | 1953 | spin_unlock(&sysctl_lock); |
1956 | } | 1954 | } |
1957 | 1955 | ||