diff options
author | Jonathan Corbet <corbet@lwn.net> | 2011-04-22 13:19:10 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2011-04-24 07:18:38 -0400 |
commit | 625f2a378e5a10f45fdc37932fc9f8a21676de9e (patch) | |
tree | 1bf966a8e65463cdcc313c559533f032657c9dcf | |
parent | d3bf52e998056a6002b2aecfe1d25486376382ac (diff) |
sched: Get rid of lock_depth
Neil Brown pointed out that lock_depth somehow escaped the BKL
removal work. Let's get rid of it now.
Note that the perf scripting utilities still have a bunch of
code for dealing with common_lock_depth in tracepoints; I have
left that in place in case anybody wants to use that code with
older kernels.
Suggested-by: Neil Brown <neilb@suse.de>
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Link: http://lkml.kernel.org/r/20110422111910.456c0e84@bike.lwn.net
Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r-- | Documentation/trace/kprobetrace.txt | 1 | ||||
-rw-r--r-- | include/linux/init_task.h | 1 | ||||
-rw-r--r-- | include/linux/sched.h | 6 | ||||
-rw-r--r-- | kernel/fork.c | 1 | ||||
-rw-r--r-- | kernel/mutex.c | 7 | ||||
-rw-r--r-- | kernel/sched.c | 11 | ||||
-rw-r--r-- | kernel/sched_debug.c | 4 | ||||
-rw-r--r-- | kernel/trace/trace_kprobe.c | 1 | ||||
-rw-r--r-- | tools/perf/Documentation/perf-script-perl.txt | 1 | ||||
-rw-r--r-- | tools/perf/Documentation/perf-script-python.txt | 1 |
10 files changed, 1 insertions, 33 deletions
diff --git a/Documentation/trace/kprobetrace.txt b/Documentation/trace/kprobetrace.txt index 6d27ab8d6e9f..c83bd6b4e6e8 100644 --- a/Documentation/trace/kprobetrace.txt +++ b/Documentation/trace/kprobetrace.txt | |||
@@ -120,7 +120,6 @@ format: | |||
120 | field:unsigned char common_flags; offset:2; size:1; signed:0; | 120 | field:unsigned char common_flags; offset:2; size:1; signed:0; |
121 | field:unsigned char common_preempt_count; offset:3; size:1;signed:0; | 121 | field:unsigned char common_preempt_count; offset:3; size:1;signed:0; |
122 | field:int common_pid; offset:4; size:4; signed:1; | 122 | field:int common_pid; offset:4; size:4; signed:1; |
123 | field:int common_lock_depth; offset:8; size:4; signed:1; | ||
124 | 123 | ||
125 | field:unsigned long __probe_ip; offset:12; size:4; signed:0; | 124 | field:unsigned long __probe_ip; offset:12; size:4; signed:0; |
126 | field:int __probe_nargs; offset:16; size:4; signed:1; | 125 | field:int __probe_nargs; offset:16; size:4; signed:1; |
diff --git a/include/linux/init_task.h b/include/linux/init_task.h index caa151fbebb7..689496bb6654 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h | |||
@@ -134,7 +134,6 @@ extern struct cred init_cred; | |||
134 | .stack = &init_thread_info, \ | 134 | .stack = &init_thread_info, \ |
135 | .usage = ATOMIC_INIT(2), \ | 135 | .usage = ATOMIC_INIT(2), \ |
136 | .flags = PF_KTHREAD, \ | 136 | .flags = PF_KTHREAD, \ |
137 | .lock_depth = -1, \ | ||
138 | .prio = MAX_PRIO-20, \ | 137 | .prio = MAX_PRIO-20, \ |
139 | .static_prio = MAX_PRIO-20, \ | 138 | .static_prio = MAX_PRIO-20, \ |
140 | .normal_prio = MAX_PRIO-20, \ | 139 | .normal_prio = MAX_PRIO-20, \ |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 171ba24b08a7..013314a56105 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -731,10 +731,6 @@ struct sched_info { | |||
731 | /* timestamps */ | 731 | /* timestamps */ |
732 | unsigned long long last_arrival,/* when we last ran on a cpu */ | 732 | unsigned long long last_arrival,/* when we last ran on a cpu */ |
733 | last_queued; /* when we were last queued to run */ | 733 | last_queued; /* when we were last queued to run */ |
734 | #ifdef CONFIG_SCHEDSTATS | ||
735 | /* BKL stats */ | ||
736 | unsigned int bkl_count; | ||
737 | #endif | ||
738 | }; | 734 | }; |
739 | #endif /* defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) */ | 735 | #endif /* defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) */ |
740 | 736 | ||
@@ -1190,8 +1186,6 @@ struct task_struct { | |||
1190 | unsigned int flags; /* per process flags, defined below */ | 1186 | unsigned int flags; /* per process flags, defined below */ |
1191 | unsigned int ptrace; | 1187 | unsigned int ptrace; |
1192 | 1188 | ||
1193 | int lock_depth; /* BKL lock depth */ | ||
1194 | |||
1195 | #ifdef CONFIG_SMP | 1189 | #ifdef CONFIG_SMP |
1196 | struct task_struct *wake_entry; | 1190 | struct task_struct *wake_entry; |
1197 | int on_cpu; | 1191 | int on_cpu; |
diff --git a/kernel/fork.c b/kernel/fork.c index e7548dee636b..aca62871a4f9 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -1103,7 +1103,6 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
1103 | 1103 | ||
1104 | posix_cpu_timers_init(p); | 1104 | posix_cpu_timers_init(p); |
1105 | 1105 | ||
1106 | p->lock_depth = -1; /* -1 = no lock */ | ||
1107 | do_posix_clock_monotonic_gettime(&p->start_time); | 1106 | do_posix_clock_monotonic_gettime(&p->start_time); |
1108 | p->real_start_time = p->start_time; | 1107 | p->real_start_time = p->start_time; |
1109 | monotonic_to_bootbased(&p->real_start_time); | 1108 | monotonic_to_bootbased(&p->real_start_time); |
diff --git a/kernel/mutex.c b/kernel/mutex.c index fe4706cb0c5b..2c938e2337cd 100644 --- a/kernel/mutex.c +++ b/kernel/mutex.c | |||
@@ -163,13 +163,6 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, | |||
163 | struct task_struct *owner; | 163 | struct task_struct *owner; |
164 | 164 | ||
165 | /* | 165 | /* |
166 | * If we own the BKL, then don't spin. The owner of | ||
167 | * the mutex might be waiting on us to release the BKL. | ||
168 | */ | ||
169 | if (unlikely(current->lock_depth >= 0)) | ||
170 | break; | ||
171 | |||
172 | /* | ||
173 | * If there's an owner, wait for it to either | 166 | * If there's an owner, wait for it to either |
174 | * release the lock or go to sleep. | 167 | * release the lock or go to sleep. |
175 | */ | 168 | */ |
diff --git a/kernel/sched.c b/kernel/sched.c index 8cb0a5769a16..9cde2dd229c9 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -4121,12 +4121,6 @@ static inline void schedule_debug(struct task_struct *prev) | |||
4121 | profile_hit(SCHED_PROFILING, __builtin_return_address(0)); | 4121 | profile_hit(SCHED_PROFILING, __builtin_return_address(0)); |
4122 | 4122 | ||
4123 | schedstat_inc(this_rq(), sched_count); | 4123 | schedstat_inc(this_rq(), sched_count); |
4124 | #ifdef CONFIG_SCHEDSTATS | ||
4125 | if (unlikely(prev->lock_depth >= 0)) { | ||
4126 | schedstat_inc(this_rq(), rq_sched_info.bkl_count); | ||
4127 | schedstat_inc(prev, sched_info.bkl_count); | ||
4128 | } | ||
4129 | #endif | ||
4130 | } | 4124 | } |
4131 | 4125 | ||
4132 | static void put_prev_task(struct rq *rq, struct task_struct *prev) | 4126 | static void put_prev_task(struct rq *rq, struct task_struct *prev) |
@@ -5852,11 +5846,8 @@ void __cpuinit init_idle(struct task_struct *idle, int cpu) | |||
5852 | raw_spin_unlock_irqrestore(&rq->lock, flags); | 5846 | raw_spin_unlock_irqrestore(&rq->lock, flags); |
5853 | 5847 | ||
5854 | /* Set the preempt count _outside_ the spinlocks! */ | 5848 | /* Set the preempt count _outside_ the spinlocks! */ |
5855 | #if defined(CONFIG_PREEMPT) | ||
5856 | task_thread_info(idle)->preempt_count = (idle->lock_depth >= 0); | ||
5857 | #else | ||
5858 | task_thread_info(idle)->preempt_count = 0; | 5849 | task_thread_info(idle)->preempt_count = 0; |
5859 | #endif | 5850 | |
5860 | /* | 5851 | /* |
5861 | * The idle tasks have their own, simple scheduling class: | 5852 | * The idle tasks have their own, simple scheduling class: |
5862 | */ | 5853 | */ |
diff --git a/kernel/sched_debug.c b/kernel/sched_debug.c index 3669bec6e130..a6710a112b4f 100644 --- a/kernel/sched_debug.c +++ b/kernel/sched_debug.c | |||
@@ -296,9 +296,6 @@ static void print_cpu(struct seq_file *m, int cpu) | |||
296 | P(ttwu_count); | 296 | P(ttwu_count); |
297 | P(ttwu_local); | 297 | P(ttwu_local); |
298 | 298 | ||
299 | SEQ_printf(m, " .%-30s: %d\n", "bkl_count", | ||
300 | rq->rq_sched_info.bkl_count); | ||
301 | |||
302 | #undef P | 299 | #undef P |
303 | #undef P64 | 300 | #undef P64 |
304 | #endif | 301 | #endif |
@@ -441,7 +438,6 @@ void proc_sched_show_task(struct task_struct *p, struct seq_file *m) | |||
441 | P(se.statistics.wait_count); | 438 | P(se.statistics.wait_count); |
442 | PN(se.statistics.iowait_sum); | 439 | PN(se.statistics.iowait_sum); |
443 | P(se.statistics.iowait_count); | 440 | P(se.statistics.iowait_count); |
444 | P(sched_info.bkl_count); | ||
445 | P(se.nr_migrations); | 441 | P(se.nr_migrations); |
446 | P(se.statistics.nr_migrations_cold); | 442 | P(se.statistics.nr_migrations_cold); |
447 | P(se.statistics.nr_failed_migrations_affine); | 443 | P(se.statistics.nr_failed_migrations_affine); |
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c index 35d55a386145..f925c45f0afa 100644 --- a/kernel/trace/trace_kprobe.c +++ b/kernel/trace/trace_kprobe.c | |||
@@ -53,7 +53,6 @@ const char *reserved_field_names[] = { | |||
53 | "common_preempt_count", | 53 | "common_preempt_count", |
54 | "common_pid", | 54 | "common_pid", |
55 | "common_tgid", | 55 | "common_tgid", |
56 | "common_lock_depth", | ||
57 | FIELD_STRING_IP, | 56 | FIELD_STRING_IP, |
58 | FIELD_STRING_RETIP, | 57 | FIELD_STRING_RETIP, |
59 | FIELD_STRING_FUNC, | 58 | FIELD_STRING_FUNC, |
diff --git a/tools/perf/Documentation/perf-script-perl.txt b/tools/perf/Documentation/perf-script-perl.txt index 5bb41e55a3ac..3152cca15501 100644 --- a/tools/perf/Documentation/perf-script-perl.txt +++ b/tools/perf/Documentation/perf-script-perl.txt | |||
@@ -63,7 +63,6 @@ The format file for the sched_wakep event defines the following fields | |||
63 | field:unsigned char common_flags; | 63 | field:unsigned char common_flags; |
64 | field:unsigned char common_preempt_count; | 64 | field:unsigned char common_preempt_count; |
65 | field:int common_pid; | 65 | field:int common_pid; |
66 | field:int common_lock_depth; | ||
67 | 66 | ||
68 | field:char comm[TASK_COMM_LEN]; | 67 | field:char comm[TASK_COMM_LEN]; |
69 | field:pid_t pid; | 68 | field:pid_t pid; |
diff --git a/tools/perf/Documentation/perf-script-python.txt b/tools/perf/Documentation/perf-script-python.txt index 36b38277422c..471022069119 100644 --- a/tools/perf/Documentation/perf-script-python.txt +++ b/tools/perf/Documentation/perf-script-python.txt | |||
@@ -463,7 +463,6 @@ The format file for the sched_wakep event defines the following fields | |||
463 | field:unsigned char common_flags; | 463 | field:unsigned char common_flags; |
464 | field:unsigned char common_preempt_count; | 464 | field:unsigned char common_preempt_count; |
465 | field:int common_pid; | 465 | field:int common_pid; |
466 | field:int common_lock_depth; | ||
467 | 466 | ||
468 | field:char comm[TASK_COMM_LEN]; | 467 | field:char comm[TASK_COMM_LEN]; |
469 | field:pid_t pid; | 468 | field:pid_t pid; |