qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: 陈宇飞 <cyfdecyf@gmail.com>
To: Artyom Tarasenko <atar4qemu@googlemail.com>
Cc: Blue Swirl <blauwirbel@gmail.com>, Qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] SPARC not booting SMP Linux kernel
Date: Tue, 22 Jun 2010 16:10:07 +0800	[thread overview]
Message-ID: <4A34977A-9BDB-482F-9F66-80191503910E@gmail.com> (raw)
In-Reply-To: <AANLkTimwfTRl0TdBif5USdgAlclynkX8vTd1pr8-IC96@mail.gmail.com>


On 2010-6-22, at 下午1:46, Artyom Tarasenko wrote:

> 2010/4/28 陈宇飞 <cyfdecyf@gmail.com>:
>> I've tested the latest git HEAD version. But still has the problem.
>> 
>> Investigating Linux kernel execution shows that the function which will clear 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, 陈宇飞 <cyfdecyf@gmail.com> 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?

'cpu 1' is 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've tested this patch, but still have the same problem.

> 
>>>> 
>>>> 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
>> 
>> 
> 
> 
> 
> -- 
> Regards,
> Artyom Tarasenko
> 
> solaris/sparc under qemu blog: http://tyom.blogspot.com/

--
Best regards,
Chen Yufei

  reply	other threads:[~2010-06-22  8:08 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-04-27  6:22 [Qemu-devel] SPARC not booting SMP Linux kernel 陈宇飞
2010-04-27 18:23 ` Blue Swirl
2010-04-28  5:53   ` 陈宇飞
2010-06-22  5:46     ` Artyom Tarasenko
2010-06-22  8:10       ` 陈宇飞 [this message]
2010-06-22 22:29         ` Artyom Tarasenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4A34977A-9BDB-482F-9F66-80191503910E@gmail.com \
    --to=cyfdecyf@gmail.com \
    --cc=Qemu-devel@nongnu.org \
    --cc=atar4qemu@googlemail.com \
    --cc=blauwirbel@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).