diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/power/swap.c | 2 | ||||
-rw-r--r-- | kernel/ptrace.c | 7 | ||||
-rw-r--r-- | kernel/rcupdate.c | 18 | ||||
-rw-r--r-- | kernel/rcutree.c | 19 | ||||
-rw-r--r-- | kernel/rcutree_trace.c | 14 | ||||
-rw-r--r-- | kernel/sched.c | 10 | ||||
-rw-r--r-- | kernel/softirq.c | 4 | ||||
-rw-r--r-- | kernel/sys.c | 24 | ||||
-rw-r--r-- | kernel/sysctl.c | 20 |
9 files changed, 49 insertions, 69 deletions
diff --git a/kernel/power/swap.c b/kernel/power/swap.c index 505f319e489c..8ba052c86d48 100644 --- a/kernel/power/swap.c +++ b/kernel/power/swap.c | |||
@@ -64,8 +64,6 @@ static int submit(int rw, pgoff_t page_off, struct page *page, | |||
64 | struct bio *bio; | 64 | struct bio *bio; |
65 | 65 | ||
66 | bio = bio_alloc(__GFP_WAIT | __GFP_HIGH, 1); | 66 | bio = bio_alloc(__GFP_WAIT | __GFP_HIGH, 1); |
67 | if (!bio) | ||
68 | return -ENOMEM; | ||
69 | bio->bi_sector = page_off * (PAGE_SIZE >> 9); | 67 | bio->bi_sector = page_off * (PAGE_SIZE >> 9); |
70 | bio->bi_bdev = resume_bdev; | 68 | bio->bi_bdev = resume_bdev; |
71 | bio->bi_end_io = end_swap_bio_read; | 69 | bio->bi_end_io = end_swap_bio_read; |
diff --git a/kernel/ptrace.c b/kernel/ptrace.c index 64191fa09b7e..dfcd83ceee3b 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c | |||
@@ -604,10 +604,11 @@ repeat: | |||
604 | ret = security_ptrace_traceme(current->parent); | 604 | ret = security_ptrace_traceme(current->parent); |
605 | 605 | ||
606 | /* | 606 | /* |
607 | * Set the ptrace bit in the process ptrace flags. | 607 | * Check PF_EXITING to ensure ->real_parent has not passed |
608 | * Then link us on our parent's ptraced list. | 608 | * exit_ptrace(). Otherwise we don't report the error but |
609 | * pretend ->real_parent untraces us right after return. | ||
609 | */ | 610 | */ |
610 | if (!ret) { | 611 | if (!ret && !(current->real_parent->flags & PF_EXITING)) { |
611 | current->ptrace |= PT_PTRACED; | 612 | current->ptrace |= PT_PTRACED; |
612 | __ptrace_link(current, current->real_parent); | 613 | __ptrace_link(current, current->real_parent); |
613 | } | 614 | } |
diff --git a/kernel/rcupdate.c b/kernel/rcupdate.c index 2c7b8457d0d2..a967c9feb90a 100644 --- a/kernel/rcupdate.c +++ b/kernel/rcupdate.c | |||
@@ -58,6 +58,10 @@ static DEFINE_MUTEX(rcu_barrier_mutex); | |||
58 | static struct completion rcu_barrier_completion; | 58 | static struct completion rcu_barrier_completion; |
59 | int rcu_scheduler_active __read_mostly; | 59 | int rcu_scheduler_active __read_mostly; |
60 | 60 | ||
61 | static atomic_t rcu_migrate_type_count = ATOMIC_INIT(0); | ||
62 | static struct rcu_head rcu_migrate_head[3]; | ||
63 | static DECLARE_WAIT_QUEUE_HEAD(rcu_migrate_wq); | ||
64 | |||
61 | /* | 65 | /* |
62 | * Awaken the corresponding synchronize_rcu() instance now that a | 66 | * Awaken the corresponding synchronize_rcu() instance now that a |
63 | * grace period has elapsed. | 67 | * grace period has elapsed. |
@@ -122,7 +126,10 @@ static void rcu_barrier_func(void *type) | |||
122 | } | 126 | } |
123 | } | 127 | } |
124 | 128 | ||
125 | static inline void wait_migrated_callbacks(void); | 129 | static inline void wait_migrated_callbacks(void) |
130 | { | ||
131 | wait_event(rcu_migrate_wq, !atomic_read(&rcu_migrate_type_count)); | ||
132 | } | ||
126 | 133 | ||
127 | /* | 134 | /* |
128 | * Orchestrate the specified type of RCU barrier, waiting for all | 135 | * Orchestrate the specified type of RCU barrier, waiting for all |
@@ -179,21 +186,12 @@ void rcu_barrier_sched(void) | |||
179 | } | 186 | } |
180 | EXPORT_SYMBOL_GPL(rcu_barrier_sched); | 187 | EXPORT_SYMBOL_GPL(rcu_barrier_sched); |
181 | 188 | ||
182 | static atomic_t rcu_migrate_type_count = ATOMIC_INIT(0); | ||
183 | static struct rcu_head rcu_migrate_head[3]; | ||
184 | static DECLARE_WAIT_QUEUE_HEAD(rcu_migrate_wq); | ||
185 | |||
186 | static void rcu_migrate_callback(struct rcu_head *notused) | 189 | static void rcu_migrate_callback(struct rcu_head *notused) |
187 | { | 190 | { |
188 | if (atomic_dec_and_test(&rcu_migrate_type_count)) | 191 | if (atomic_dec_and_test(&rcu_migrate_type_count)) |
189 | wake_up(&rcu_migrate_wq); | 192 | wake_up(&rcu_migrate_wq); |
190 | } | 193 | } |
191 | 194 | ||
192 | static inline void wait_migrated_callbacks(void) | ||
193 | { | ||
194 | wait_event(rcu_migrate_wq, !atomic_read(&rcu_migrate_type_count)); | ||
195 | } | ||
196 | |||
197 | static int __cpuinit rcu_barrier_cpu_hotplug(struct notifier_block *self, | 195 | static int __cpuinit rcu_barrier_cpu_hotplug(struct notifier_block *self, |
198 | unsigned long action, void *hcpu) | 196 | unsigned long action, void *hcpu) |
199 | { | 197 | { |
diff --git a/kernel/rcutree.c b/kernel/rcutree.c index 7f3266922572..d2a372fb0b9b 100644 --- a/kernel/rcutree.c +++ b/kernel/rcutree.c | |||
@@ -530,8 +530,6 @@ static void note_new_gpnum(struct rcu_state *rsp, struct rcu_data *rdp) | |||
530 | rdp->qs_pending = 1; | 530 | rdp->qs_pending = 1; |
531 | rdp->passed_quiesc = 0; | 531 | rdp->passed_quiesc = 0; |
532 | rdp->gpnum = rsp->gpnum; | 532 | rdp->gpnum = rsp->gpnum; |
533 | rdp->n_rcu_pending_force_qs = rdp->n_rcu_pending + | ||
534 | RCU_JIFFIES_TILL_FORCE_QS; | ||
535 | } | 533 | } |
536 | 534 | ||
537 | /* | 535 | /* |
@@ -578,8 +576,6 @@ rcu_start_gp(struct rcu_state *rsp, unsigned long flags) | |||
578 | rsp->gpnum++; | 576 | rsp->gpnum++; |
579 | rsp->signaled = RCU_GP_INIT; /* Hold off force_quiescent_state. */ | 577 | rsp->signaled = RCU_GP_INIT; /* Hold off force_quiescent_state. */ |
580 | rsp->jiffies_force_qs = jiffies + RCU_JIFFIES_TILL_FORCE_QS; | 578 | rsp->jiffies_force_qs = jiffies + RCU_JIFFIES_TILL_FORCE_QS; |
581 | rdp->n_rcu_pending_force_qs = rdp->n_rcu_pending + | ||
582 | RCU_JIFFIES_TILL_FORCE_QS; | ||
583 | record_gp_stall_check_time(rsp); | 579 | record_gp_stall_check_time(rsp); |
584 | dyntick_record_completed(rsp, rsp->completed - 1); | 580 | dyntick_record_completed(rsp, rsp->completed - 1); |
585 | note_new_gpnum(rsp, rdp); | 581 | note_new_gpnum(rsp, rdp); |
@@ -1055,7 +1051,6 @@ static void force_quiescent_state(struct rcu_state *rsp, int relaxed) | |||
1055 | { | 1051 | { |
1056 | unsigned long flags; | 1052 | unsigned long flags; |
1057 | long lastcomp; | 1053 | long lastcomp; |
1058 | struct rcu_data *rdp = rsp->rda[smp_processor_id()]; | ||
1059 | struct rcu_node *rnp = rcu_get_root(rsp); | 1054 | struct rcu_node *rnp = rcu_get_root(rsp); |
1060 | u8 signaled; | 1055 | u8 signaled; |
1061 | 1056 | ||
@@ -1066,16 +1061,13 @@ static void force_quiescent_state(struct rcu_state *rsp, int relaxed) | |||
1066 | return; /* Someone else is already on the job. */ | 1061 | return; /* Someone else is already on the job. */ |
1067 | } | 1062 | } |
1068 | if (relaxed && | 1063 | if (relaxed && |
1069 | (long)(rsp->jiffies_force_qs - jiffies) >= 0 && | 1064 | (long)(rsp->jiffies_force_qs - jiffies) >= 0) |
1070 | (rdp->n_rcu_pending_force_qs - rdp->n_rcu_pending) >= 0) | ||
1071 | goto unlock_ret; /* no emergency and done recently. */ | 1065 | goto unlock_ret; /* no emergency and done recently. */ |
1072 | rsp->n_force_qs++; | 1066 | rsp->n_force_qs++; |
1073 | spin_lock(&rnp->lock); | 1067 | spin_lock(&rnp->lock); |
1074 | lastcomp = rsp->completed; | 1068 | lastcomp = rsp->completed; |
1075 | signaled = rsp->signaled; | 1069 | signaled = rsp->signaled; |
1076 | rsp->jiffies_force_qs = jiffies + RCU_JIFFIES_TILL_FORCE_QS; | 1070 | rsp->jiffies_force_qs = jiffies + RCU_JIFFIES_TILL_FORCE_QS; |
1077 | rdp->n_rcu_pending_force_qs = rdp->n_rcu_pending + | ||
1078 | RCU_JIFFIES_TILL_FORCE_QS; | ||
1079 | if (lastcomp == rsp->gpnum) { | 1071 | if (lastcomp == rsp->gpnum) { |
1080 | rsp->n_force_qs_ngp++; | 1072 | rsp->n_force_qs_ngp++; |
1081 | spin_unlock(&rnp->lock); | 1073 | spin_unlock(&rnp->lock); |
@@ -1144,8 +1136,7 @@ __rcu_process_callbacks(struct rcu_state *rsp, struct rcu_data *rdp) | |||
1144 | * If an RCU GP has gone long enough, go check for dyntick | 1136 | * If an RCU GP has gone long enough, go check for dyntick |
1145 | * idle CPUs and, if needed, send resched IPIs. | 1137 | * idle CPUs and, if needed, send resched IPIs. |
1146 | */ | 1138 | */ |
1147 | if ((long)(ACCESS_ONCE(rsp->jiffies_force_qs) - jiffies) < 0 || | 1139 | if ((long)(ACCESS_ONCE(rsp->jiffies_force_qs) - jiffies) < 0) |
1148 | (rdp->n_rcu_pending_force_qs - rdp->n_rcu_pending) < 0) | ||
1149 | force_quiescent_state(rsp, 1); | 1140 | force_quiescent_state(rsp, 1); |
1150 | 1141 | ||
1151 | /* | 1142 | /* |
@@ -1230,8 +1221,7 @@ __call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu), | |||
1230 | if (unlikely(++rdp->qlen > qhimark)) { | 1221 | if (unlikely(++rdp->qlen > qhimark)) { |
1231 | rdp->blimit = LONG_MAX; | 1222 | rdp->blimit = LONG_MAX; |
1232 | force_quiescent_state(rsp, 0); | 1223 | force_quiescent_state(rsp, 0); |
1233 | } else if ((long)(ACCESS_ONCE(rsp->jiffies_force_qs) - jiffies) < 0 || | 1224 | } else if ((long)(ACCESS_ONCE(rsp->jiffies_force_qs) - jiffies) < 0) |
1234 | (rdp->n_rcu_pending_force_qs - rdp->n_rcu_pending) < 0) | ||
1235 | force_quiescent_state(rsp, 1); | 1225 | force_quiescent_state(rsp, 1); |
1236 | local_irq_restore(flags); | 1226 | local_irq_restore(flags); |
1237 | } | 1227 | } |
@@ -1290,8 +1280,7 @@ static int __rcu_pending(struct rcu_state *rsp, struct rcu_data *rdp) | |||
1290 | 1280 | ||
1291 | /* Has an RCU GP gone long enough to send resched IPIs &c? */ | 1281 | /* Has an RCU GP gone long enough to send resched IPIs &c? */ |
1292 | if (ACCESS_ONCE(rsp->completed) != ACCESS_ONCE(rsp->gpnum) && | 1282 | if (ACCESS_ONCE(rsp->completed) != ACCESS_ONCE(rsp->gpnum) && |
1293 | ((long)(ACCESS_ONCE(rsp->jiffies_force_qs) - jiffies) < 0 || | 1283 | ((long)(ACCESS_ONCE(rsp->jiffies_force_qs) - jiffies) < 0)) |
1294 | (rdp->n_rcu_pending_force_qs - rdp->n_rcu_pending) < 0)) | ||
1295 | return 1; | 1284 | return 1; |
1296 | 1285 | ||
1297 | /* nothing to do */ | 1286 | /* nothing to do */ |
diff --git a/kernel/rcutree_trace.c b/kernel/rcutree_trace.c index 4ee954f6a8d5..4b1875ba9404 100644 --- a/kernel/rcutree_trace.c +++ b/kernel/rcutree_trace.c | |||
@@ -49,14 +49,12 @@ static void print_one_rcu_data(struct seq_file *m, struct rcu_data *rdp) | |||
49 | { | 49 | { |
50 | if (!rdp->beenonline) | 50 | if (!rdp->beenonline) |
51 | return; | 51 | return; |
52 | seq_printf(m, "%3d%cc=%ld g=%ld pq=%d pqc=%ld qp=%d rpfq=%ld rp=%x", | 52 | seq_printf(m, "%3d%cc=%ld g=%ld pq=%d pqc=%ld qp=%d", |
53 | rdp->cpu, | 53 | rdp->cpu, |
54 | cpu_is_offline(rdp->cpu) ? '!' : ' ', | 54 | cpu_is_offline(rdp->cpu) ? '!' : ' ', |
55 | rdp->completed, rdp->gpnum, | 55 | rdp->completed, rdp->gpnum, |
56 | rdp->passed_quiesc, rdp->passed_quiesc_completed, | 56 | rdp->passed_quiesc, rdp->passed_quiesc_completed, |
57 | rdp->qs_pending, | 57 | rdp->qs_pending); |
58 | rdp->n_rcu_pending_force_qs - rdp->n_rcu_pending, | ||
59 | (int)(rdp->n_rcu_pending & 0xffff)); | ||
60 | #ifdef CONFIG_NO_HZ | 58 | #ifdef CONFIG_NO_HZ |
61 | seq_printf(m, " dt=%d/%d dn=%d df=%lu", | 59 | seq_printf(m, " dt=%d/%d dn=%d df=%lu", |
62 | rdp->dynticks->dynticks, | 60 | rdp->dynticks->dynticks, |
@@ -102,14 +100,12 @@ static void print_one_rcu_data_csv(struct seq_file *m, struct rcu_data *rdp) | |||
102 | { | 100 | { |
103 | if (!rdp->beenonline) | 101 | if (!rdp->beenonline) |
104 | return; | 102 | return; |
105 | seq_printf(m, "%d,%s,%ld,%ld,%d,%ld,%d,%ld,%ld", | 103 | seq_printf(m, "%d,%s,%ld,%ld,%d,%ld,%d", |
106 | rdp->cpu, | 104 | rdp->cpu, |
107 | cpu_is_offline(rdp->cpu) ? "\"Y\"" : "\"N\"", | 105 | cpu_is_offline(rdp->cpu) ? "\"Y\"" : "\"N\"", |
108 | rdp->completed, rdp->gpnum, | 106 | rdp->completed, rdp->gpnum, |
109 | rdp->passed_quiesc, rdp->passed_quiesc_completed, | 107 | rdp->passed_quiesc, rdp->passed_quiesc_completed, |
110 | rdp->qs_pending, | 108 | rdp->qs_pending); |
111 | rdp->n_rcu_pending_force_qs - rdp->n_rcu_pending, | ||
112 | rdp->n_rcu_pending); | ||
113 | #ifdef CONFIG_NO_HZ | 109 | #ifdef CONFIG_NO_HZ |
114 | seq_printf(m, ",%d,%d,%d,%lu", | 110 | seq_printf(m, ",%d,%d,%d,%lu", |
115 | rdp->dynticks->dynticks, | 111 | rdp->dynticks->dynticks, |
@@ -123,7 +119,7 @@ static void print_one_rcu_data_csv(struct seq_file *m, struct rcu_data *rdp) | |||
123 | 119 | ||
124 | static int show_rcudata_csv(struct seq_file *m, void *unused) | 120 | static int show_rcudata_csv(struct seq_file *m, void *unused) |
125 | { | 121 | { |
126 | seq_puts(m, "\"CPU\",\"Online?\",\"c\",\"g\",\"pq\",\"pqc\",\"pq\",\"rpfq\",\"rp\","); | 122 | seq_puts(m, "\"CPU\",\"Online?\",\"c\",\"g\",\"pq\",\"pqc\",\"pq\","); |
127 | #ifdef CONFIG_NO_HZ | 123 | #ifdef CONFIG_NO_HZ |
128 | seq_puts(m, "\"dt\",\"dt nesting\",\"dn\",\"df\","); | 124 | seq_puts(m, "\"dt\",\"dt nesting\",\"dn\",\"df\","); |
129 | #endif /* #ifdef CONFIG_NO_HZ */ | 125 | #endif /* #ifdef CONFIG_NO_HZ */ |
diff --git a/kernel/sched.c b/kernel/sched.c index 5724508c3b66..b902e587a3a0 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -4846,7 +4846,7 @@ void scheduler_tick(void) | |||
4846 | #endif | 4846 | #endif |
4847 | } | 4847 | } |
4848 | 4848 | ||
4849 | unsigned long get_parent_ip(unsigned long addr) | 4849 | notrace unsigned long get_parent_ip(unsigned long addr) |
4850 | { | 4850 | { |
4851 | if (in_lock_functions(addr)) { | 4851 | if (in_lock_functions(addr)) { |
4852 | addr = CALLER_ADDR2; | 4852 | addr = CALLER_ADDR2; |
@@ -7367,8 +7367,12 @@ static int sched_domain_debug_one(struct sched_domain *sd, int cpu, int level, | |||
7367 | cpumask_or(groupmask, groupmask, sched_group_cpus(group)); | 7367 | cpumask_or(groupmask, groupmask, sched_group_cpus(group)); |
7368 | 7368 | ||
7369 | cpulist_scnprintf(str, sizeof(str), sched_group_cpus(group)); | 7369 | cpulist_scnprintf(str, sizeof(str), sched_group_cpus(group)); |
7370 | printk(KERN_CONT " %s (__cpu_power = %d)", str, | 7370 | |
7371 | group->__cpu_power); | 7371 | printk(KERN_CONT " %s", str); |
7372 | if (group->__cpu_power != SCHED_LOAD_SCALE) { | ||
7373 | printk(KERN_CONT " (__cpu_power = %d)", | ||
7374 | group->__cpu_power); | ||
7375 | } | ||
7372 | 7376 | ||
7373 | group = group->next; | 7377 | group = group->next; |
7374 | } while (group != sd->groups); | 7378 | } while (group != sd->groups); |
diff --git a/kernel/softirq.c b/kernel/softirq.c index 2fecefacdc5b..b525dd348511 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c | |||
@@ -472,9 +472,9 @@ void tasklet_kill(struct tasklet_struct *t) | |||
472 | printk("Attempt to kill tasklet from interrupt\n"); | 472 | printk("Attempt to kill tasklet from interrupt\n"); |
473 | 473 | ||
474 | while (test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) { | 474 | while (test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) { |
475 | do | 475 | do { |
476 | yield(); | 476 | yield(); |
477 | while (test_bit(TASKLET_STATE_SCHED, &t->state)); | 477 | } while (test_bit(TASKLET_STATE_SCHED, &t->state)); |
478 | } | 478 | } |
479 | tasklet_unlock_wait(t); | 479 | tasklet_unlock_wait(t); |
480 | clear_bit(TASKLET_STATE_SCHED, &t->state); | 480 | clear_bit(TASKLET_STATE_SCHED, &t->state); |
diff --git a/kernel/sys.c b/kernel/sys.c index 51dbb55604e8..e7998cf31498 100644 --- a/kernel/sys.c +++ b/kernel/sys.c | |||
@@ -360,6 +360,7 @@ SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, | |||
360 | void __user *, arg) | 360 | void __user *, arg) |
361 | { | 361 | { |
362 | char buffer[256]; | 362 | char buffer[256]; |
363 | int ret = 0; | ||
363 | 364 | ||
364 | /* We only trust the superuser with rebooting the system. */ | 365 | /* We only trust the superuser with rebooting the system. */ |
365 | if (!capable(CAP_SYS_BOOT)) | 366 | if (!capable(CAP_SYS_BOOT)) |
@@ -397,7 +398,7 @@ SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, | |||
397 | kernel_halt(); | 398 | kernel_halt(); |
398 | unlock_kernel(); | 399 | unlock_kernel(); |
399 | do_exit(0); | 400 | do_exit(0); |
400 | break; | 401 | panic("cannot halt"); |
401 | 402 | ||
402 | case LINUX_REBOOT_CMD_POWER_OFF: | 403 | case LINUX_REBOOT_CMD_POWER_OFF: |
403 | kernel_power_off(); | 404 | kernel_power_off(); |
@@ -417,29 +418,22 @@ SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, | |||
417 | 418 | ||
418 | #ifdef CONFIG_KEXEC | 419 | #ifdef CONFIG_KEXEC |
419 | case LINUX_REBOOT_CMD_KEXEC: | 420 | case LINUX_REBOOT_CMD_KEXEC: |
420 | { | 421 | ret = kernel_kexec(); |
421 | int ret; | 422 | break; |
422 | ret = kernel_kexec(); | ||
423 | unlock_kernel(); | ||
424 | return ret; | ||
425 | } | ||
426 | #endif | 423 | #endif |
427 | 424 | ||
428 | #ifdef CONFIG_HIBERNATION | 425 | #ifdef CONFIG_HIBERNATION |
429 | case LINUX_REBOOT_CMD_SW_SUSPEND: | 426 | case LINUX_REBOOT_CMD_SW_SUSPEND: |
430 | { | 427 | ret = hibernate(); |
431 | int ret = hibernate(); | 428 | break; |
432 | unlock_kernel(); | ||
433 | return ret; | ||
434 | } | ||
435 | #endif | 429 | #endif |
436 | 430 | ||
437 | default: | 431 | default: |
438 | unlock_kernel(); | 432 | ret = -EINVAL; |
439 | return -EINVAL; | 433 | break; |
440 | } | 434 | } |
441 | unlock_kernel(); | 435 | unlock_kernel(); |
442 | return 0; | 436 | return ret; |
443 | } | 437 | } |
444 | 438 | ||
445 | static void deferred_cad(struct work_struct *dummy) | 439 | static void deferred_cad(struct work_struct *dummy) |
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 4286b62b34a0..e3d2c7dd59b9 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c | |||
@@ -902,16 +902,6 @@ static struct ctl_table kern_table[] = { | |||
902 | .proc_handler = &proc_dointvec, | 902 | .proc_handler = &proc_dointvec, |
903 | }, | 903 | }, |
904 | #endif | 904 | #endif |
905 | #ifdef CONFIG_UNEVICTABLE_LRU | ||
906 | { | ||
907 | .ctl_name = CTL_UNNUMBERED, | ||
908 | .procname = "scan_unevictable_pages", | ||
909 | .data = &scan_unevictable_pages, | ||
910 | .maxlen = sizeof(scan_unevictable_pages), | ||
911 | .mode = 0644, | ||
912 | .proc_handler = &scan_unevictable_handler, | ||
913 | }, | ||
914 | #endif | ||
915 | #ifdef CONFIG_SLOW_WORK | 905 | #ifdef CONFIG_SLOW_WORK |
916 | { | 906 | { |
917 | .ctl_name = CTL_UNNUMBERED, | 907 | .ctl_name = CTL_UNNUMBERED, |
@@ -1302,6 +1292,16 @@ static struct ctl_table vm_table[] = { | |||
1302 | .extra2 = &one, | 1292 | .extra2 = &one, |
1303 | }, | 1293 | }, |
1304 | #endif | 1294 | #endif |
1295 | #ifdef CONFIG_UNEVICTABLE_LRU | ||
1296 | { | ||
1297 | .ctl_name = CTL_UNNUMBERED, | ||
1298 | .procname = "scan_unevictable_pages", | ||
1299 | .data = &scan_unevictable_pages, | ||
1300 | .maxlen = sizeof(scan_unevictable_pages), | ||
1301 | .mode = 0644, | ||
1302 | .proc_handler = &scan_unevictable_handler, | ||
1303 | }, | ||
1304 | #endif | ||
1305 | /* | 1305 | /* |
1306 | * NOTE: do not add new entries to this table unless you have read | 1306 | * NOTE: do not add new entries to this table unless you have read |
1307 | * Documentation/sysctl/ctl_unnumbered.txt | 1307 | * Documentation/sysctl/ctl_unnumbered.txt |