From 6bb5b452129fa2b245428df64ae5f9d86258cb92 Mon Sep 17 00:00:00 2001 From: Bahadir Balban Date: Tue, 15 Jan 2008 00:34:10 +0000 Subject: [PATCH] FS0 compiles now, with a mock-up rootfs. Having progress on vfs slowly but surely ;-) --- tasks/blkdev0/fsbin/romfs.bin | Bin 0 -> 296960 bytes tasks/fs0/include/fs.h | 10 +- tasks/fs0/include/kdata.h | 1 - tasks/fs0/include/syscalls.h | 14 ++ tasks/fs0/main.c | 13 +- tasks/fs0/src/init.c | 120 +++++++++++++ tasks/libl4/include/l4lib/ipcdefs.h | 1 + tasks/libposix/open.c | 1 + tasks/mm0/main.c | 4 + tasks/mm0/mmap.extra.c.code | 258 ---------------------------- tasks/mm0/src/mmap.c | 22 ++- tasks/test0/main.c | 2 +- tasks/test0/src/mmaptest.c | 3 +- tools/cml2header.pyc | Bin 4190 -> 0 bytes 14 files changed, 174 insertions(+), 275 deletions(-) create mode 100644 tasks/blkdev0/fsbin/romfs.bin create mode 100644 tasks/fs0/include/syscalls.h create mode 100644 tasks/fs0/src/init.c delete mode 100644 tasks/mm0/mmap.extra.c.code delete mode 100644 tools/cml2header.pyc diff --git a/tasks/blkdev0/fsbin/romfs.bin b/tasks/blkdev0/fsbin/romfs.bin new file mode 100644 index 0000000000000000000000000000000000000000..a7dd1e8d8f2b32540d68b8151ca9e989bfe50d3f GIT binary patch literal 296960 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

`l4&R16H8Zu9_`q`pX^}jCH**xjU0c=95RY~ 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�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 #include #include +#include #include #include #include #include +#include +#include +#include +#include /* Synchronise with pager via a `wait' tagged ipc with destination as pager */ void wait_pager(l4id_t partner) { - u32 tag = L4_IPC_TAG_WAIT; - printf("Going to wait till pager finishes dumping.\n"); - l4_ipc(partner, l4_nilthread, tag); - printf("Pager synced with us.\n"); + l4_send(partner, L4_IPC_TAG_WAIT); + printf("%s: Pager synced with us.\n", __TASKNAME__); } void handle_fs_requests(void) @@ -68,6 +71,8 @@ void handle_fs_requests(void) void main(void) { + initialise(); + wait_pager(PAGER_TID); while (1) { diff --git a/tasks/fs0/src/init.c b/tasks/fs0/src/init.c new file mode 100644 index 0000000..1b32994 --- /dev/null +++ b/tasks/fs0/src/init.c @@ -0,0 +1,120 @@ +/* + * FS0 Initialisation. + * + * Copyright (C) 2007 Bahadir Balban + */ +#include +#include +#include +#include +#include +#include + +struct filesystem bootfs = { + .magic = 0, + .name = "Tempfs for boot images", +}; + +struct superblock bootfs_sb; + +#define BOOTFS_IMG_MAX 10 +struct vnode bootfs_vnode[BOOTFS_IMG_MAX]; +struct dentry bootfs_dentry[BOOTFS_IMG_MAX]; +struct file bootfs_file[BOOTFS_IMG_MAX]; + +struct rootdir { + struct dentry *d; + struct filesystem *fs; +}; +struct rootdir bootfs_root; + +void init_root(struct vnode *root_vn, struct dentry *root_d) +{ + /* Initialise dentry for rootdir */ + root_d->refcnt = 0; + strcpy(root_d->name, ""); + INIT_LIST_HEAD(&root_d->child); + INIT_LIST_HEAD(&root_d->children); + INIT_LIST_HEAD(&root_d->dref_list); + root_d->vnode = root_vn; + + /* Initialise vnode for rootdir */ + root_vn->id = 0; + root_vn->refcnt = 0; + INIT_LIST_HEAD(&root_vn->dirents); + INIT_LIST_HEAD(&root_vn->state_list); + list_add(&root_d->dref_list, &root_vn->dirents); + root_vn->size = 0; + + /* Initialise global struct rootdir ptr */ + bootfs_root.d = root_d; + bootfs_root.fs = &bootfs; +} + +#define PATH_SEP "/" +#define PATH_CURDIR "." +#define PATH_OUTDIR ".." + +void fs_debug_list_all(struct dentry *root) +{ + struct dentry *d; + int stotal = 0; + + /* List paths first */ + printf("%s%s\n", root->name, PATH_SEP); + list_for_each_entry(d, &root->children, child) { + printf("%s%s%s, size: 0x%x\n", d->parent->name, PATH_SEP, d->name, d->vnode->size); + stotal += d->vnode->size; + } +} + +void init_bootfs(struct initdata *initdata) +{ + struct bootdesc *bd = initdata->bootdesc; + struct dentry *img_d = &bootfs_dentry[1]; + struct vnode *img_vn = &bootfs_vnode[1]; + struct file *img_f = &bootfs_file[1]; + struct svc_image *img; + + /* The first vfs object slot is for the root */ + init_root(&bootfs_vnode[0], &bootfs_dentry[0]); + + BUG_ON(bd->total_images >= BOOTFS_IMG_MAX); + for (int i = 0; i < bd->total_images; i++) { + img = &bd->images[i]; + + /* Initialise dentry for image */ + img_d->refcnt = 0; + strncpy(img_d->name, img->name, VFS_DENTRY_NAME_MAX); + INIT_LIST_HEAD(&img_d->child); + INIT_LIST_HEAD(&img_d->children); + img_d->vnode = img_vn; + img_d->parent = bootfs_root.d; + list_add(&img_d->child, &bootfs_root.d->children); + + /* Initialise vnode for image */ + img_vn->id = img->phys_start; + img_vn->refcnt = 0; + INIT_LIST_HEAD(&img_vn->dirents); + list_add(&img_d->dref_list, &img_vn->dirents); + img_vn->size = img->phys_end - img->phys_start; + + /* Initialise file struct for image */ + img_f->refcnt = 0; + img_f->dentry = img_d; + + img_d++; + img_vn++; + img_f++; + } +} + +void initialise(void) +{ + request_initdata(&initdata); + init_bootfs(&initdata); + + /* A debug call that lists all vfs structures */ + fs_debug_list_all(bootfs_root.d); +} + diff --git a/tasks/libl4/include/l4lib/ipcdefs.h b/tasks/libl4/include/l4lib/ipcdefs.h index 8ea92c3..cd503a3 100644 --- a/tasks/libl4/include/l4lib/ipcdefs.h +++ b/tasks/libl4/include/l4lib/ipcdefs.h @@ -38,5 +38,6 @@ #define L4_IPC_TAG_WRITE 14 #define L4_IPC_TAG_LSEEK 15 #define L4_IPC_TAG_CLOSE 16 +#define L4_IPC_TAG_BRK 17 #endif /* __IPCDEFS_H__ */ diff --git a/tasks/libposix/open.c b/tasks/libposix/open.c index 1f9565e..a53569f 100644 --- a/tasks/libposix/open.c +++ b/tasks/libposix/open.c @@ -20,6 +20,7 @@ static inline int l4_open(const char *pathname, int flags, mode_t mode) write_mr(L4SYS_ARG0, (unsigned long)pathname); write_mr(L4SYS_ARG1, flags); + write_mr(L4SYS_ARG2, (u32)mode); /* Call pager with shmget() request. Check ipc error. */ if ((errno = l4_sendrecv(VFS_TID, VFS_TID, L4_IPC_TAG_OPEN)) < 0) { diff --git a/tasks/mm0/main.c b/tasks/mm0/main.c index 0225c32..6122790 100644 --- a/tasks/mm0/main.c +++ b/tasks/mm0/main.c @@ -85,6 +85,10 @@ void handle_requests(void) sys_mmap(sender, args->start, args->length, args->prot, args->flags, args->fd, args->offset); break; } + case L4_IPC_TAG_BRK: { +// sys_brk(sender, (void *)mr[0]); +// break; + } case L4_IPC_TAG_MUNMAP: { /* TODO: Use arg struct instead */ // sys_munmap(sender, (void *)mr[0], (int)mr[1]); diff --git a/tasks/mm0/mmap.extra.c.code b/tasks/mm0/mmap.extra.c.code deleted file mode 100644 index dad4669..0000000 --- a/tasks/mm0/mmap.extra.c.code +++ /dev/null @@ -1,258 +0,0 @@ -#if 0 -void shm_request_handler(struct shm_request *request, struct id_pool **shm_ids) -{ - struct shm_descriptor *pending, *new; - struct shm_kdata *kdata; - - if (request->type == SHM_SENDER) { - list_for_each_entry(pending, &shm_pending_list, list) { - kdata = &pending->kdata; - - /* - * The receiver request should have set this, and also - * few other parameters should match with this request. - */ - if (kdata->receiver == request->pair && - kdata->npages == request->npages && - kdata->sender == request->self) { - /* Fill in rest of the incomplete information */ - kdata->send_pfn = request->pfn; - - /* Allocate a new id for the shm setup */ - pending->shmid = id_new(*shm_ids); - - /* Add it to completed shm area list */ - list_del(&pending->list); - list_add(&pending->list, &shm_desc_list); - - /* Arrange the actual shm setup with the kernel */ - do_shm_setup(pending); - return; - } - } - /* - * If no matching pending shm descriptor is found, a new one - * should be allocated. - */ - new = kzalloc(sizeof(struct shm_descriptor)); - kdata = &new->kdata; - - /* Fill in all information available from the request */ - kdata->sender = request->self; - kdata->receiver = request->pair; - kdata->send_pfn = request->pfn; - kdata->npages = request->npages; - - /* Add the descriptor to pending list. */ - INIT_LIST_HEAD(&new->list); - list_add(&new->list, &shm_pending_list); - - } else if (request->type == SHM_RECEIVER) { - list_for_each_entry(pending, &shm_pending_list, list) { - kdata = &pending->kdata; - - /* - * The sender request should have already setup, and - * few other parameters should match with this request. - */ - if (kdata->receiver == request->self && - kdata->npages == request->npages && - kdata->sender == request->pair) { - /* Fill in rest of the incomplete information */ - kdata->recv_pfn = request->pfn; - - /* Allocate a new id for the shm setup */ - pending->shmid = id_new(*shm_ids); - list_del(&pending->list); - - /* Add it to completed shm area list */ - list_add(&pending->list, &shm_desc_list); - - /* Arrange the actual shm setup with the kernel */ - do_shm_setup(pending); - return; - } - } - /* - * If no matching pending shm descriptor is found, a new one - * should be allocated. - */ - new = kzalloc(sizeof(struct shm_descriptor)); - kdata = &new->kdata; - - /* Fill in all information available from the request */ - kdata->sender = request->pair; - kdata->receiver = request->self; - kdata->recv_pfn = request->pfn; - kdata->npages = request->npages; - - /* Add the descriptor to pending list. */ - INIT_LIST_HEAD(&new->list); - list_add(&new->list, &shm_pending_list); - } -} -#endif - -/* Original incomplete untested code for do_munmap */ - -/* Unmaps given address from its vma. Releases those pages in that vma. */ -int do_munmap(unsigned long addr, unsigned long size, struct tcb *task) -{ - unsigned long npages = __pfn(size); - unsigned long pfn_start = __pfn(addr); - unsigned long pfn_end = pfn_start + npages; - struct vm_area *vma = 0, *shadow = 0, *vma_new = 0, *shadow_new = 0; - struct list_head *n; - - if (!(vma = find_vma(addr, &task->vm_area_list))) - return -EINVAL; - - /* Do the real file's vma. Split needed? */ - if (vma->pfn_start < pfn_start && vma->pfn_end > pfn_end) { - if (!(vma_new = kzalloc(sizeof(struct vm_area)))) - return -ENOMEM; - vma = vma_split(vma, vma_new, pfn_start, pfn_end); - INIT_LIST_HEAD(&vma_new->list); - INIT_LIST_HEAD(&vma_new->shadow_list); - list_add(&vma_new->list, &vma->list); - - /* Shrink needed? */ - } else if (((vma->pfn_start == pfn_start) && (vma->pfn_end > pfn_end)) - || ((vma->pfn_start < pfn_start) && (vma->pfn_end == pfn_end))) - vma = vma_shrink(vma, pfn_start, pfn_end); - - /* Destroy needed? */ - else if ((vma->pfn_start == pfn_start) && (vma->pfn_end == pfn_end)) { - /* NOTE: VMA can't be referred after this point. */ - vma_destroy(vma); - goto pgtable_unmap; - } else - BUG(); - - /* Sort out the shadows, if any. non-cow mappings would skip this. */ - list_for_each_entry(shadow, vma->shadow_list, shadow_list) { - /* Split needed? */ - if (shadow->pfn_start < pfn_start && shadow->pfn_end > pfn_end) { - shadow_new = kzalloc(sizeof(struct vm_area)); - vma = vma_split(shadow, shadow_new, pfn_start, pfn_end); - INIT_LIST_HEAD(&shadow_new->list); - list_add_tail(&shadow_new->list, &shadow->list); - - /* Destroy needed? */ - } else if ((shadow->pfn_start == pfn_start) && (shadow->pfn_end == pfn_end)) { - /* NOTE: vma can't be referred after this point. */ - vma_destroy(shadow); - - /* Shrink needed? */ - } else if (((shadow->pfn_start == pfn_start) && (shadow->pfn_end > pfn_end)) - || ((shadow->pfn_start < pfn_start) && (shadow->pfn_end == pfn_end))) - shadow = vma_shrink(shadow, pfn_start, pfn_end); - else - BUG(); - } - - /* - * If the real file was COW and its vma had split, the shadows must be - * separated into the two new vmas according to which one they - * belong to. - */ - if (vma_new) - list_for_each_entry_safe(shadow, n, vma->shadow_list, shadow_list) { - if (shadow->pfn_start >= vma_new->pfn_start && - shadow->pfn_end <= vma_new->pfn_end) { - list_del_init(&shadow->list); - list_add(&shadow->list, &vma_new->shadow_list); - } else - BUG_ON(!(shadow->pfn_start >= vma->pfn_start && - shadow->pfn_end <= vma->pfn_end)); - } - - /* The stage where the actual pages are unmapped from the page tables */ -pgtable_unmap: - - /* TODO: - * - Find out if the vma is cow, and contains shadow vmas. - * - Remove and free shadow vmas or the real vma, or shrink them if applicable. - * - Free the swap file segment for the vma if vma is private (cow). - * - Reduce refcount for the in-memory pages. - * - If refcount is zero (they could be shared!), either add pages to some page - * cache, or simpler the better, free the actual pages back to the page allocator. - * - l4_unmap() the corresponding virtual region from the page tables. - */ -} - -/* - * TODO: UNUSED: This used to be used during mmap to map swap for anon - * areas. - * Now same code might be used *during swapping* to set up the swapfile - * for the very same areas. Also the fault handler might find the swap - * slot on the file using info from this code. - * - * For an anonymous and/or private region this provides a per-task swap - * file for backing. For shared memory it attaches shm regions to a - * global shm swap file. - */ -struct vm_file *setup_swap_file(unsigned long map_address, - unsigned int flags, unsigned long *f_offset, - struct tcb *t, int pages) -{ - struct vm_file *swap_file; - unsigned long shm_f_offset; - - BUG_ON(!(flags & VMA_ANON)) - BUG_ON(!is_page_aligned(map_address)); - - - /* - * All anon shared memory is kept on a single global swap file. Shm - * addresses are globally the same among processes, so the file mapping - * is a function of shm segment address. - */ - if (flags & VMA_SHARED) { - swap_file = shm_swap_file; - *file = swap_file; - - /* - * The file offset is the shm segment's page offset in the shm - * virtual region, which is unique among all processes. - */ - *f_offset = __pfn(map_address) - SHM_AREA_START; - - /* - * Extend the file if this shm vaddr lies beyond file end. - */ - if (swap_file->length < __pfn_to_addr(*f_offset + pages)) - swap_file->length = __pfn_to_addr(*f_offset + npages); - - /* Regular non-shareable anonymous regions */ - } else { - swap_file = t->swap_file; - - /* - * Anonymous vmas are mapped into process' swap during mmap. - * Copy-on-write vmas are mapped into swap as shadow vmas when - * they get copy-on-write'ed. - */ - *file = swap_file; - BUG_ON(!is_page_aligned(swap_file->length)); - - /* - * vmas map into the next available swap slot. The whole vma is - * mapped so that it has a contiguous existence on swap file. - * Swap slots are allocated by the per-task swap offset pool. - */ - *f_offset = vaddr_pool_new(task->swap_file_offset_pool, pages); - - /* If new offset is greater than current file size, update. */ - if (__pfn_to_addr(*f_offset + pages) > swap_file->length) - swap_file->length = __pfn_to_addr(*f_offset + pages); - BUG_ON(swap_file->length > TASK_SWAPFILE_MAXSIZE); - } - - printf("Set up swapfile for anon%svma @ pfn offset %d. ", - (flags & VMA_SHARED) ? "/shared " : " ", - "Swap file size: %d bytes.\n", *f_offset, swap_file->length); - - return 0; -} - diff --git a/tasks/mm0/src/mmap.c b/tasks/mm0/src/mmap.c index 3cb7e66..5076cb4 100644 --- a/tasks/mm0/src/mmap.c +++ b/tasks/mm0/src/mmap.c @@ -18,13 +18,6 @@ static struct vm_file shm_swap_file; static struct id_pool *swap_file_offset_pool; */ -/* mmap system call implementation */ -int sys_mmap(l4id_t sender, void *start, size_t length, int prot, - int flags, int fd, off_t offset) -{ - return 0; -} - /* TODO: This is to be implemented when fs0 is ready. */ int do_msync(void *addr, unsigned long size, unsigned int flags, struct tcb *task) { @@ -487,3 +480,18 @@ int do_mmap(struct vm_file *mapfile, unsigned long f_offset, struct tcb *t, return 0; } +/* mmap system call implementation */ +int sys_mmap(l4id_t sender, void *start, size_t length, int prot, + int flags, int fd, off_t offset) +{ + return 0; +} + +/* Sets the end of data segment for sender */ +int sys_brk(l4id_t sender, void *ds_end) +{ + // do_brk(find_task(sender), ds_end); + return 0; +} + + diff --git a/tasks/test0/main.c b/tasks/test0/main.c index 8da9f53..ac854c2 100644 --- a/tasks/test0/main.c +++ b/tasks/test0/main.c @@ -28,7 +28,7 @@ void main(void) wait_pager(0); /* Check mmap/munmap */ - // mmaptest(); + mmaptest(); /* Check shmget/shmat/shmdt */ shmtest(); diff --git a/tasks/test0/src/mmaptest.c b/tasks/test0/src/mmaptest.c index 9cecfe8..1ab2898 100644 --- a/tasks/test0/src/mmaptest.c +++ b/tasks/test0/src/mmaptest.c @@ -1,7 +1,7 @@ /* * Test mmap/munmap posix calls. * - * Copyright (C) 2007 - 2008 Bahadir Balban + * Copyright (C) 2007, 2008 Bahadir Balban */ #include #include @@ -58,3 +58,4 @@ int mmaptest(void) return 0; } + diff --git a/tools/cml2header.pyc b/tools/cml2header.pyc deleted file mode 100644 index f4272afcf3b3489b4a291f2fd57309cae6728124..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4190 zcmb7HTXP$?6$X|Uk!#&0M{y?OAd#KWo={5C_C?c664{|WiRsMBZd$eJ&UzOV*C7}5 z0<@xz^kh#mljr=CKK5Vr4>aF7;6?JJ9g7mMSm5B`;9S4`*MFA6AM{V1R7`#iJU>OV z4qb+SDZUfpa5k3WP)_FqaTrX;6>(UZj;rFZDl#n9MOG0ng?J&vUk_^{tJ2G1UFZdo z)x^_4m@7i+I<3n>3W>uGS_?Qh|1W-BcNN2QIQXQmlT4SfE0e+w5@*VpxD`-*j%FXA z(_qfRkyw(?f=oCo5HBG&1Yl_(z(f)(`Tv@DiOV!dVv?{aqJtJ`!Y1g#=A+5M+Nwm6 zKq@swFFzWWiOWr)dig*rXRx@hysSJGHeEk)DoqOYM60|=2jfg<7$|GTWvam?(>q}^ zl{kf3fVPij-#`Zg-%`0%g>lMi*CKT|qA0Z^ zJ*H+jf^3fNl3P#_5uN0!=&T;}T6hZX?7JB4nvvTjvHqz`v+Il**xk7Wc19=6Dvt9a zcX7N-Oz1cvQ({<0BN6xx|Hc4!IQ4f3#AriEhpXT{5HA98CI#7?NZ4GMnv&qX!XyEc zeE&J^%CSp`v#L0)icw9-uW2_FlUHa4N;<2F)0!}Am<>b@x*E;OXZN`g2TVZJ)5>`w z90VffgUZfcxWai`2sA z=qEODu4Lt#kuD-$S;F#hnL7=wvWqx6nrC>F4vf{zBqAkyV-{Wt*Tjq&yU82b98m(3 z`$Je3vPhwiFKuaJ%?!x<*YIMmqZ8Ftxgn`lSMn;WPh9R2J1OR{NUl8$6wu@ z5*C&c(R`WY=yDz5NW-17h|cF|!p+h?kB&++9x+ANAY?h-U73&kXf(*(Jm@0w|LARE zLK@J|967l?89p%srhlFc#`>}$7LoF95~B~%iP{IUA=eQ{SLG5$Yw|6`7DmAaqH7bQ zMYMH#1{`N32{n$h-(lcO25jU5XGDH4MduzIx`U|>!VND-ZUyouMO!A|M|6{}eUBK; zJ?27bqw>--F!BzYyOTfHg&HNUzh_slEi)*LM5DjYt=nO8M8)0uoTEsHP&HD9x!dZ{v#%!73hGX{Y|b;zQ{mnThQ6o zq(o7D`X59U5cwiCsYINyM%SR;>O|)?JfZ)4NM5t-=931OL5alS!A6&(Vb_w}{zf~L z*&FlMzP*i?FDSofgg2&u2uNZ$_!UgTzUqvRT1I2)cFz8in5-ZBq(j;Ih4tCN97i<&y9IFN#YnlH+LXR8nN>NEaFqPg`b` zCL&Sgy-%i=tryI!W$0b~F>mLz9gW?=hFC zIL=HO#}P5{?oFP|>D4=Sn_hR(&E?|J>w(?~8wEKn7n*vtE}NCb&F1xHV`Vd?HM%&h zvyV35iO9q+09J)K*`^AJY=~GS;3CC4$SlCRe`f@Y7FD7F4hn_2E+l@GO*|H* zef%8-=plcN6#G{-_Z_hcgxb0>;hbgP$!)C6mks@7TDEh-jWceR3%#M(oCu9@odRwjqpJrA?+f0In&H?mvuvL(^y?`V(~@p__}#qt}y}tJ3d%4E~X| Tz6w^0Kq&kdY#cSOFUem3snJ-4