Re: GENERIC.MP hangs

KIYOHARA Takashi <[email protected]> Sat, 06 Apr 2013 19:14:45 +0900 (JST)
Newsgroups gmane.os.netbsd.ports.hp700
Message-ID <[email protected]>
Hi!


From: Nick Hudson <[email protected]>
Date: Wed, 03 Apr 2013 15:21:11 +0000

> On 04/01/13 15:27, KIYOHARA Takashi wrote:

> > GENERIC.MP hangs in percpu_alloc().  cpu0 waits cpu1 into idle_loop().
> > However cpu1 doesn't go idle_loop() on hp700 in
> > arch/hp700/dev/cpu.c:cpu_hatch().
> 
> [snip]
> 
> > Please fix. :)
> >
> > However,
> > Oops,  hangs again for another reason after resolved this problem...  X-<
> > probably I will report again in several months.
> 
> Do you have a patch you'd like reviewing?

I try with this change.

Index: cpu.c
===================================================================
RCS file: /cvsroot/src/sys/arch/hp700/dev/cpu.c,v
retrieving revision 1.30
diff -u -r1.30 cpu.c
--- cpu.c	21 Feb 2013 15:16:02 -0000	1.30
+++ cpu.c	6 Apr 2013 09:56:49 -0000
@@ -38,6 +38,7 @@
 #include <sys/device.h>
 #include <sys/atomic.h>
 #include <sys/reboot.h>
+#include <sys/idle.h>
 
 #include <uvm/uvm.h>
 
@@ -283,9 +284,8 @@
 	while (!start_secondary_cpu)
 		;
 
-	/* Spin for now */
-	for (;;)
-		;
+	idle_loop(NULL);
 
+	/* NOTREACHED */
 }
 #endif


But, I think more better to call idle_loop() in locore.S.  This reason
is our stack space more than free in cpu_hatch().

# I don't know PA-RISC assembler.  X-<
Maybe, it is more better?

Index: locore.S
===================================================================
RCS file: /cvsroot/src/sys/arch/hp700/hp700/locore.S,v
retrieving revision 1.61
diff -u -r1.61 locore.S
--- locore.S	23 May 2012 16:11:37 -0000	1.61
+++ locore.S	6 Apr 2013 10:05:12 -0000
@@ -523,6 +523,7 @@
 	 * Okay, time to return to the land of C.
 	 */
 	b	cpu_hatch
+	b	idle_loop
 	nop
 
 EXIT(hw_cpu_spinup_trampoline)


> There's quite a lot of work needed in pmap and trap handlers for full MP 
> support.

OK!
I will try and report next month(?).

Thanks,
--
kiyohara