[OpenBIOS] [PATCH 0/3] sparc64 cleanups v1

Jakub Jermar jakub at jermar.eu
Fri May 28 11:24:30 CEST 2010


On 05/28/2010 11:03 AM, Igor Kovalenko wrote:
> On Fri, May 28, 2010 at 12:43 PM, Mark Cave-Ayland
> <mark.cave-ayland at siriusit.co.uk>  wrote:
>> Igor Kovalenko wrote:
> I allowed it to scroll and now I can confirm it would crash with tl=5.
> Last insn is ldda with ASI=0x24 (Nucleus quad LDD 128 bit atomic)
>
> IN:
> 0x0000000000424d18:  ldda  [ %g1 ] (36), %g4
> 0x0000000000424d1c:  cmp  %g4, %g6
> 0x0000000000424d20:  bne,pn   %xcc, 0x4076c0
> 0x0000000000424d24:  mov  2, %g3
>
> qemu: fatal: Trap 0x0068 while trap level (5)>= MAXTL (5), Error state
> pc: 0000000000424d18  npc: 0000000000424d1c
> General Registers:
> %g0-3: 0000000000000000 0000000008000000 0000000000004000 0000000000000002
> %g4-7: 00000000000003ff 0000000000000001 0000000000000020 0000000000004000
>
> Well, not sure how it worked before. Related code in helper_ld_asi() states:
>
>      case 0x24: // Nucleus quad LDD 128 bit atomic
>      case 0x2c: // Nucleus quad LDD 128 bit atomic LE
>          //  Only ldda allowed
>          raise_exception(TT_ILL_INSN);
>          return 0;
>
> HelenOS also uses quad ldd when configured with TSB for memory management.
> I guess that atomic quad ldd deserves to be implemented. I'll see if
> it is not hard.

The LDDA instruction is an essential instruction for TLB miss handlers 
that are TSB-aware. Except for HelenOS, where one can disable TSB, I'd 
expect all the other OSes that run on sparc64 to use it unconditionally.

Jakub



More information about the OpenBIOS mailing list