hello world roottask fails to run
"bahadir balban" <[email protected]>
| Newsgroups | gmane.comp.micro-kernel.l4.l4ka.general |
|---|---|
| Message-ID | <[email protected]> |
Hi, I have an almost-booting hello world system using NICTA:Pistachio hello-project--devel--1.1--patch-1 on an ARM system. The problem is that Sigma0 runs but L4_Receive() (for page faults) never returns. Because of that, the hello roottask's pages are never mapped upon a page fault. The kernel does send a pagefault ipc for the roottask when the first page is accessed, but the ipc is never concluded because neither sigma0 nor the roottask is in "waiting" state, which seems to be a requirement for the ipc to occur. The output is down below, but note the following: >From SYS_IPC(): dest not ready (roottask, is_wt=0) dest not ready (sigma0, is_wt=0) where is_wt=0 means "Not in waiting state". Also find_next_thread() dequeues these processes from the runqueue because they're not runnable but in POLLING state. From then on they never get their states "runnable" or "waiting" and it's always the idle thread running. Have you come across this problem or can guess why the ipc does not occur with success? How should the polling state normally change to either running or waiting? Many thanks, Bahadir ... Switching to idle thread (CPU 0) system has 64 interrupts Initializing root servers root-servers: utcb_area: cff00100 (64KB), kip_area: ff000000 (0KB) Creating sigma0 (handle_pagefault: idle: kernel pagefault in space f0018000 @ e00300a0, ip=f000ec38, type=0 00180001) Created sigma 0 with success. Set sigma0 pc to 530000 Set sigma0 sp to 0 creating root server (handle_pagefault: idle: kernel pagefault in space f0018000 @ e00310a0, ip=f000 ec38, type=0 00188001) Set roottask pc to 540000 Set roottask sp to 0 idle thread started on CPU 0 find_next_thread: Chosen to run: sigma0 schedule: Current: idle, Found: sigma0 switch_to: Switching to: sigma0 handle_pagefault: sigma0: user execute pagefault at 00530000, ip=00530000 handle_pagefault: Establishing a mapping in sigma0's space. handle_pagefault: sigma0: user execute pagefault at 005314ac, ip=005314ac handle_pagefault: Establishing a mapping in sigma0's space. handle_pagefault: sigma0: user read pagefault at 0053bb74, ip=005314b0 handle_pagefault: Establishing a mapping in sigma0's space. handle_pagefault: sigma0: user read pagefault at 005338bc, ip=005318f8 handle_pagefault: Establishing a mapping in sigma0's space. handle_pagefault: sigma0: user execute pagefault at 00532af8, ip=00532af8 handle_pagefault: Establishing a mapping in sigma0's space. This is sigma0 printing... Sigma0 pagefault server has started... sigma0_server: Only talking to tid: 0x8001 (roottask?) L4_Receiving()... SYS_IPC: current: sigma0, to_tid: roottask, from_tid: roottask, tag: 0xffb0c005 (label=0xffb0, SRap, u=5, t=0) send phase curr=sigma0, to=roottask dest not ready (roottask, is_wt=0) find_next_thread: Dequeuing sigma0 in state: POLLING find_next_thread: Chosen to run: roottask switch_to: Switching to: roottask handle_pagefault: roottask: user execute pagefault at 00540000, ip=00540000 handle_pagefault: Sending pagefault ipc. SYS_IPC: current: roottask, to_tid: sigma0, from_tid: sigma0, tag: 0xffe1c002 (label=0xffe1, SRap, u =2, t=0) send phase curr=roottask, to=sigma0 dest not ready (sigma0, is_wt=0) find_next_thread: Dequeuing roottask in state: POLLING switch_to: Switching to: idle schedule: Current: idle, Found: idle schedule: Current: idle, Found: idle schedule: Current: idle, Found: idle schedule: Current: idle, Found: idle ...