Some troubles with an hand-made pager

BERTRAND Joel <[email protected]> Tue, 16 Nov 2010 20:37:55 +0100
Newsgroups gmane.comp.micro-kernel.l4.l4ka.general
Message-ID <[email protected]>
	Hello,

	I'm trying to write a pager and I'm not sure that I have understand how 
L4 works.

	When my pager receives a pagefault IPC, it tries to find a free 
physical memsection and uses sigma0 protocol to map virtual memory into 
physical one.

	I have added some outputs to check variables. When first thread that 
uses my pager is launched, pager received a pagefault IPC :

vms$pagefault(addr:1001730, size:8000) [priv=4]
memsection 1000000 100cc66
VIRT=1000000 PHYS=8000   <- these values seem to be good
s0: got msg from 0x0000003a00000001, (0xffffffffffa0, 
0x00000000000080f7, 0x0000000000000000)
s0: allocate_page (tid: 0x3a00000001, addr: 8000, log2size: 15)
s0: got msg from 0x0000003a00000001, (0xffffffffffe4, 
0x0000000000000000, 0x0000000001002e50)
s0: allocate_page (tid: 0x3a00000001, addr: 0, log2size: 12) <- ?????
s0: got msg from 0x0000003a00000001, (0xffffffffffe4, 
0x0000000000036dd4, 0x0000000001002e54)
s0: allocate_page (tid: 0x3a00000001, addr: 36dd4, log2size: 12)
and kernel enters in a deadlock...

	I don't understand why sigma0 receives three IPC from my pager. I have 
read all documentation I have found and I haven't found any explanation.

	I have uploaded a disk image with current roottask at
http://www.systella.fr/~bertrand/freevms.img.bz2 (3,6 MB) and sources 
are available with git clone git://rayleigh.systella.fr/FreeVMS.git. 
Disk image runs with qemu (with a 64 bits CPU).

	Any explanations are welcome. Thanks in advance.

	Regards,

	JKB