DDB and SMP causes Unaligned Reference

Marcel Moolenaar marcel at xcllnt.net
Fri Jun 6 11:20:17 PDT 2003


On Fri, Jun 06, 2003 at 06:31:30PM +0200, Alan Robinson wrote:
> Using the manual escape to debugger with an SMP kernel
> causes an unaligned reference while stopping the other
> CPU, the system then hangs.
> 
> #
> #  CPU1 stopping CPUs: 0x00000001...
> #  fatal kernel trap (cpu 0):
> # 
> # trap vector = 0x1e (Unaligned Reference)
> # cr.iip      = 0xe0000000009a1320
> # cr.ipsr     = 0x1210080a6010 (mfl,ic,i,dt,dfh,rt,cpl=0,it,ri=1,bn)
> # cr.isr      = 0x20200000000 (code=0,vector=0,w,ei=1)
> # cr.ifa      = 0xe000000000004228
> # curthread   = 0xe00000003d9bb080
> # pid = 12, comm = idle: cpu0
> # CPU0 stopping CPUs: 0x00000002...
> # 
> (The self built kernel was built using projects/ia64 cvsup'd sources 
> which are now a day or two old)
> 
> The cr.iip points into swapctx (or savectx) which was called from
> from interrupt() as follows....
> 
>         } else if (vector == ipi_vector[IPI_STOP]) {
>                 u_int32_t mybit = PCPU_GET(cpumask);
> 
>                 CTR1(KTR_SMP, "IPI_STOP, cpuid=%d", PCPU_GET(cpuid));
>                 savectx(PCPU_GET(pcb));

We don't set pc_pcb on ia64. The line above should read:
	savectx(curthread->td_pcb);

Try it and let me know if it works. I'll commit it then.

> # enter_userland() at enter_userland
> # db> c
> # CPU1 restarting CPUs: 0x00000001... restarted.
> # manual escape to debugger
> # CPU0 stopping CPUs: 0x00000002... stopped.
> # Stopped at      Debugger+0x31:        nop.m 0x0
> # db> c
> # CPU0 restarting CPUs: 0x00000002... restarted.
> # 
> 
> is the double continue normal ?

I don't think so. I've never seen it before, but that's probably
because I haven't had the time yet to work on SMP in general and
also because I generally don't manually break to the debugger.

-- 
 Marcel Moolenaar	  USPA: A-39004		 marcel at xcllnt.net


More information about the freebsd-ia64 mailing list