aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2013-01-21 01:47:39 -0500
committerRusty Russell <rusty@rustcorp.com.au>2013-01-21 01:47:57 -0500
commit373d4d099761cb1f637bed488ab3871945882273 (patch)
tree954bef7bc724aee105dd246d5f2b1ea04ed38b20 /arch
parent64748a2c9062da0c32b59c1b368a86fc4613b1e1 (diff)
taint: add explicit flag to show whether lock dep is still OK.
Fix up all callers as they were before, with make one change: an unsigned module taints the kernel, but doesn't turn off lockdep. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'arch')
-rw-r--r--arch/alpha/kernel/traps.c2
-rw-r--r--arch/arm/kernel/traps.c2
-rw-r--r--arch/arm64/kernel/traps.c2
-rw-r--r--arch/avr32/kernel/traps.c2
-rw-r--r--arch/hexagon/kernel/traps.c2
-rw-r--r--arch/ia64/kernel/traps.c2
-rw-r--r--arch/m68k/kernel/traps.c2
-rw-r--r--arch/mips/kernel/traps.c2
-rw-r--r--arch/parisc/kernel/traps.c2
-rw-r--r--arch/powerpc/kernel/traps.c2
-rw-r--r--arch/s390/kernel/traps.c2
-rw-r--r--arch/sh/kernel/traps.c2
-rw-r--r--arch/sparc/kernel/setup_64.c2
-rw-r--r--arch/sparc/kernel/traps_32.c2
-rw-r--r--arch/sparc/kernel/traps_64.c2
-rw-r--r--arch/unicore32/kernel/traps.c2
-rw-r--r--arch/x86/kernel/cpu/amd.c3
-rw-r--r--arch/x86/kernel/cpu/mcheck/mce.c2
-rw-r--r--arch/x86/kernel/cpu/mcheck/p5.c2
-rw-r--r--arch/x86/kernel/cpu/mcheck/winchip.c2
-rw-r--r--arch/x86/kernel/cpu/mtrr/generic.c2
-rw-r--r--arch/x86/kernel/dumpstack.c2
-rw-r--r--arch/xtensa/kernel/traps.c2
23 files changed, 23 insertions, 24 deletions
diff --git a/arch/alpha/kernel/traps.c b/arch/alpha/kernel/traps.c
index 272666d006df..4037461a6493 100644
--- a/arch/alpha/kernel/traps.c
+++ b/arch/alpha/kernel/traps.c
@@ -186,7 +186,7 @@ die_if_kernel(char * str, struct pt_regs *regs, long err, unsigned long *r9_15)
186#endif 186#endif
187 printk("%s(%d): %s %ld\n", current->comm, task_pid_nr(current), str, err); 187 printk("%s(%d): %s %ld\n", current->comm, task_pid_nr(current), str, err);
188 dik_show_regs(regs, r9_15); 188 dik_show_regs(regs, r9_15);
189 add_taint(TAINT_DIE); 189 add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
190 dik_show_trace((unsigned long *)(regs+1)); 190 dik_show_trace((unsigned long *)(regs+1));
191 dik_show_code((unsigned int *)regs->pc); 191 dik_show_code((unsigned int *)regs->pc);
192 192
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
index b0179b89a04c..1c089119b2d7 100644
--- a/arch/arm/kernel/traps.c
+++ b/arch/arm/kernel/traps.c
@@ -296,7 +296,7 @@ static void oops_end(unsigned long flags, struct pt_regs *regs, int signr)
296 296
297 bust_spinlocks(0); 297 bust_spinlocks(0);
298 die_owner = -1; 298 die_owner = -1;
299 add_taint(TAINT_DIE); 299 add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
300 die_nest_count--; 300 die_nest_count--;
301 if (!die_nest_count) 301 if (!die_nest_count)
302 /* Nest count reaches zero, release the lock. */ 302 /* Nest count reaches zero, release the lock. */
diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c
index 3883f842434f..b3c5f628bdb4 100644
--- a/arch/arm64/kernel/traps.c
+++ b/arch/arm64/kernel/traps.c
@@ -242,7 +242,7 @@ void die(const char *str, struct pt_regs *regs, int err)
242 crash_kexec(regs); 242 crash_kexec(regs);
243 243
244 bust_spinlocks(0); 244 bust_spinlocks(0);
245 add_taint(TAINT_DIE); 245 add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
246 raw_spin_unlock_irq(&die_lock); 246 raw_spin_unlock_irq(&die_lock);
247 oops_exit(); 247 oops_exit();
248 248
diff --git a/arch/avr32/kernel/traps.c b/arch/avr32/kernel/traps.c
index 3d760c06f024..682b2478691a 100644
--- a/arch/avr32/kernel/traps.c
+++ b/arch/avr32/kernel/traps.c
@@ -61,7 +61,7 @@ void die(const char *str, struct pt_regs *regs, long err)
61 show_regs_log_lvl(regs, KERN_EMERG); 61 show_regs_log_lvl(regs, KERN_EMERG);
62 show_stack_log_lvl(current, regs->sp, regs, KERN_EMERG); 62 show_stack_log_lvl(current, regs->sp, regs, KERN_EMERG);
63 bust_spinlocks(0); 63 bust_spinlocks(0);
64 add_taint(TAINT_DIE); 64 add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
65 spin_unlock_irq(&die_lock); 65 spin_unlock_irq(&die_lock);
66 66
67 if (in_interrupt()) 67 if (in_interrupt())
diff --git a/arch/hexagon/kernel/traps.c b/arch/hexagon/kernel/traps.c
index a41eeb8eeaa1..be5e2dd9c9d3 100644
--- a/arch/hexagon/kernel/traps.c
+++ b/arch/hexagon/kernel/traps.c
@@ -225,7 +225,7 @@ int die(const char *str, struct pt_regs *regs, long err)
225 do_show_stack(current, &regs->r30, pt_elr(regs)); 225 do_show_stack(current, &regs->r30, pt_elr(regs));
226 226
227 bust_spinlocks(0); 227 bust_spinlocks(0);
228 add_taint(TAINT_DIE); 228 add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
229 229
230 spin_unlock_irq(&die.lock); 230 spin_unlock_irq(&die.lock);
231 231
diff --git a/arch/ia64/kernel/traps.c b/arch/ia64/kernel/traps.c
index bd42b76000d1..f7f9f9c6caf0 100644
--- a/arch/ia64/kernel/traps.c
+++ b/arch/ia64/kernel/traps.c
@@ -72,7 +72,7 @@ die (const char *str, struct pt_regs *regs, long err)
72 72
73 bust_spinlocks(0); 73 bust_spinlocks(0);
74 die.lock_owner = -1; 74 die.lock_owner = -1;
75 add_taint(TAINT_DIE); 75 add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
76 spin_unlock_irq(&die.lock); 76 spin_unlock_irq(&die.lock);
77 77
78 if (!regs) 78 if (!regs)
diff --git a/arch/m68k/kernel/traps.c b/arch/m68k/kernel/traps.c
index cbc624af4494..f32ab22e7ed3 100644
--- a/arch/m68k/kernel/traps.c
+++ b/arch/m68k/kernel/traps.c
@@ -1176,7 +1176,7 @@ void die_if_kernel (char *str, struct pt_regs *fp, int nr)
1176 console_verbose(); 1176 console_verbose();
1177 printk("%s: %08x\n",str,nr); 1177 printk("%s: %08x\n",str,nr);
1178 show_registers(fp); 1178 show_registers(fp);
1179 add_taint(TAINT_DIE); 1179 add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
1180 do_exit(SIGSEGV); 1180 do_exit(SIGSEGV);
1181} 1181}
1182 1182
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
index cf7ac5483f53..9007966d56d4 100644
--- a/arch/mips/kernel/traps.c
+++ b/arch/mips/kernel/traps.c
@@ -396,7 +396,7 @@ void __noreturn die(const char *str, struct pt_regs *regs)
396 396
397 printk("%s[#%d]:\n", str, ++die_counter); 397 printk("%s[#%d]:\n", str, ++die_counter);
398 show_registers(regs); 398 show_registers(regs);
399 add_taint(TAINT_DIE); 399 add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
400 raw_spin_unlock_irq(&die_lock); 400 raw_spin_unlock_irq(&die_lock);
401 401
402 oops_exit(); 402 oops_exit();
diff --git a/arch/parisc/kernel/traps.c b/arch/parisc/kernel/traps.c
index 45ba99f5080b..aeb8f8f2c07a 100644
--- a/arch/parisc/kernel/traps.c
+++ b/arch/parisc/kernel/traps.c
@@ -282,7 +282,7 @@ void die_if_kernel(char *str, struct pt_regs *regs, long err)
282 282
283 show_regs(regs); 283 show_regs(regs);
284 dump_stack(); 284 dump_stack();
285 add_taint(TAINT_DIE); 285 add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
286 286
287 if (in_interrupt()) 287 if (in_interrupt())
288 panic("Fatal exception in interrupt"); 288 panic("Fatal exception in interrupt");
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
index 32518401af68..c579db859388 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -138,7 +138,7 @@ static void __kprobes oops_end(unsigned long flags, struct pt_regs *regs,
138{ 138{
139 bust_spinlocks(0); 139 bust_spinlocks(0);
140 die_owner = -1; 140 die_owner = -1;
141 add_taint(TAINT_DIE); 141 add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
142 die_nest_count--; 142 die_nest_count--;
143 oops_exit(); 143 oops_exit();
144 printk("\n"); 144 printk("\n");
diff --git a/arch/s390/kernel/traps.c b/arch/s390/kernel/traps.c
index 70ecfc5fe8f0..13dd63fba367 100644
--- a/arch/s390/kernel/traps.c
+++ b/arch/s390/kernel/traps.c
@@ -271,7 +271,7 @@ void die(struct pt_regs *regs, const char *str)
271 print_modules(); 271 print_modules();
272 show_regs(regs); 272 show_regs(regs);
273 bust_spinlocks(0); 273 bust_spinlocks(0);
274 add_taint(TAINT_DIE); 274 add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
275 spin_unlock_irq(&die_lock); 275 spin_unlock_irq(&die_lock);
276 if (in_interrupt()) 276 if (in_interrupt())
277 panic("Fatal exception in interrupt"); 277 panic("Fatal exception in interrupt");
diff --git a/arch/sh/kernel/traps.c b/arch/sh/kernel/traps.c
index 72246bc06884..dfdad72c61ca 100644
--- a/arch/sh/kernel/traps.c
+++ b/arch/sh/kernel/traps.c
@@ -38,7 +38,7 @@ void die(const char *str, struct pt_regs *regs, long err)
38 notify_die(DIE_OOPS, str, regs, err, 255, SIGSEGV); 38 notify_die(DIE_OOPS, str, regs, err, 255, SIGSEGV);
39 39
40 bust_spinlocks(0); 40 bust_spinlocks(0);
41 add_taint(TAINT_DIE); 41 add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
42 spin_unlock_irq(&die_lock); 42 spin_unlock_irq(&die_lock);
43 oops_exit(); 43 oops_exit();
44 44
diff --git a/arch/sparc/kernel/setup_64.c b/arch/sparc/kernel/setup_64.c
index 0eaf0059aaef..88a127b9c69e 100644
--- a/arch/sparc/kernel/setup_64.c
+++ b/arch/sparc/kernel/setup_64.c
@@ -115,7 +115,7 @@ static void __init process_switch(char c)
115 break; 115 break;
116 } 116 }
117 cheetah_pcache_forced_on = 1; 117 cheetah_pcache_forced_on = 1;
118 add_taint(TAINT_MACHINE_CHECK); 118 add_taint(TAINT_MACHINE_CHECK, LOCKDEP_NOW_UNRELIABLE);
119 cheetah_enable_pcache(); 119 cheetah_enable_pcache();
120 break; 120 break;
121 121
diff --git a/arch/sparc/kernel/traps_32.c b/arch/sparc/kernel/traps_32.c
index a5785ea2a85d..662982946a89 100644
--- a/arch/sparc/kernel/traps_32.c
+++ b/arch/sparc/kernel/traps_32.c
@@ -58,7 +58,7 @@ void die_if_kernel(char *str, struct pt_regs *regs)
58 58
59 printk("%s(%d): %s [#%d]\n", current->comm, task_pid_nr(current), str, ++die_counter); 59 printk("%s(%d): %s [#%d]\n", current->comm, task_pid_nr(current), str, ++die_counter);
60 show_regs(regs); 60 show_regs(regs);
61 add_taint(TAINT_DIE); 61 add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
62 62
63 __SAVE; __SAVE; __SAVE; __SAVE; 63 __SAVE; __SAVE; __SAVE; __SAVE;
64 __SAVE; __SAVE; __SAVE; __SAVE; 64 __SAVE; __SAVE; __SAVE; __SAVE;
diff --git a/arch/sparc/kernel/traps_64.c b/arch/sparc/kernel/traps_64.c
index e7ecf1507d90..8d38ca97aa23 100644
--- a/arch/sparc/kernel/traps_64.c
+++ b/arch/sparc/kernel/traps_64.c
@@ -2383,7 +2383,7 @@ void die_if_kernel(char *str, struct pt_regs *regs)
2383 notify_die(DIE_OOPS, str, regs, 0, 255, SIGSEGV); 2383 notify_die(DIE_OOPS, str, regs, 0, 255, SIGSEGV);
2384 __asm__ __volatile__("flushw"); 2384 __asm__ __volatile__("flushw");
2385 show_regs(regs); 2385 show_regs(regs);
2386 add_taint(TAINT_DIE); 2386 add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
2387 if (regs->tstate & TSTATE_PRIV) { 2387 if (regs->tstate & TSTATE_PRIV) {
2388 struct thread_info *tp = current_thread_info(); 2388 struct thread_info *tp = current_thread_info();
2389 struct reg_window *rw = (struct reg_window *) 2389 struct reg_window *rw = (struct reg_window *)
diff --git a/arch/unicore32/kernel/traps.c b/arch/unicore32/kernel/traps.c
index 2054f0d4db13..0870b68d2ad9 100644
--- a/arch/unicore32/kernel/traps.c
+++ b/arch/unicore32/kernel/traps.c
@@ -231,7 +231,7 @@ void die(const char *str, struct pt_regs *regs, int err)
231 ret = __die(str, err, thread, regs); 231 ret = __die(str, err, thread, regs);
232 232
233 bust_spinlocks(0); 233 bust_spinlocks(0);
234 add_taint(TAINT_DIE); 234 add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
235 spin_unlock_irq(&die_lock); 235 spin_unlock_irq(&die_lock);
236 oops_exit(); 236 oops_exit();
237 237
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
index 15239fffd6fe..5853e57523e5 100644
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -220,8 +220,7 @@ static void __cpuinit amd_k7_smp_check(struct cpuinfo_x86 *c)
220 */ 220 */
221 WARN_ONCE(1, "WARNING: This combination of AMD" 221 WARN_ONCE(1, "WARNING: This combination of AMD"
222 " processors is not suitable for SMP.\n"); 222 " processors is not suitable for SMP.\n");
223 if (!test_taint(TAINT_UNSAFE_SMP)) 223 add_taint(TAINT_UNSAFE_SMP, LOCKDEP_NOW_UNRELIABLE);
224 add_taint(TAINT_UNSAFE_SMP);
225 224
226valid_k7: 225valid_k7:
227 ; 226 ;
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
index 80dbda84f1c3..6bc15edbc8cd 100644
--- a/arch/x86/kernel/cpu/mcheck/mce.c
+++ b/arch/x86/kernel/cpu/mcheck/mce.c
@@ -1085,7 +1085,7 @@ void do_machine_check(struct pt_regs *regs, long error_code)
1085 /* 1085 /*
1086 * Set taint even when machine check was not enabled. 1086 * Set taint even when machine check was not enabled.
1087 */ 1087 */
1088 add_taint(TAINT_MACHINE_CHECK); 1088 add_taint(TAINT_MACHINE_CHECK, LOCKDEP_NOW_UNRELIABLE);
1089 1089
1090 severity = mce_severity(&m, cfg->tolerant, NULL); 1090 severity = mce_severity(&m, cfg->tolerant, NULL);
1091 1091
diff --git a/arch/x86/kernel/cpu/mcheck/p5.c b/arch/x86/kernel/cpu/mcheck/p5.c
index 2d5454cd2c4f..1c044b1ccc59 100644
--- a/arch/x86/kernel/cpu/mcheck/p5.c
+++ b/arch/x86/kernel/cpu/mcheck/p5.c
@@ -33,7 +33,7 @@ static void pentium_machine_check(struct pt_regs *regs, long error_code)
33 smp_processor_id()); 33 smp_processor_id());
34 } 34 }
35 35
36 add_taint(TAINT_MACHINE_CHECK); 36 add_taint(TAINT_MACHINE_CHECK, LOCKDEP_NOW_UNRELIABLE);
37} 37}
38 38
39/* Set up machine check reporting for processors with Intel style MCE: */ 39/* Set up machine check reporting for processors with Intel style MCE: */
diff --git a/arch/x86/kernel/cpu/mcheck/winchip.c b/arch/x86/kernel/cpu/mcheck/winchip.c
index 2d7998fb628c..e9a701aecaa1 100644
--- a/arch/x86/kernel/cpu/mcheck/winchip.c
+++ b/arch/x86/kernel/cpu/mcheck/winchip.c
@@ -15,7 +15,7 @@
15static void winchip_machine_check(struct pt_regs *regs, long error_code) 15static void winchip_machine_check(struct pt_regs *regs, long error_code)
16{ 16{
17 printk(KERN_EMERG "CPU0: Machine Check Exception.\n"); 17 printk(KERN_EMERG "CPU0: Machine Check Exception.\n");
18 add_taint(TAINT_MACHINE_CHECK); 18 add_taint(TAINT_MACHINE_CHECK, LOCKDEP_NOW_UNRELIABLE);
19} 19}
20 20
21/* Set up machine check reporting on the Winchip C6 series */ 21/* Set up machine check reporting on the Winchip C6 series */
diff --git a/arch/x86/kernel/cpu/mtrr/generic.c b/arch/x86/kernel/cpu/mtrr/generic.c
index e9fe907cd249..fa72a39e5d46 100644
--- a/arch/x86/kernel/cpu/mtrr/generic.c
+++ b/arch/x86/kernel/cpu/mtrr/generic.c
@@ -542,7 +542,7 @@ static void generic_get_mtrr(unsigned int reg, unsigned long *base,
542 542
543 if (tmp != mask_lo) { 543 if (tmp != mask_lo) {
544 printk(KERN_WARNING "mtrr: your BIOS has configured an incorrect mask, fixing it.\n"); 544 printk(KERN_WARNING "mtrr: your BIOS has configured an incorrect mask, fixing it.\n");
545 add_taint(TAINT_FIRMWARE_WORKAROUND); 545 add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
546 mask_lo = tmp; 546 mask_lo = tmp;
547 } 547 }
548 } 548 }
diff --git a/arch/x86/kernel/dumpstack.c b/arch/x86/kernel/dumpstack.c
index ae42418bc50f..c8797d55b245 100644
--- a/arch/x86/kernel/dumpstack.c
+++ b/arch/x86/kernel/dumpstack.c
@@ -232,7 +232,7 @@ void __kprobes oops_end(unsigned long flags, struct pt_regs *regs, int signr)
232 232
233 bust_spinlocks(0); 233 bust_spinlocks(0);
234 die_owner = -1; 234 die_owner = -1;
235 add_taint(TAINT_DIE); 235 add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
236 die_nest_count--; 236 die_nest_count--;
237 if (!die_nest_count) 237 if (!die_nest_count)
238 /* Nest count reaches zero, release the lock. */ 238 /* Nest count reaches zero, release the lock. */
diff --git a/arch/xtensa/kernel/traps.c b/arch/xtensa/kernel/traps.c
index 01e0111bf787..ded955d45155 100644
--- a/arch/xtensa/kernel/traps.c
+++ b/arch/xtensa/kernel/traps.c
@@ -524,7 +524,7 @@ void die(const char * str, struct pt_regs * regs, long err)
524 if (!user_mode(regs)) 524 if (!user_mode(regs))
525 show_stack(NULL, (unsigned long*)regs->areg[1]); 525 show_stack(NULL, (unsigned long*)regs->areg[1]);
526 526
527 add_taint(TAINT_DIE); 527 add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
528 spin_unlock_irq(&die_lock); 528 spin_unlock_irq(&die_lock);
529 529
530 if (in_interrupt()) 530 if (in_interrupt())