Port-powerpc archive

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

Re: Some PPC VM weirdness




On Feb 18, 2005, at 2:17 PM, Jochen Kunz wrote:

Hi.

I am trying to bring NetBSB to the IBM RS/6000 43P-150 and B50. This is
done as a platform inside port-ofppc. I replaced the port-ofppc
speciffic bus_space(9) code with the generic code from
sys/arch/powerpc/powerpc/bus_space.c. I imported the whole interrupt
handling code from port-prep because this code is knowen to work. Some
PCI and ISA MD bits here and there... At the moment I am tyring to bring
all this to live and play nicely together.

Good. I've wanted to kill the ofppc bus_space for awhile now. (Sorry Jason).

Now I get to the point where the kernel asks for the root device. When I enter "pcn0" it hangs. I can brake into ddb(4) and a traceback give some
interresting adresses:
root on pcn0
nfs_boot: trying DHCP/BOOTP
~[MrPomeroy]%b
Stopped at      netbsd:cpu_Debugger+0x10: lwz     r0, r1, 0x14
db> t
0x00425f00: at comintr+0x61c
0x00425f50: at ext_intr_openpic+0x23c
0x00425fa0: at trapstart+0x8f4
0xd999ed90: at spinlock_switchcheck+0x3c
0xd999eda0: at Idle+0x24
0xd999edb0: at mi_switch+0x198
0xd999edf0: at ltsleep+0x460
0xd999ee30: at start_init+0x80
0xd999ef40: at cpu_switchto+0x44
0xd999ef50: at chrp_configuration+0x80793b84
saved LR(0xfffffffb) is invalid.
db>

Does it timeout? Is hardclock firing? are you getting pcn interrupts? did you tcpdump the network and see packets being transmitted?

Running nm(1) on the kernel image gives this addresses:
001002b8 T Idle
003dc67c B chrp_configuration
00173da4 T comintr
00100540 T cpu_switchto
00313150 t ext_intr_openpic
0025ed4c T ltsleep
0025f9b0 T mi_switch
0024b978 T spinlock_switchcheck
00236cd4 t start_init
003aad90 S start_init_exec
00100aec T trapstart

Is this eligible? I always thought kernel text/data/bss is mapped 1:1.
(I am no VM expert.)

What you are seeing is normal. Remember that interrupts happen on their own stack and you seeing the transition to the interrupt stack there. I should ddb about interrupts someday.

Or is this a bug in ddb(4)? When I use e.g. "print/x start_init" I get
the correct adresses.

It's normal.

Also: The PPC VM stuff uses two 256 MB segments KERNEL_SR and KERNEL2_SR for UVM-KVA mappings. port-ofppc uses segments 13 and 14 for this. AFAIK (sys/arch/powerpc/include/oea/vmparam.h) So it is correct that a mapping
done by sys/arch/powerpc/oea/oea_machdep.c:mapiodev() via
uvm_km_valloc(9) ends in the rage 0xd0000000..0xdfffffff?

Yes. Though you really should make, if you can, that address range be a BAT. mapiodev() will automatically see it's BAT mapped and return that instead.

There is some other VM interaction with ddb(4). When I do a BAT mapping
for the PCI memory area where the pcn(4) resides bus_space_mapp(4) skips
the mapiodev() / uvm_km_valloc(9) part and just returns the pysical
address, as it is already mapped via BAT. In this case ddb(4) returns to
its prompt after a "trace" command. When I don't add a BAT mapping for
the PCI memory area of pcn(4), bus_space_mapp(4) uses mapiodev() /
uvm_km_valloc(9) to map it into KVA. If uvm_km_valloc(9) is used the
machines locks up hard and needs to be power cycled after "trace".

Really?  mapiodev shouldn't cause that to happen.  It locks up doing
the trace?  Or someplace else?

--
Matt Thomas                     email: matt%3am-software.com@localhost
3am Software Foundry              www: http://3am-software.com/bio/matt/
Cupertino, CA disclaimer: I avow all knowledge of this message.



Home | Main Index | Thread Index | Old Index