Subject: Re: NetBSD/be
To: None <port-powerpc@NetBSD.ORG>
From: Kazuki Sakamoto <sakamoto@cec.co.jp>
List: port-powerpc
Date: 07/25/1997 13:51:50
NetBSD/be began to work somehow.

Current Status:
>single user mode up (/bin/sh works)
>single MPU support (MPU1 illuminates LED :-)
>DDB works (from OpenBSD/powerpc) 
>available VGA & serial console
>NE2000 compatible ISA Ethernet CARD works (root mount via NFS) 

I put snapshot of sources and binary on
<URL:http://www.cec.co.jp/usr/sakamoto/NetBSD/>.
nfs,bootparam,bootp server is necessary to work NetBSD/be single user mode.

How to start is as the following:

1. write disk image to floppy disks
	% gunzip beboot.img.gz
	% dd if=beboot.img of=/dev/fd0
	In the same way, kernel.img.gz, too.

	If your BeBox have older than AAPR BootROM,
	It will fail to boot with "beboot.img" floppy.
	Try this:
	 1. format floppy disk with BeOS filesystem
	 2. copy and rename "boot.pef" to "system/kernel"
	   Example:
	    $ cd floppy_disk_directory
	    $ mkdir system
	    $ cp /tmp/boot.pef system/kernel

2. setup nfs,bootparam,bootp server
	root.tar.gz is root filesystem.
	It includes some ELF binaries (NetBSD/powerpc compatible).

3. With the BeBox turned off, insert beboot.img floppy disk
   in the floppy disk drive and Turn on the BeBox.
   # Even if it is reset, it doesn't care.

4. Messages inform you.
     >> NetBSD/be BOOT
     >>
   Eject the floppy disk, insert the kernel.img floppy disk,
   and press Return.
	...booting NetBSD kernel...

5. input root device name and file system name.
	root device: ed0
	file system (default generic): nfs

6. /bin/sh start!


There are two questions.
Before, too, though it was written, SIGSEGV occurs.
When SIGSEGV occurs, the value of prot is 0x5(VM_PROT_READ|VM_PROT_EXECUTE),
the value of fault_type is 0x3(VM_PROT_READ|VM_PROT_WRITE)
in vm/vm_map.c line 2373.
By way of experiment, I surrounded this with #if 0-#endif.
Doesn't this occur in NetBSD/powerpc current?

As for one more question,
So far as I read it, splx() call softnet() directly.
Doesn't a waste arise once in this when the reception of network interrupts?

Sequence receive interrupt:
edintr() -> ed_rint() -> ... -> ether_input() ->
 schednetisr(NETISR_IP) -> setsoftnet() -> IF_ENQUEUE(inq, m)

setsoftnet() is soft_setsoftnet() with NetBSD/powerpc and NetBSD/be.
soft_setsoftnet() call soft_splx().
At this time, I don't think that receiving work is started
in the IP layer because IF_ENQUEUE() isn't being done with
soft_setsoftnet() when soft_splx() is called. 

Kazuki Sakamoto
sakamoto@cec.co.jp