From: David Miller <[EMAIL PROTECTED]>
Date: Thu, 01 Nov 2007 15:01:13 -0700 (PDT)
> I'm working on a kernel patch for 2.6.23 that will allow you to get
> some useful debugging information in situations like this.
>
> I'll try to get you that patch by the end of tonight.
As promised, here is the patch below.
To trigger the debugging log, simple give the console
a "Alt-SysRQ" then a "g".
On a serial console you can do this by giving a single
BREAK then a "g".
If you're having trouble triggering the sysrq on the
console, try instead:
bash# echo "g" >/proc/sysrq-trigger
Here is some sample output from my Niagara-2 system while
running a benchmark. The current CPU is denoted by the
leading "*" character.
[81940.250994] SysRq : Show Global CPU Regs
[81940.251800] * CPU[ 0]: TSTATE[00000000e2001602] TPC[000000000055813c]
TNPC[0000000000558140] TASK[dd:2940]
[81940.252206] TPC[NGbzero_loop+0x1c/0x38]
[81940.252422] CPU[ 1]: TSTATE[0000004411001607] TPC[000000000055c9bc]
TNPC[000000000055c9c0] TASK[dd:2926]
[81940.252739] TPC[atomic_sub_ret+0x4/0x30]
[81940.252936] CPU[ 2]: TSTATE[0000000011001607] TPC[000000000055feec]
TNPC[000000000055fef0] TASK[dd:2899]
[81940.253238] TPC[NG2copy_to_user+0x46c/0x680]
[81940.253451] CPU[ 3]: TSTATE[00000000e2001602] TPC[0000000000558130]
TNPC[0000000000558134] TASK[dd:2929]
[81940.253776] TPC[NGbzero_loop+0x10/0x38]
[81940.253993] CPU[ 4]: TSTATE[00000000e2001602] TPC[0000000000558124]
TNPC[0000000000558128] TASK[dd:2947]
[81940.254325] TPC[NGbzero_loop+0x4/0x38]
[81940.254497] CPU[ 5]: TSTATE[0000004411001606] TPC[0000000000495f94]
TNPC[0000000000495f98] TASK[dd:2908]
[81940.254893] TPC[do_generic_mapping_read+0xbc/0x428]
[81940.255203] CPU[ 6]: TSTATE[0000000011001607] TPC[000000000055fee8]
TNPC[000000000055feec] TASK[dd:2920]
[81940.255699] TPC[NG2copy_to_user+0x468/0x680]
[81940.256104] CPU[ 7]: TSTATE[0000000011001607] TPC[000000000055feec]
TNPC[000000000055fef0] TASK[dd:2935]
[81940.256574] TPC[NG2copy_to_user+0x46c/0x680]
[81940.256972] CPU[ 8]: TSTATE[00000000e2001602] TPC[0000000000558124]
TNPC[0000000000558128] TASK[dd:2903]
[81940.257399] TPC[NGbzero_loop+0x4/0x38]
[81940.257899] CPU[ 9]: TSTATE[0000000011001607] TPC[000000000055feec]
TNPC[000000000055fef0] TASK[dd:2904]
[81940.258240] TPC[NG2copy_to_user+0x46c/0x680]
[81940.258482] CPU[ 10]: TSTATE[00000000e2001602] TPC[0000000000558138]
TNPC[000000000055813c] TASK[dd:2902]
[81940.258808] TPC[NGbzero_loop+0x18/0x38]
[81940.258999] CPU[ 11]: TSTATE[00000000e2001602] TPC[0000000000558120]
TNPC[0000000000558124] TASK[dd:2941]
[81940.259319] TPC[NGbzero_loop+0x0/0x38]
[81940.259487] CPU[ 12]: TSTATE[00000000e2001602] TPC[0000000000558130]
TNPC[0000000000558134] TASK[dd:2919]
[81940.259801] TPC[NGbzero_loop+0x10/0x38]
[81940.260012] CPU[ 13]: TSTATE[0000000011001607] TPC[000000000055feec]
TNPC[000000000055fef0] TASK[dd:2950]
[81940.260350] TPC[NG2copy_to_user+0x46c/0x680]
[81940.260564] CPU[ 14]: TSTATE[00000000e2001602] TPC[0000000000558134]
TNPC[0000000000558138] TASK[dd:2936]
[81940.260937] TPC[NGbzero_loop+0x14/0x38]
[81940.261150] CPU[ 15]: TSTATE[0000000011001607] TPC[000000000055fee8]
TNPC[000000000055feec] TASK[dd:2905]
[81940.261457] TPC[NG2copy_to_user+0x468/0x680]
[81940.261677] CPU[ 16]: TSTATE[0000000011001607] TPC[000000000055feec]
TNPC[000000000055fef0] TASK[dd:2923]
[81940.261973] TPC[NG2copy_to_user+0x46c/0x680]
[81940.262167] CPU[ 17]: TSTATE[0000000011001607] TPC[000000000055feec]
TNPC[000000000055fef0] TASK[dd:2897]
[81940.262462] TPC[NG2copy_to_user+0x46c/0x680]
[81940.262643] CPU[ 18]: TSTATE[00000000e2001602] TPC[0000000000558128]
TNPC[000000000055812c] TASK[dd:2909]
[81940.262987] TPC[NGbzero_loop+0x8/0x38]
[81940.263180] CPU[ 19]: TSTATE[0000000011001607] TPC[000000000055fee8]
TNPC[000000000055feec] TASK[dd:2913]
[81940.263500] TPC[NG2copy_to_user+0x468/0x680]
[81940.263901] CPU[ 20]: TSTATE[00000000e2001602] TPC[0000000000558128]
TNPC[000000000055812c] TASK[dd:2890]
[81940.264403] TPC[NGbzero_loop+0x8/0x38]
[81940.264679] CPU[ 21]: TSTATE[0000000011001607] TPC[000000000055fee8]
TNPC[000000000055feec] TASK[dd:2906]
[81940.265152] TPC[NG2copy_to_user+0x468/0x680]
[81940.265535] CPU[ 22]: TSTATE[0000000011001607] TPC[000000000055feec]
TNPC[000000000055fef0] TASK[dd:2918]
[81940.266075] TPC[NG2copy_to_user+0x46c/0x680]
[81940.266448] CPU[ 23]: TSTATE[0000000011001607] TPC[000000000055fee8]
TNPC[000000000055feec] TASK[dd:2900]
[81940.266942] TPC[NG2copy_to_user+0x468/0x680]
[81940.267328] CPU[ 24]: TSTATE[0000000011001602] TPC[000000000049a618]
TNPC[000000000049a61c] TASK[dd:2938]
[81940.267710] TPC[get_page_from_freelist+0x260/0x478]
[81940.268029] CPU[ 25]: TSTATE[0000004411001607] TPC[00000000005533cc]
TNPC[00000000005533d0] TASK[dd:2922]
[81940.268248] TPC[radix_tree_lookup+0x24/0x98]
[81940.268404] CPU[ 26]: TSTATE[0000000011001607] TPC[000000000055fee8]
TNPC[000000000055feec] TASK[dd:2915]
[81940.268494] TPC[NG2copy_to_user+0x468/0x680]
[81940.268636] CPU[ 27]: TSTATE[0000000011001607] TPC[000000000055feec]
TNPC[000000000055fef0] TASK[dd:2921]
[81940.268715] TPC[NG2copy_to_user+0x46c/0x680]
[81940.268869] CPU[ 28]: TSTATE[00000000e2001602] TPC[0000000000558130]
TNPC[0000000000558134] TASK[dd:2945]
[81940.268984] TPC[NGbzero_loop+0x10/0x38]
[81940.269131] CPU[ 29]: TSTATE[00000000e2001602] TPC[0000000000558130]
TNPC[0000000000558134] TASK[dd:2887]
[81940.269216] TPC[NGbzero_loop+0x10/0x38]
[81940.269362] CPU[ 30]: TSTATE[0000004411001602] TPC[000000000055cbd0]
TNPC[000000000055cbd4] TASK[dd:2910]
[81940.269464] TPC[clear_bit+0x24/0x38]
[81940.269598] CPU[ 31]: TSTATE[00000044f0000a00] TPC[00000000f7effb48]
TNPC[00000000f7effb4c] TASK[dd:2933]
[81940.269684] CPU[ 32]: TSTATE[0000004411001602] TPC[000000000055cb98]
TNPC[000000000055cb9c] TASK[dd:2927]
[81940.269849] TPC[set_bit+0x24/0x38]
[81940.269902] CPU[ 33]: TSTATE[00000000e2001602] TPC[0000000000558128]
TNPC[000000000055812c] TASK[dd:2939]
[81940.270077] TPC[NGbzero_loop+0x8/0x38]
[81940.270123] CPU[ 34]: TSTATE[0000000011001607] TPC[000000000055fee8]
TNPC[000000000055feec] TASK[dd:2911]
[81940.270283] TPC[NG2copy_to_user+0x468/0x680]
[81940.270350] CPU[ 35]: TSTATE[0000000011001607] TPC[000000000055fee8]
TNPC[000000000055feec] TASK[dd:2888]
[81940.270525] TPC[NG2copy_to_user+0x468/0x680]
[81940.270592] CPU[ 36]: TSTATE[0000000011001607] TPC[000000000055fee8]
TNPC[000000000055feec] TASK[dd:2928]
[81940.270761] TPC[NG2copy_to_user+0x468/0x680]
[81940.270821] CPU[ 37]: TSTATE[0000000011001607] TPC[000000000055fedc]
TNPC[000000000055fee0] TASK[dd:2907]
[81940.270995] TPC[NG2copy_to_user+0x45c/0x680]
[81940.271053] CPU[ 38]: TSTATE[0000000011001607] TPC[000000000055feec]
TNPC[000000000055fef0] TASK[dd:2946]
[81940.271221] TPC[NG2copy_to_user+0x46c/0x680]
[81940.271294] CPU[ 39]: TSTATE[0000000011001607] TPC[000000000055fee8]
TNPC[000000000055feec] TASK[dd:2934]
[81940.271467] TPC[NG2copy_to_user+0x468/0x680]
[81940.271532] CPU[ 40]: TSTATE[0000004411001607] TPC[000000000055ff00]
TNPC[000000000055ff04] TASK[dd:2937]
[81940.271705] TPC[NG2copy_to_user+0x480/0x680]
[81940.271761] CPU[ 41]: TSTATE[00000000e2001602] TPC[0000000000558130]
TNPC[0000000000558134] TASK[dd:2891]
[81940.271934] TPC[NGbzero_loop+0x10/0x38]
[81940.271994] CPU[ 42]: TSTATE[00000000e2001602] TPC[0000000000558138]
TNPC[000000000055813c] TASK[dd:2930]
[81940.272173] TPC[NGbzero_loop+0x18/0x38]
[81940.272355] CPU[ 43]: TSTATE[0000004411001604] TPC[0000000000504850]
TNPC[0000000000504854] TASK[dd:2942]
[81940.272481] TPC[ext3_get_blocks_handle+0x68/0xc14]
[81940.272632] CPU[ 44]: TSTATE[00000000e2001602] TPC[000000000055813c]
TNPC[0000000000558140] TASK[dd:2894]
[81940.272726] TPC[NGbzero_loop+0x1c/0x38]
[81940.272788] CPU[ 45]: TSTATE[0000000011001607] TPC[000000000055feec]
TNPC[000000000055fef0] TASK[dd:2898]
[81940.272872] TPC[NG2copy_to_user+0x46c/0x680]
[81940.272943] CPU[ 46]: TSTATE[0000000011001607] TPC[000000000055feec]
TNPC[000000000055fef0] TASK[dd:2892]
[81940.273035] TPC[NG2copy_to_user+0x46c/0x680]
[81940.273103] CPU[ 47]: TSTATE[00000000e2001602] TPC[0000000000558138]
TNPC[000000000055813c] TASK[dd:2893]
[81940.273172] TPC[NGbzero_loop+0x18/0x38]
[81940.273228] CPU[ 48]: TSTATE[0000000011001607] TPC[000000000055feec]
TNPC[000000000055fef0] TASK[dd:2895]
[81940.280846] TPC[NG2copy_to_user+0x46c/0x680]
[81940.285194] CPU[ 49]: TSTATE[0000009911001602] TPC[000000000055cbd0]
TNPC[000000000055cbd4] TASK[dd:2896]
[81940.285412] TPC[clear_bit+0x24/0x38]
[81940.295064] CPU[ 50]: TSTATE[00000000e2001602] TPC[0000000000558130]
TNPC[0000000000558134] TASK[dd:2943]
[81940.295436] TPC[NGbzero_loop+0x10/0x38]
[81940.302407] CPU[ 51]: TSTATE[0000000011001607] TPC[000000000055feec]
TNPC[000000000055fef0] TASK[dd:2924]
[81940.305050] TPC[NG2copy_to_user+0x46c/0x680]
[81940.305272] CPU[ 52]: TSTATE[0000000011001607] TPC[000000000055feec]
TNPC[000000000055fef0] TASK[dd:2949]
[81940.308306] TPC[NG2copy_to_user+0x46c/0x680]
[81940.309938] CPU[ 53]: TSTATE[0000000011001607] TPC[000000000055fee8]
TNPC[000000000055feec] TASK[dd:2889]
[81940.310249] TPC[NG2copy_to_user+0x468/0x680]
[81940.311719] CPU[ 54]: TSTATE[0000000011001607] TPC[000000000055fee8]
TNPC[000000000055feec] TASK[dd:2916]
[81940.321627] TPC[NG2copy_to_user+0x468/0x680]
[81940.321844] CPU[ 55]: TSTATE[0000004411001602] TPC[000000000055cbd0]
TNPC[000000000055cbd4] TASK[dd:2932]
[81940.326879] TPC[clear_bit+0x24/0x38]
[81940.326951] CPU[ 56]: TSTATE[0000000011001607] TPC[000000000055feec]
TNPC[000000000055fef0] TASK[dd:2901]
[81940.330430] TPC[NG2copy_to_user+0x46c/0x680]
[81940.341949] CPU[ 57]: TSTATE[00000000e2001602] TPC[0000000000558134]
TNPC[0000000000558138] TASK[dd:2944]
[81940.342119] TPC[NGbzero_loop+0x14/0x38]
[81940.379431] CPU[ 58]: TSTATE[00000000e2001602] TPC[0000000000558128]
TNPC[000000000055812c] TASK[dd:2912]
[81940.392125] TPC[NGbzero_loop+0x8/0x38]
[81940.392186] CPU[ 59]: TSTATE[0000000011001607] TPC[000000000055fee0]
TNPC[000000000055fee4] TASK[dd:2925]
[81940.420952] TPC[NG2copy_to_user+0x460/0x680]
[81940.421186] CPU[ 60]: TSTATE[0000004411001602] TPC[00000000006a2f58]
TNPC[00000000006a2f5c] TASK[dd:2948]
[81940.478590] TPC[_write_lock_irq+0x18/0x30]
[81940.480714] CPU[ 61]: TSTATE[0000000011001602] TPC[000000000049a618]
TNPC[000000000049a61c] TASK[dd:2914]
[81940.481059] TPC[get_page_from_freelist+0x260/0x478]
[81940.482588] CPU[ 62]: TSTATE[00000000e2001602] TPC[0000000000558134]
TNPC[0000000000558138] TASK[dd:2917]
[81940.489263] TPC[NGbzero_loop+0x14/0x38]
[81940.489480] CPU[ 63]: TSTATE[0000000011001607] TPC[000000000055fedc]
TNPC[000000000055fee0] TASK[dd:2931]
[81940.506233] TPC[NG2copy_to_user+0x45c/0x680]
So when you get a stuck process or whatever, trigger this and
send the output :-)
Enjoy.
diff --git a/arch/sparc64/kernel/process.c b/arch/sparc64/kernel/process.c
index ca7cdfd..67bf91d 100644
--- a/arch/sparc64/kernel/process.c
+++ b/arch/sparc64/kernel/process.c
@@ -1,7 +1,6 @@
-/* $Id: process.c,v 1.131 2002/02/09 19:49:30 davem Exp $
- * arch/sparc64/kernel/process.c
+/* arch/sparc64/kernel/process.c
*
- * Copyright (C) 1995, 1996 David S. Miller ([EMAIL PROTECTED])
+ * Copyright (C) 1995, 1996, 2007 David S. Miller ([EMAIL PROTECTED])
* Copyright (C) 1996 Eddie C. Dost ([EMAIL PROTECTED])
* Copyright (C) 1997, 1998 Jakub Jelinek ([EMAIL PROTECTED])
*/
@@ -31,6 +30,7 @@
#include <linux/tick.h>
#include <linux/init.h>
#include <linux/cpu.h>
+#include <linux/sysrq.h>
#include <asm/oplib.h>
#include <asm/uaccess.h>
@@ -48,6 +48,7 @@
#include <asm/unistd.h>
#include <asm/hypervisor.h>
#include <asm/sstate.h>
+#include <asm/irq_regs.h>
/* #define VERBOSE_SHOWREGS */
@@ -388,6 +389,76 @@ void show_regs32(struct pt_regs32 *regs)
regs->u_regs[15]);
}
+#ifdef CONFIG_MAGIC_SYSRQ
+struct global_reg_snapshot {
+ unsigned long tstate;
+ unsigned long tpc;
+ unsigned long tnpc;
+ struct thread_info *thread;
+} global_reg_snapshot[NR_CPUS];
+static DEFINE_SPINLOCK(global_reg_snapshot_lock);
+
+static void sysrq_handle_globreg(int key, struct tty_struct *tty)
+{
+ struct pt_regs *regs = get_irq_regs();
+#ifdef CONFIG_KALLSYMS
+ char buffer[KSYM_SYMBOL_LEN];
+#endif
+ unsigned long flags;
+ int cpu;
+
+ spin_lock_irqsave(&global_reg_snapshot_lock, flags);
+ cpu = raw_smp_processor_id();
+ if (regs) {
+ global_reg_snapshot[cpu].tstate = regs->tstate;
+ global_reg_snapshot[cpu].tpc = regs->tpc;
+ global_reg_snapshot[cpu].tnpc = regs->tnpc;
+ } else {
+ global_reg_snapshot[cpu].tstate = 0;
+ global_reg_snapshot[cpu].tpc = 0;
+ global_reg_snapshot[cpu].tnpc = 0;
+ }
+ global_reg_snapshot[cpu].thread = current_thread_info();
+
+ smp_fetch_global_regs();
+
+ for_each_online_cpu(cpu) {
+ struct global_reg_snapshot *gp = &global_reg_snapshot[cpu];
+ struct thread_info *tp = gp->thread;
+
+ printk("%c CPU[%3d]: TSTATE[%016lx] TPC[%016lx] TNPC[%016lx]
TASK[%s:%d]\n",
+ (cpu == raw_smp_processor_id() ? '*' : ' '), cpu,
+ gp->tstate, gp->tpc, gp->tnpc,
+ ((tp && tp->task) ? tp->task->comm : "NULL"),
+ ((tp && tp->task) ? tp->task->pid : -1));
+#ifdef CONFIG_KALLSYMS
+ if ((gp->tstate & TSTATE_PRIV) && (gp->tpc != 0UL)) {
+ sprint_symbol(buffer, gp->tpc);
+ printk(" TPC[%s]\n", buffer);
+ }
+#endif
+ }
+
+ memset(global_reg_snapshot, 0, sizeof(global_reg_snapshot));
+
+ spin_unlock_irqrestore(&global_reg_snapshot_lock, flags);
+}
+
+static struct sysrq_key_op sparc_globalreg_op = {
+ .handler = sysrq_handle_globreg,
+ .help_msg = "Globalregs",
+ .action_msg = "Show Global CPU Regs",
+};
+
+static int __init sparc_globreg_init(void)
+{
+ return register_sysrq_key('g', &sparc_globalreg_op);
+}
+
+core_initcall(sparc_globreg_init);
+
+#endif
+
unsigned long thread_saved_pc(struct task_struct *tsk)
{
struct thread_info *ti = task_thread_info(tsk);
diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c
index c73b7a4..cbedf27 100644
--- a/arch/sparc64/kernel/smp.c
+++ b/arch/sparc64/kernel/smp.c
@@ -894,6 +894,7 @@ extern unsigned long xcall_flush_tlb_mm;
extern unsigned long xcall_flush_tlb_pending;
extern unsigned long xcall_flush_tlb_kernel_range;
extern unsigned long xcall_report_regs;
+extern unsigned long xcall_fetch_glob_regs;
extern unsigned long xcall_receive_signal;
extern unsigned long xcall_new_mmu_context_version;
@@ -1064,6 +1065,11 @@ void smp_report_regs(void)
smp_cross_call(&xcall_report_regs, 0, 0, 0);
}
+void smp_fetch_global_regs(void)
+{
+ smp_cross_call(&xcall_fetch_glob_regs, 0, 0, 0);
+}
+
/* We know that the window frames of the user have been flushed
* to the stack before we get here because all callers of us
* are flush_tlb_*() routines, and these run after flush_cache_*()
diff --git a/arch/sparc64/mm/ultra.S b/arch/sparc64/mm/ultra.S
index 737c269..7a079ed 100644
--- a/arch/sparc64/mm/ultra.S
+++ b/arch/sparc64/mm/ultra.S
@@ -1,7 +1,6 @@
-/* $Id: ultra.S,v 1.72 2002/02/09 19:49:31 davem Exp $
- * ultra.S: Don't expand these all over the place...
+/* ultra.S: Don't expand these all over the place...
*
- * Copyright (C) 1997, 2000 David S. Miller ([EMAIL PROTECTED])
+ * Copyright (C) 1997, 2000, 2007 David S. Miller ([EMAIL PROTECTED])
*/
#include <asm/asi.h>
@@ -15,6 +14,7 @@
#include <asm/thread_info.h>
#include <asm/cacheflush.h>
#include <asm/hypervisor.h>
+#include <asm/cpudata.h>
/* Basically, most of the Spitfire vs. Cheetah madness
* has to do with the fact that Cheetah does not support
@@ -523,6 +523,27 @@ xcall_report_regs:
b rtrap_xcall
ldx [%sp + PTREGS_OFF + PT_V9_TSTATE], %l1
+ .globl xcall_fetch_glob_regs
+xcall_fetch_glob_regs:
+ sethi %hi(global_reg_snapshot), %g1
+ or %g1, %lo(global_reg_snapshot), %g1
+ __GET_CPUID(%g2)
+ sllx %g2, 5, %g3
+ add %g1, %g3, %g1
+ rdpr %tstate, %g7
+ stx %g7, [%g1 + 0x00]
+ rdpr %tpc, %g7
+ stx %g7, [%g1 + 0x08]
+ rdpr %tnpc, %g7
+ stx %g7, [%g1 + 0x10]
+ sethi %hi(trap_block), %g7
+ or %g7, %lo(trap_block), %g7
+ sllx %g2, TRAP_BLOCK_SZ_SHIFT, %g2
+ add %g7, %g2, %g7
+ ldx [%g7 + TRAP_PER_CPU_THREAD], %g3
+ stx %g3, [%g1 + 0x18]
+ retry
+
#ifdef DCACHE_ALIASING_POSSIBLE
.align 32
.globl xcall_flush_dcache_page_cheetah
diff --git a/drivers/char/sysrq.c b/drivers/char/sysrq.c
index 39cc318..7f871a5 100644
--- a/drivers/char/sysrq.c
+++ b/drivers/char/sysrq.c
@@ -335,6 +335,7 @@ static struct sysrq_key_op *sysrq_key_table[36] = {
&sysrq_term_op, /* e */
&sysrq_moom_op, /* f */
/* g: May be registered by ppc for kgdb */
+ /* May be registered by sparc for global register dump */
NULL, /* g */
NULL, /* h */
&sysrq_kill_op, /* i */
diff --git a/include/asm-sparc64/smp.h b/include/asm-sparc64/smp.h
index e8a96a3..29393e3 100644
--- a/include/asm-sparc64/smp.h
+++ b/include/asm-sparc64/smp.h
@@ -1,6 +1,6 @@
/* smp.h: Sparc64 specific SMP stuff.
*
- * Copyright (C) 1996 David S. Miller ([EMAIL PROTECTED])
+ * Copyright (C) 1996, 2007 David S. Miller ([EMAIL PROTECTED])
*/
#ifndef _SPARC64_SMP_H
@@ -43,6 +43,8 @@ extern int hard_smp_processor_id(void);
extern void smp_fill_in_sib_core_maps(void);
extern void cpu_play_dead(void);
+extern void smp_fetch_global_regs(void);
+
#ifdef CONFIG_HOTPLUG_CPU
extern int __cpu_disable(void);
extern void __cpu_die(unsigned int cpu);
@@ -54,6 +56,7 @@ extern void __cpu_die(unsigned int cpu);
#define hard_smp_processor_id() 0
#define smp_fill_in_sib_core_maps() do { } while (0)
+#define smp_fetch_global_regs() do { } while (0)
#endif /* !(CONFIG_SMP) */
-
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html