[OpenBIOS] Qemu/OpenBIOS 64-bit

Artyom Tarasenko atar4qemu at gmail.com
Sun Dec 29 15:12:29 CET 2013


On Sun, Dec 29, 2013 at 12:10 PM, Mark Cave-Ayland
<mark.cave-ayland at ilande.co.uk> wrote:
> On 29/12/13 05:01, Nick Couchman wrote:
>
>>> I see the "VAC too big!" error on my local copy of 32-bit Solaris 9 too.
>>> Some searching showed the message occurs in the OpenSolaris source at
>>>
>>> http://fxr.watson.org/fxr/source/sfmmu/vm/hat_sfmmu.c?v=OPENSOLARIS#L1347.
>>>
>>> I'm not exactly sure what this is trying to check here, but I do know
>>> that OpenBIOS uses 512K PTEs to map itself, while calls to OFMEM use 8K
>>> PTEs which may be relevant. Does anyone know the exact significance of
>>> this?
>>>
>>>
>>
>> Hmmm...I do not recall seeing that VAC too big error on Solaris 9 32-bit
>> (on 32-bit Qemu/OpenBIOS), but if you're seeing it and Solaris 9 boots fine
>> for you, then perhaps that's a Red Herring and not worth running down.
>> Maybe I'll focus on trying to track down the source of some of the other
>> error messages that seem to contribute to not being able to boot 64-bit
>> Solaris - particularly Solaris 10 and higher, since I think that's where the
>> CPU Power Management starts, which would be great to get working for the CPU
>> performance aspect of running Qemu.
>>
>> -Nick
>
>
> Gah. Sorry Nick - this message was definitely a case of "fingers before
> brain. What I meant to say was that I see the "VAC too big!" error on my
> local copy of *64-bit* Solaris 9 too. I currently don't have access to a
> Solaris 9 32-bit image for testing, but it sounds as if it is working fine
> for you which is great.

Actually "VAC too big" is a pretty nice error: it should happen in the
early sfmmu initialization phase, but for some reason I never get it.
I tried to make the boot process more verbose, but for this I'd need a
working kadb. Maybe it's easy to make it working?
With CIF_DEBUG booting kadb looks like this:

Jumping to entry point 0000000000100000 for type 0000000000000001...
switching to new context: entry point 0x100000 stack 0x00000000ffe86a01
finddevice("/chosen") = 0x00000000ffe1bed0
getproplen(0x00000000ffe1bed0, "mmu") = 0x0000000000000004
getproplen(0x00000000ffe1bed0, "mmu") = 0x0000000000000004
getprop(0x00000000ffe1bed0, "mmu", 0x000000000013e02c, 4) = service
getprop: possible argument error (0 1)

^^^ The message about possible argument error keeps appearing on every
call after this point.
[...]

getprop(0x00000000ffe30940, "clock-frequency", 0x0000000000138608, 4)
= service getprop: possible argument error (0 1)
3990516880
0x00138608  05 f5 e1 00 __ __ __ __ __ __ __ __ __ __ __ __  .��.
getproplen(0x00000000ffe30940, "status") = 0xffffffffffffffff

^^^ are we missing "status" property?

child(0x00000000ffe30940) = 0x0000000000000000
peer(0x00000000ffe30940) = 0x0000000000000000
peer(0x00000000ffe1b838) = 0x0000000000000000
of_client_interface: interpret 00000000eddac894 0000000000000000
0000000000000000 0000000000000000 0000000000000000 0000000000000000
interpret : kadb_callback   %pc   dup f000.0000 ffff.ffff between if
drop exit then   h# eddda630  x!  %npc h# eddb0758  x!  %g1 h#
eddda6d0  x!  %g2 h# eddda6d8  x!  %g3 h# eddda6e0  x!  %g4 h#
eddda720  x!  %g5 h# eddda728  x!  %g6 h# eddda730  x!  %g7 h#
eddda738  x!  1 %tstate h# eddaf070  x!  1 %tt h# eddd9e48  l!  h#
edd008ec   set-pc     go ;  ([6] -- [0])
%pc:interpret: exception -13 caught

^^^ I guess things go wrong after this point.

interpret ': kadb_callback   %pc   dup f000.0000 ffff.ffff between if
drop exit then   h# eddda630  x!  %npc h# eddb0758  x!  %g1 h#
eddda6d0  x!  %g2 h# eddda6d8  x!  %g3 h# eddda6e0  x!  %g4 h#
eddda720  x!  %g5 h# eddda728  x!  %g6 h# eddda730  x!  %g7 h#
eddda738  x!  1 %tstate h# eddaf070  x!  1 %tt h# eddd9e48  l!  h#
edd008ec   set-pc     go ; ': possible argument error (4--0) got 0
handle_calls return:
of_client_interface: interpret 00000000edd28010 0000000000000000
0000000000000000 0000000000000000 0000000000000000 0000000000000000
interpret  ['] kadb_callback init-debugger-hook  ([6] -- [0])
kadb_callback:interpret: exception -13 caught
interpret ' ['] kadb_callback init-debugger-hook ': possible argument
error (4--0) got 0

And then kadb prompt appears but it can't start executing the kernel:

kadb[0]: :c
of_client_interface: call-method 00000000eddac6e0 00000000ffc847f0
0000000001006000
call-method translate ([3] -- [5])
handle_calls return: 0000000000000000 ffffffffffffffff
0000000000000032 0000000000000000 000000001f806000
of_client_interface: call-method 00000000eddac668 00000000ffc847f0
0000000000000033 0000000000002000 00000000ffc7e000 0000000000000000
000000001f806000
call-method map ([7] -- [1])
handle_calls return: 0000000000000000
of_client_interface: call-method 00000000eddac6c8 00000000ffc847f0
0000000000002000 00000000ffc7e000
call-method unmap ([4] -- [0])
call-method 'unmap': possible argument error (2--0) got 0
handle_calls return:
Unhandled Exception 0x000000000000017e
PC = 0x0000000001006f90 NPC = 0x0000000001006f94
Stopping execution


Artyom

-- 
Regards,
Artyom Tarasenko

linux/sparc and solaris/sparc under qemu blog:
http://tyom.blogspot.com/search/label/qemu



More information about the OpenBIOS mailing list