----- Original Message ---- From: Adam Lackorzynski adam@os.inf.tu-dresden.de To: l4-hackers@os.inf.tu-dresden.de Sent: Monday, March 17, 2008 5:37:39 AM Subject: Re: Failed to create a new task
Hi,
Here's a diff of your program against a version that works, with comments:
--- x.c 2008-03-16 22:30:26.000000000 +0100 +++ x.c 2008-03-16 22:30:26.000000000 +0100 @@ -3,6 +3,7 @@ #include <l4/sys/ipc.h> #include <l4/rmgr/librmgr.h> #include <l4/sigma0/sigma0.h> +#include <l4/util/util.h>
#include <stdio.h>
@@ -41,14 +42,13 @@ l4_addr_t map_area = 0x60000000; l4_addr_t base; l4_umword_t rcv_fpage; - l4_umword_t snd_fpage;
res = l4_ipc_call(SIGMA0_ID, // thread id L4_IPC_SHORT_MSG, // send descriptor SIGMA0_REQ_FPAGE_ANY, // snd_dword0 - snd_fpage, // snd_dword1 + l4_fpage(0, L4_LOG2_PAGESIZE, 0, 0).fpage, // snd_dword1 L4_IPC_MAPMSG(map_area, L4_WHOLE_ADDRESS_SPACE),// rcv_desc - base, // *rcv_dword0 + &base, // *rcv_dword0 &rcv_fpage, // *rcv_dword1 timeout, &result);
Please fix compiler warnings, gcc is not issueing them just for fun. You've been giving an uninitialized value as an address to l4_ipc_call, so no wonder strange things happen.
@@ -75,26 +75,17 @@ enter_kdebug("FAILED in l4_ipc_wait: %d\n"); }
+ while(1) { l4_umword_t fault_addr = rcv_dword0 &~ 0x00000003; //rcv_dword0 & 0xFFFFFFFC // mask lower bits for (write/grant) flags? l4_umword_t rw_addr = fault_addr | 0x00000002; // mask the 2 nd lower bits to set write flags
- while(1) { - - l4_snd_fpage_t fpage; - - fpage.snd_base = rw_addr; // do wee need to left shift the address??? - - //we can also use the function l4_fpage(address, size, write, grant) - fpage.fpage.fp.grant = 0; - fpage.fpage.fp.write = 1; - fpage.fpage.fp.page = rw_addr; - fpage.fpage.fp.size = L4_LOG2_PAGESIZE; //12 + l4_touch_rw((void *)rw_addr, 1);
Just to make sure the memory is really available.
res = l4_ipc_reply_and_wait(src_id, //dest_id L4_IPC_SHORT_FPAGE, //send descriptor - fpage.snd_base, //snd_dword0 - fpage.fpage.fpage, //snd_dword1 - might change later to .fp + rw_addr & L4_PAGEMASK, //snd_dword0 + l4_fpage(rw_addr & L4_PAGEMASK, L4_LOG2_PAGESIZE, L4_FPAGE_RW, L4_FPAGE_MAP).fpage, &src_id, //src_id L4_IPC_SHORT_MSG, //rcv descriptor &rcv_dword0, //rcv_dword0
I just aggregated the l4_fpage to the one line, more compact.
thanks for the tips.
____________________________________________________________________________________ Looking for last minute shopping deals? Find them fast with Yahoo! Search. http://tools.search.yahoo.com/newsearch/category.php?category=shopping
l4-hackers@os.inf.tu-dresden.de