Re: unkillable dpkg-query processes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: David Miller <davem@xxxxxxxxxxxxx>
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 (davem@xxxxxxxxxxxxxxxx)
+ *  Copyright (C) 1995, 1996, 2007 David S. Miller (davem@xxxxxxxxxxxxx)
  *  Copyright (C) 1996       Eddie C. Dost   (ecd@xxxxxxxxx)
  *  Copyright (C) 1997, 1998 Jakub Jelinek   (jj@xxxxxxxxxxxxxxxxxxx)
  */
@@ -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 (davem@xxxxxxxxxx)
+ * Copyright (C) 1997, 2000, 2007 David S. Miller (davem@xxxxxxxxxxxxx)
  */
 
 #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 (davem@xxxxxxxxxxxxxxxx)
+ * Copyright (C) 1996, 2007 David S. Miller (davem@xxxxxxxxxxxxx)
  */
 
 #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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Kernel Development]     [DCCP]     [Linux ARM Development]     [Linux]     [Photo]     [Yosemite Help]     [Linux ARM Kernel]     [Linux SCSI]     [Linux x86_64]     [Linux Hams]

  Powered by Linux