Mercurial > hg > Members > menikon > CbC_xv6
changeset 241:bc2f3d24faa9
add fs_impl_private
author | menikon |
---|---|
date | Thu, 30 Jan 2020 17:14:45 +0900 |
parents | 7ec574dfe64f |
children | 5217253368ad |
files | src/CMakeLists.txt src/gearsTools/lib/Gears/Context/Template/XV6.pm src/impl/fs_impl.cbc src/impl/fs_impl.h src/impl/fs_impl_private.cbc |
diffstat | 5 files changed, 62 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/CMakeLists.txt Thu Jan 30 14:53:02 2020 +0900 +++ b/src/CMakeLists.txt Thu Jan 30 17:14:45 2020 +0900 @@ -129,7 +129,7 @@ string.c arm.c asm.S bio.c buddy.c console.cbc exec.c file.cbc fs.c log.c main.c memide.c pipe.cbc proc.cbc spinlock.cbc start.c swtch.S syscall.cbc sysfile.cbc sysproc.c trap_asm.S trap.c vm.c device/picirq.c device/timer.c device/uart.c SingleLinkedStack.cbc entry.S impl/vm_impl.cbc impl/vm_impl_private.cbc -impl/fs_impl.cbc +impl/fs_impl.cbc impl/fs_impl_private.cbc ) # sys_read_impl.cbc
--- a/src/gearsTools/lib/Gears/Context/Template/XV6.pm Thu Jan 30 14:53:02 2020 +0900 +++ b/src/gearsTools/lib/Gears/Context/Template/XV6.pm Thu Jan 30 17:14:45 2020 +0900 @@ -166,6 +166,8 @@ typedef uint32 pde_t; typedef struct stat stat; typedef struct superblock superblock; +typedef struct buf buf; +typedef struct dinode dinode; EOFEOF print $out $str; }
--- a/src/impl/fs_impl.cbc Thu Jan 30 14:53:02 2020 +0900 +++ b/src/impl/fs_impl.cbc Thu Jan 30 17:14:45 2020 +0900 @@ -1,7 +1,13 @@ -#include "../../context.h" +#include "types.h" #include "defs.h" +#include "param.h" +#include "stat.h" +#include "mmu.h" +#include "proc.h" +#include "spinlock.h" +#include "buf.h" #include "fs.h" -#include "buf.h" +#include "file.h" #interface "fs.dg" // ---- @@ -22,6 +28,8 @@ fs->readsb = C_readsbfs_impl; fs->iinit = C_iinitfs_impl; fs->ialloc = C_iallocfs_impl; + fs_impl->allocinode = C_allocinode; + fs_impl->allocinode_loop = C_allocinode_loop; fs->iupdate = C_iupdatefs_impl; fs->idup = C_idupfs_impl; fs->ilock = C_ilockfs_impl; @@ -51,14 +59,20 @@ goto next(...); } +struct { + struct spinlock lock; + struct inode inode[NINODE]; +} icache; + __code iinitfs_impl(struct fs_impl* fs, __code next(...)) { + initlock(&icache.lock, "icache"); + goto next(...); } __code iallocfs_impl(struct fs_impl* fs, uint dev, short type, __code next(...)) { - - goto next(...); + goto allocinode(fs, dev, type, next(...)); } __code iupdatefs_impl(struct fs_impl* fs, struct inode* ip, __code next(...)) {
--- a/src/impl/fs_impl.h Thu Jan 30 14:53:02 2020 +0900 +++ b/src/impl/fs_impl.h Thu Jan 30 17:14:45 2020 +0900 @@ -1,7 +1,13 @@ -typedef struct fs_impl<Impl, Isa> impl fs{ +typedef struct fs_impl<Type, Isa> impl fs{ union Data* fs_impl; - + struct superblock* sb; + uint dev; + short type; + struct buf* bp; + struct dinode* dip; + int inum; - - + __code allocinode(Type* fs_impl, uint dev, short type, __code next(...)); + __code allocinode_loop(Type* fs_impl, int inum, uint dev, struct superblock* sb, struct buf* bp, struct dinode* dip, __code next(...)); + __code next(...); } fs_impl;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/impl/fs_impl_private.cbc Thu Jan 30 17:14:45 2020 +0900 @@ -0,0 +1,31 @@ +#include "types.h" +#include "defs.h" +#include "param.h" +#include "stat.h" +#include "mmu.h" +#include "proc.h" +#include "spinlock.h" +#include "buf.h" +#include "fs.h" +#include "file.h" +#interface "fs_impl.h" + +/* +fs_impl* createfs_impl2(); +*/ + +__code allocinode(struct fs_impl* fs_impl, uint dev, struct superblock* sb, __code next(...)){ //:skip + + readsb(dev, sb); + + goto allocinode_loop(fs_impl, inum, dev, sb, bp, dip, next(...)); + +} + +typedef struct buf buf; +typedef struct dinode dinode; +__code allocinode_loop(struct fs_impl* fs_impl, int inum, uint dev, struct superblock* sb, struct buf* bp, struct dinode* dip, __code next(...)){ //:skip + + goto next(...); + +}