[OpenBIOS] OpenSolaris starts to live on SPARC64

Mark Cave-Ayland mark.cave-ayland at siriusit.co.uk
Mon Apr 5 12:19:44 CEST 2010


Blue Swirl wrote:

> My test are again like with r731, but Milax does not get as far as with r732.

Really? I know Milax segfaults with r733 but it's definitely getting a 
lot further if you enable DEBUG_CIF - it looks like it's trying to read 
files from the UFS filesystem before it finally dies.

> The tests which had problems in r733 were Ubuntu 20080110.1, Aurora
> 2.0 and 2.1 install CDs.

I think we're definitely chasing an emulation/IO bug here. For example, 
trying to boot MarTux (Natamar_0.4__b96_sparc_cdrom.iso) with current 
OpenBIOS SVN gives the following:


OpenBIOS for Sparc64
Configuration device id QEMU version 1 machine id 0
kernel cmdline
CPUs: 1 x SUNW,UltraSPARC-II
UUID: 00000000-0000-0000-0000-000000000000
Welcome to OpenBIOS v1.0 built on Apr 5 2010 10:06
   Type 'help' for detailed information

[sparc64] Booting file 'disk' with parameters ''
Not a bootable ELF image
Not a Linux kernel image
Not a bootable a.out image
Loading FCode image...
Loaded 7392 bytes
entry point is 0x4000

Jumping to entry point 0000000000004000 for type 0000000000000010...
Evaluating FCode...
Unhandled Exception 0x0000000000000032
PC = 0x00000000ffd1bf10 NPC = 0x00000000ffd1bf14
Stopping execution


Checking openbios-builtin.syms shows that the exception is happening in 
drivers/ide.c:ob_ide_insw. Adding a debugging printk confirms this:

(lots cut)
port: 500   addr: 00000000ffec66c0   count: 100
port: 500   addr: 0000000008002000   count: 100
port: 500   addr: 0000000008002200   count: 100
port: 500   addr: 0000000008002400   count: 100
port: 500   addr: 0000000008002600   count: 100
port: 500   addr: 0000000051000000   count: 100
Unhandled Exception 0x0000000000000032
PC = 0x00000000ffd1df74 NPC = 0x00000000ffd1df78
Stopping execution


Note that 0x51000000 is the address where the Fcode normally loads the 
ELF image from disk/CDROM. What is more interesting is that the same 
call with the same parameters seems to work fine if I leave the printk 
in place while booting Milax:

(lots cut)
port: 500   addr: 00000000ffec66c0   count: 100
port: 500   addr: 0000000008002000   count: 100
port: 500   addr: 0000000008002200   count: 100
port: 500   addr: 0000000008002400   count: 100
port: 500   addr: 0000000008002600   count: 100
port: 500   addr: 0000000051000000   count: 100
port: 500   addr: 0000000051000200   count: 100
port: 500   addr: 0000000051000400   count: 100
port: 500   addr: 0000000051000600   count: 100
port: 500   addr: 0000000051000800   count: 100
port: 500   addr: 0000000051000a00   count: 100
port: 500   addr: 0000000051000c00   count: 100
port: 500   addr: 0000000051000e00   count: 100
port: 500   addr: 0000000051001000   count: 100
(lots cut)


So I'm thinking perhaps that this is some kind of emulation rather than 
IO bug. The SPARC docs refers to trap 0x32 as a "data_access_error" 
which is being generated by qemu in response to a certain condition, but 
I'm not exactly sure what that is yet.


ATB,

Mark.

-- 
Mark Cave-Ayland - Senior Technical Architect
PostgreSQL - PostGIS
Sirius Corporation plc - control through freedom
http://www.siriusit.co.uk
t: +44 870 608 0063

Sirius Labs: http://www.siriusit.co.uk/labs



More information about the OpenBIOS mailing list