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