On Mon, Oct 22, 2012 at 07:29:19AM +1000, Richard Henderson wrote:
> On 2012-10-21 09:17, Aurelien Jarno wrote:
> > On Sun, Oct 21, 2012 at 08:48:52AM +1000, Richard Henderson wrote:
> >> On 2012-10-21 00:48, Aurelien Jarno wrote:
> >>> I am not sure it is the real problem, but at least the optimization of
> >>> using the destination register as a temporary is wrong when the
> >>> instruction might trigger an exception. In that case the result is
> >>> written to the destination register while it should have not.
> >>>
> >>> This reverts commit 5793f2a47e201d251856c7956d6f7907ec0d9f1f.
> >>
> >> Which insn might trigger an exception?  Most OP=2 insns don't.  There's
> >> divide, but that's done out-of-line, so the assignment to dst does not
> >> happen before the exception...
> > 
> > Indeed there a are a few one triggering exception, but I looked too
> > quickly and indeed they do the assignment before. There should be
> > another problem elsewhere as reverting this patch fixes the issue.
> > 
> >> Is this sparc64?  I assume so, since I did test sparc32...
> >>
> > 
> > Yes it's with a sparc64 kernel. I can reproduce the problem with both a 
> > 32 and 64-bit userland, though it happens earlier with a 32-bit
> > userland.
> > 
> 
> Sadly, I don't seem to be able to boot a "real" sparc64 system at all,
> even with a qemu version before the patch set in question went in.
> 
> (1) The recent "vga cleanup" has totally broken video for all sparc.
>     This is bisectable to f2898771435701df33145cacabeb42c6aa3a9a16,
>     your patch that adjusts sun4u.  One can see this problem just by
>     booting OpenBIOS; no kernel needed.

Oops, it's something I haven't realized, because my scripts are either
passing -vga none or -vga std. I'll try to come with a patch, but in the
meantime the problem can be workarounded by passing -vga std.

> (2) Switching to serial console, the kernel gets stuck talking to the
>     disks.  It gets so far, and then reports lost interrupts forever:
> 
> $ ../bld/sparc64-softmmu/qemu-system-sparc64 -kernel sparc64 -initrd 
> initrd.gz -append "root=/dev/ram console=ttyS0" -hda ./hda.img -cdrom 
> ./debian-6.0.6-sparc-netinst.iso -nographic
> ...
> [   14.488838] ata1.00: ATA-7: QEMU HARDDISK, 1.2.50, max UDMA/100
> [   14.489893] ata1.00: 25165824 sectors, multi 16: LBA48 
> [   14.504620] ata1.00: configured for UDMA/33
> [   14.549962] scsi 0:0:0:0: Direct-Access     ATA      QEMU HARDDISK    1.2. 
> PQ: 0 ANSI: 5
> [   14.732381] ata2.00: ATAPI: QEMU DVD-ROM, 1.2.50, max UDMA/100
> [   14.734341] ata2.00: configured for UDMA/33
> [   35.596592] ata2: lost interrupt (Status 0x50)
> [   56.594942] ata2: lost interrupt (Status 0x50)

Yes, the emulated IDE controller is currently buggy and causes the
kernel to go in a dead loop. Instead of using Debian Squeeze, I am using
Debian Wheezy which provides virtio support. Then the system can boot
with virtio-disk and virtio-net.

> I re-examined the opcodes in OP=2.  The only one left that throws an inline 
> exception
> is Tcc, which of course doesn't write to a destination register at all.  If, 
> somehow,
> there is some exception (or other write-before-use) that I've missed, then 
> the following
> patch should fix it, without moving the cpu_dst variable back to global 
> scope.  If this
> patch does not fix the problem, then there's some erroneous use of cpu_dst 
> that I've
> missed, and the original patch is question is broken for some other reason.

The attached patch fixes the problem.

> Given my experience above, I wonder what you're testing differently?  I'm 
> trying the
> stock standard debian 6.0.6 (current?) distribution media images.  The 
> kernel/initrd
> images above are pulled out of that iso, as I couldn't make OpenBIOS boot the 
> cdrom
> image directly.


I'll try to make an image so that people can test sparc64 more easily.

 

-- 
Aurelien Jarno                          GPG: 1024D/F1BCDB73
aurel...@aurel32.net                 http://www.aurel32.net

Reply via email to