From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=40102 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OQwJy-0000x9-IP for Qemu-devel@nongnu.org; Tue, 22 Jun 2010 01:46:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OQwJw-0002fQ-Rj for Qemu-devel@nongnu.org; Tue, 22 Jun 2010 01:46:54 -0400 Received: from mail-wy0-f173.google.com ([74.125.82.173]:62063) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OQwJw-0002fM-Le for Qemu-devel@nongnu.org; Tue, 22 Jun 2010 01:46:52 -0400 Received: by wyb42 with SMTP id 42so65567wyb.4 for ; Mon, 21 Jun 2010 22:46:51 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <48F76423-A4AD-4A42-A198-53624C33C7AB@gmail.com> References: <48F76423-A4AD-4A42-A198-53624C33C7AB@gmail.com> From: Artyom Tarasenko Date: Tue, 22 Jun 2010 07:46:31 +0200 Message-ID: Subject: Re: [Qemu-devel] SPARC not booting SMP Linux kernel Content-Type: text/plain; charset=GB2312 Content-Transfer-Encoding: quoted-printable List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?UTF-8?B?6ZmI5a6H6aOe?= Cc: Blue Swirl , Qemu-devel@nongnu.org 2010/4/28 =B3=C2=D3=EE=B7=C9 : > I've tested the latest git HEAD version. But still has the problem. > > Investigating Linux kernel execution shows that the function which will c= lear the interrupt is not executed. > > Here's the relevant kernel code. > > maybe_smp4m_msg: > GET_PROCESSOR4M_ID(o3) > set sun4m_interrupts, %l5 > ld [%l5], %o5 > sethi %hi(0x40000000), %o2 > sll %o3, 12, %o3 > ld [%o5 + %o3], %o1 > andcc %o1, %o2, %g0 > be,a smp4m_ticker /* Jump to smp4m_ticker, which will clear= interrupt */ > cmp %l7, 14 /* Comparing the interrupt level*/ > st %o2, [%o5 + 0x4] > WRITE_PAUSE > ld [%o5], %g0 > WRITE_PAUSE > or %l0, PSR_PIL, %l4 > wr %l4, 0x0, %psr > WRITE_PAUSE > wr %l4, PSR_ET, %psr > WRITE_PAUSE > call smp_reschedule_irq > nop > > RESTORE_ALL > actually what would be interesting to look at is the code of smp4m_ticker - the routine which should clear the irq. >> On 4/27/10, =B3=C2=D3=EE=B7=C9 wrote: >>> Actually this has been test before. >>> >>> http://lists.gnu.org/archive/html/qemu-devel/2006-08/msg00512.html >> >> That was before I added SMP support to OpenBIOS. >> >>> I've tested Debian 3.1 (with Linux 2.4.27.3) and Debian 4.0 (with >>> Linux 2.6.18.6), on both qemu 0.10.6 and 0.12.3, emulating machine is >>> set to SS-20. >>> >>> 1. non-smp kernel successfully boots with both -smp 1 or -smp 2. >>> 2. smp kernel can only boot with -smp 1. (The 2.6 kernel is cross >>> compiled by gcc 4.2.4 since no binary package is available) >>> >>> Some investigation with qemu's debug message and Linux kernel dump >>> (the 2.6 kernel) shows that >>> >>> 1. When the boot cpu tries to start cpu 1, cpu 1 calls >>> local_irq_enable. After that, cpu 1 get's lot's of level 14 interrupt. Is 'cpu 1' the first or the second cpu? >>> 2. Printing out the executed TBs' pc values shows that kernel >>> interrupt handler is executed. >>> 3. Qemu's do_interrupt debug message shows that cpu 1 always get level >>> 14 interrupt at the same pc, which is the nop instruction just after >>> the "mov %g1, %psr" instruction. >>> >>> I guess that the interrupt is not cleared even after the execution of >>> the interrupt handler. I've found debian installation report which >>> boots smp linux kernel, so I thinks this problem is caused by qemu? Can you please try the patch http://patchwork.ozlabs.org/patch/56338/ ? Does it improve the situation? >>> >>> I'm tring to fix this problem but I'm not familiar with sparc >>> architecture, is there any clue? >> >> This sounds awfully familiar to the problems Solaris had with >> interrupts. Does the problem still exist with git HEAD version of >> QEMU? > > -- > Best regards, > Chen Yufei > > --=20 Regards, Artyom Tarasenko solaris/sparc under qemu blog: http://tyom.blogspot.com/