qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] SPARC not booting SMP Linux kernel


From: 陈宇飞
Subject: Re: [Qemu-devel] SPARC not booting SMP Linux kernel
Date: Wed, 28 Apr 2010 13:53:10 +0800

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


On 2010-4-28, at 上午2:23, Blue Swirl wrote:

> On 4/27/10, 陈宇飞 <address@hidden> 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.
>> 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?
>> 
>> 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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]