Changeset 633 for trunk/kernel
- Timestamp:
- May 28, 2019, 6:10:15 PM (6 years ago)
- Location:
- trunk/kernel
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kernel/Makefile
r626 r633 284 284 ############################## 285 285 # Rule to generate kernel.elf 286 build/kernel.elf: 286 build/kernel.elf: $(KERN_OBJS) \ 287 287 $(HAL_OBJS_0) \ 288 288 $(HAL_OBJS_1) \ -
trunk/kernel/fs/fatfs.c
r630 r633 2595 2595 fatfs_ctx_t * fatfs_ctx_ptr; // local pointer on FATFS context in FAT cluster 2596 2596 xptr_t fat_mapper_xp; // extended pointer on FAT mapper 2597 mapper_t * fat_mapper_ptr; // local pointer on FAT mapper2598 2597 xptr_t lock_xp; // extended pointer on lock protecting FAT. 2599 2598 xptr_t first_xp; // extended pointer on inode extension … … 2633 2632 loc_fatfs_ctx = vfs_ctx->extend; 2634 2633 2635 // get pointers on FAT mapper2634 // get FAT mapper cluster 2636 2635 fat_mapper_xp = loc_fatfs_ctx->fat_mapper_xp; 2637 2636 fat_cxy = GET_CXY( fat_mapper_xp ); 2638 fat_mapper_ptr = GET_PTR( fat_mapper_xp );2639 2637 2640 2638 // get pointers on FATFS context in FAT cluster -
trunk/kernel/fs/vfs.c
r630 r633 1021 1021 xptr_t iter_xp; // iterator on xlist 1022 1022 mapper_t * mapper_ptr; // local pointer on associated mapper 1023 xptr_t mapper_xp; // extended pointer on mapper1024 1023 vfs_inode_t * inode_ptr; // local pointer on associated inode 1025 xptr_t inode_xp; // extended pointer on inode1026 1024 uint32_t size; // current file size (from inode descriptor) 1027 1025 error_t error; … … 1052 1050 //////// 1) update all dirty pages from mapper to device 1053 1051 1054 // get pointerson mapper associated to file1052 // get local pointer on mapper associated to file 1055 1053 mapper_ptr = hal_remote_lpt( XPTR( file_cxy , &file_ptr->mapper ) ); 1056 mapper_xp = XPTR( file_cxy , mapper_ptr );1057 1054 1058 1055 // copy all dirty pages from mapper to device … … 1083 1080 //////// 2) update file size in all parent directory mapper(s) and update device 1084 1081 1085 // get pointerson remote inode1082 // get local pointer on remote inode 1086 1083 inode_ptr = hal_remote_lpt( XPTR( file_cxy , &file_ptr->inode ) ); 1087 inode_xp = XPTR( file_cxy , inode_ptr );1088 1084 1089 1085 // get file size from remote inode … … 1701 1697 // build extended pointer on lock protecting Inode Tree (in VFS root inode) 1702 1698 vfs_root_xp = process->vfs_root_xp; 1703 vfs_root_ptr = GET_PTR( root_xp );1704 vfs_root_cxy = GET_CXY( root_xp );1699 vfs_root_ptr = GET_PTR( vfs_root_xp ); 1700 vfs_root_cxy = GET_CXY( vfs_root_xp ); 1705 1701 lock_xp = XPTR( vfs_root_cxy , &vfs_root_ptr->main_lock ); 1706 1702 … … 2108 2104 cxy_t inode_cxy; // inode cluster identifier 2109 2105 vfs_inode_t * inode_ptr; // inode local pointer 2110 vfs_inode_type_t inode_type; // target inode type2111 2106 2112 2107 // check lookup working mode … … 2127 2122 2128 2123 // get inode type from remote inode 2129 inode_type = hal_remote_l32( XPTR( inode_cxy , &inode_ptr->type ) );2130 2131 // TODO implement this function2124 // inode_type = hal_remote_l32( XPTR( inode_cxy , &inode_ptr->type ) ); 2125 2126 // TODO finalize implementation 2132 2127 2133 2128 assert( false , "not implemented" ); 2129 2130 // set inode rights in remote inode 2131 hal_remote_s32( XPTR( inode_cxy , &inode_ptr->rights ) , rights ); 2134 2132 2135 2133 return 0; … … 2473 2471 bool_t last; // true when the name is the last in path 2474 2472 bool_t found; // true when a child has been found 2475 bool_t dir; // searched inode is a directory2476 2473 bool_t create; // searched inode must be created if not found 2477 2474 bool_t excl; // searched inode must not exist … … 2498 2495 2499 2496 // compute lookup flags 2500 dir = (lookup_mode & VFS_LOOKUP_DIR) == VFS_LOOKUP_DIR;2501 2497 create = (lookup_mode & VFS_LOOKUP_CREATE) == VFS_LOOKUP_CREATE; 2502 2498 excl = (lookup_mode & VFS_LOOKUP_EXCL) == VFS_LOOKUP_EXCL; … … 2879 2875 vfs_inode_t * child_ptr; // local pointer on child inode directory 2880 2876 cxy_t child_cxy; // child inode directory cluster identifier 2881 vfs_inode_t * parent_ptr; // local pointer on parent inode directory2882 cxy_t parent_cxy; // parent inode directory cluster identifier2883 2877 vfs_ctx_t * ctx_ptr; // local pointer on child inode FS context 2884 2878 vfs_fs_type_t fs_type; // FS type of child inode … … 2906 2900 child_cxy = GET_CXY( child_xp ); 2907 2901 child_ptr = GET_PTR( child_xp ); 2908 2909 // get parent directory cluster and local pointer2910 parent_cxy = GET_CXY( parent_xp );2911 parent_ptr = GET_PTR( parent_xp );2912 2902 2913 2903 // get child inode FS type … … 3052 3042 3053 3043 // don't register <..> dentry in parent_inode xlist of parents 3054 // parents_root_xp = XPTR( parent_cxy , &parent_ptr->parents );3055 // parents_entry_xp = XPTR( child_cxy , &dentry_ptr->parents );3056 // xlist_add_first( parents_root_xp , parents_entry_xp );3057 // hal_remote_atomic_add( XPTR( parent_cxy , &parent_ptr->links ) , 1 );3058 3044 3059 3045 // update "parent" and "child_xp" fields in <..> dentry … … 3369 3355 #if(DEBUG_VFS_ADD_CHILD & 1) 3370 3356 if( DEBUG_VFS_ADD_CHILD < cycle ) 3371 printk("\n[%s] thread[%x,%x] / dentry (%x,%x) registered in child inode(%x,%x)\n",3357 printk("\n[%s] thread[%x,%x] link dentry(%x,%x) to child inode(%x,%x)\n", 3372 3358 __FUNCTION__, this->process->pid, this->trdid, 3373 3359 parent_cxy, new_dentry_ptr, child_cxy, new_inode_ptr ); … … 3381 3367 #if(DEBUG_VFS_ADD_CHILD & 1) 3382 3368 if( DEBUG_VFS_ADD_CHILD < cycle ) 3383 printk("\n[%s] thread[%x,%x] / dentry (%x,%x) registered in parent inode(%x,%x)\n",3369 printk("\n[%s] thread[%x,%x] link dentry(%x,%x) to parent inode(%x,%x)\n", 3384 3370 __FUNCTION__, this->process->pid, this->trdid, 3385 3371 parent_cxy, new_dentry_ptr, parent_cxy, parent_inode_ptr ); … … 3394 3380 if( DEBUG_VFS_ADD_CHILD < cycle ) 3395 3381 printk("\n[%s] thread[%x,%x] exit for <%s> / cycle %d\n", 3396 __FUNCTION__, this->process->pid, this->trdid, name, (uint32_t)hal_get_cycles());3382 __FUNCTION__, this->process->pid, this->trdid, name, cycle ); 3397 3383 #endif 3398 3384 -
trunk/kernel/fs/vfs.h
r626 r633 153 153 typedef struct vfs_inode_s 154 154 { 155 156 157 158 159 160 161 155 struct vfs_ctx_s * ctx; /*! local pointer on FS context */ 156 uint32_t inum; /*! inode identifier (unique in file system) */ 157 uint32_t attr; /*! inode attributes (see above) */ 158 vfs_inode_type_t type; /*! inode type (see above) */ 159 uint32_t size; /*! number of bytes */ 160 uint32_t uid; /*! user owner identifier */ 161 uint32_t gid; /*! group owner identifier */ 162 162 uint32_t rights; /*! access rights */ 163 164 165 166 167 168 169 163 xlist_entry_t parents; /*! root of list of parents dentries */ 164 uint32_t links; /*! number of parent dentries (hard links) */ 165 xhtab_t children; /*! embedded xhtab of children dentries */ 166 remote_rwlock_t size_lock; /*! protect read/write to size */ 167 remote_rwlock_t main_lock; /*! protect inode tree traversal and modifs */ 168 struct mapper_s * mapper; /*! associated file cache */ 169 void * extend; /*! fs_type_specific inode extension */ 170 170 } 171 171 vfs_inode_t; -
trunk/kernel/kern/kernel_init.c
r632 r633 277 277 uint32_t x; // X cluster coordinate 278 278 uint32_t y; // Y cluster coordinate 279 uint32_t channels; // number of channels280 279 281 280 // get number of peripherals and base of devices array from boot_info … … 289 288 func = FUNC_FROM_TYPE( dev_tbl[i].type ); 290 289 impl = IMPL_FROM_TYPE( dev_tbl[i].type ); 291 channels = dev_tbl[i].channels;292 290 293 291 if (func == DEV_FUNC_TXT ) … … 587 585 // initialize the replicated chdev_dir[x][y] structures 588 586 // defining the extended pointers on chdev descriptors 589 xptr_t * entry ;587 xptr_t * entry = NULL; 590 588 591 589 if(func==DEV_FUNC_IOB ) entry = &chdev_dir.iob; … … 603 601 cxy_t cxy = HAL_CXY_FROM_XY( x , y ); 604 602 605 if( cluster_is_active( cxy ) )603 if( cluster_is_active( cxy ) && ( entry != NULL ) ) 606 604 { 607 605 hal_remote_s64( XPTR( cxy , entry ), -
trunk/kernel/kern/process.c
r629 r633 789 789 thread_t * this; // pointer on calling thread 790 790 uint32_t ltid; // index in process th_tbl[] 791 cxy_t owner_cxy; // target process owner cluster792 791 uint32_t count; // requests counter 793 792 volatile uint32_t ack_count; // acknowledges counter … … 807 806 assert( (LPID_FROM_PID( process->pid ) != 0 ), 808 807 "process %x is not an user process\n", process->pid ); 809 810 // get target process owner cluster811 owner_cxy = CXY_FROM_PID( process->pid );812 808 813 809 // get lock protecting process th_tbl[] … … 873 869 xptr_t client_xp ) 874 870 { 875 thread_t * this; // pointer on calling thread876 871 thread_t * target; // local pointer on target thread 877 872 xptr_t target_xp; // extended pointer on target thread … … 881 876 882 877 // get calling thread pointer 883 this = CURRENT_THREAD;884 878 885 879 // get target process owner cluster … … 887 881 888 882 #if DEBUG_PROCESS_SIGACTION 889 uint32_t cycle = (uint32_t)hal_get_cycles(); 883 thread_t * this = CURRENT_THREAD; 884 uint32_t cycle = (uint32_t)hal_get_cycles(); 890 885 if( DEBUG_PROCESS_SIGACTION < cycle ) 891 886 printk("\n[%s] thread[%x,%x] enter for process %x n cluster %x / cycle %d\n", … … 937 932 { 938 933 thread_t * target; // pointer on target thead 939 thread_t * this; // pointer on calling thread940 934 uint32_t ltid; // index in process th_tbl 941 935 uint32_t count; // requests counter 942 936 943 // get calling thread pointer944 this = CURRENT_THREAD;945 946 937 #if DEBUG_PROCESS_SIGACTION 947 pid_t pid = process->pid; 948 uint32_t cycle = (uint32_t)hal_get_cycles(); 938 thread_t * this = CURRENT_THREAD; 939 pid_t pid = process->pid; 940 uint32_t cycle = (uint32_t)hal_get_cycles(); 949 941 if( DEBUG_PROCESS_SIGACTION < cycle ) 950 942 printk("\n[%s] thread[%x,%x] enter for process %x in cluster %x / cycle %d\n", -
trunk/kernel/kern/thread.c
r629 r633 1082 1082 ltid_t target_ltid; // target thread local index 1083 1083 xptr_t joining_xp; // extended pointer on joining thread 1084 thread_t * joining_ptr; // pointer on joining thread1085 cxy_t joining_cxy; // joining thread cluster1086 1084 1087 1085 // get target thread cluster and local pointer … … 1143 1141 // get extended pointer on joining thread 1144 1142 joining_xp = (xptr_t)hal_remote_l64( target_join_xp_xp ); 1145 joining_ptr = GET_PTR( joining_xp );1146 joining_cxy = GET_CXY( joining_xp );1147 1143 1148 1144 // reset the join_done flag in target thread -
trunk/kernel/kernel_config.h
r632 r633 66 66 67 67 #define DEBUG_DEVFS_GLOBAL_INIT 0 68 #define DEBUG_DEVFS_LOCAL_INIT 068 #define DEBUG_DEVFS_LOCAL_INIT 1 69 69 #define DEBUG_DEVFS_MOVE 0 70 70 … … 112 112 #define DEBUG_KMEM 0 113 113 114 #define DEBUG_KERNEL_INIT 0114 #define DEBUG_KERNEL_INIT 1 115 115 116 116 #define DEBUG_MAPPER_GET_PAGE 0 … … 141 141 #define DEBUG_QUEUELOCK_CXY 0 142 142 143 #define DEBUG_RPC_CLIENT_GENERIC 2 1000000144 #define DEBUG_RPC_SERVER_GENERIC 2 1000000143 #define DEBUG_RPC_CLIENT_GENERIC 2 144 #define DEBUG_RPC_SERVER_GENERIC 2 145 145 146 146 #define DEBUG_RPC_KCM_ALLOC 0 … … 148 148 #define DEBUG_RPC_MAPPER_HANDLE_MISS 0 149 149 #define DEBUG_RPC_MAPPER_MOVE_USER 0 150 #define DEBUG_RPC_PMEM_GET_PAGES 21000000151 #define DEBUG_RPC_PMEM_RELEASE_PAGES 0152 150 #define DEBUG_RPC_PROCESS_MAKE_FORK 0 153 151 #define DEBUG_RPC_PROCESS_SIGACTION 0 154 152 #define DEBUG_RPC_THREAD_USER_CREATE 0 155 153 #define DEBUG_RPC_THREAD_KERNEL_CREATE 0 156 #define DEBUG_RPC_VFS_DENTRY_CREATE 0154 #define DEBUG_RPC_VFS_DENTRY_CREATE 2 157 155 #define DEBUG_RPC_VFS_DENTRY_DESTROY 0 158 156 #define DEBUG_RPC_VFS_DEVICE_GET_DENTRY 0 … … 168 166 #define DEBUG_RPC_VMM_DELETE_VSEG 0 169 167 170 #define DEBUG_RWLOCK_TYPE 35// lock type 0 is undefined => no debug171 #define DEBUG_RWLOCK_PTR 0 xb1650172 #define DEBUG_RWLOCK_CXY 0 x11168 #define DEBUG_RWLOCK_TYPE 0 // lock type 0 is undefined => no debug 169 #define DEBUG_RWLOCK_PTR 0 170 #define DEBUG_RWLOCK_CXY 0 173 171 174 172 #define DEBUG_SCHED_HANDLE_SIGNALS 2 … … 230 228 #define DEBUG_USER_DIR 0 231 229 232 #define DEBUG_VFS_ADD_CHILD 0230 #define DEBUG_VFS_ADD_CHILD 1 233 231 #define DEBUG_VFS_ADD_SPECIAL 0 234 232 #define DEBUG_VFS_CHDIR 0 235 233 #define DEBUG_VFS_CLOSE 0 236 #define DEBUG_VFS_DENTRY_CREATE 0 234 #define DEBUG_VFS_DENTRY_CREATE 0 237 235 #define DEBUG_VFS_FILE_CREATE 0 238 236 #define DEBUG_VFS_GET_PATH 0 -
trunk/kernel/libk/user_dir.c
r629 r633 386 386 { 387 387 thread_t * this; // local pointer on calling thread 388 process_t * process; // local pointer on calling process389 388 cluster_t * cluster; // local pointer on local cluster 390 389 intptr_t ident; // user pointer on dirent array … … 401 400 uint32_t responses; // response counter 402 401 403 // get pointers on calling process & thread404 402 this = CURRENT_THREAD; 405 process = this->process;406 403 cluster = LOCAL_CLUSTER; 407 404 … … 415 412 if( cycle > DEBUG_USER_DIR ) 416 413 printk("\n[%s] thread[%x,%x] enter for user_dir (%x,%x) and process %x / cycle %d\n", 417 __FUNCTION__, process->pid, this->trdid, local_cxy, dir, ref_pid, cycle );414 __FUNCTION__, this->process->pid, this->trdid, local_cxy, dir, ref_pid, cycle ); 418 415 #endif 419 416 … … 503 500 if( cycle > DEBUG_USER_DIR ) 504 501 printk("\n[%s] thread[%x,%x] deleted user_dir (%x,%x) / cycle %d\n", 505 __FUNCTION__, process->pid, this->trdid, local_cxy, dir, cycle );502 __FUNCTION__, this->process->pid, this->trdid, local_cxy, dir, cycle ); 506 503 #endif 507 504 -
trunk/kernel/mm/vmm.c
r632 r633 1230 1230 page_t * page_ptr; // page descriptor pointer 1231 1231 xptr_t count_xp; // extended pointer on page refcount 1232 uint32_t count; // current value of page refcount1233 1232 1234 1233 // check arguments … … 1282 1281 // decrement page refcount 1283 1282 count_xp = XPTR( page_cxy , &page_ptr->refcount ); 1284 count =hal_remote_atomic_add( count_xp , -1 );1283 hal_remote_atomic_add( count_xp , -1 ); 1285 1284 1286 1285 // compute the ppn_release condition depending on vseg type -
trunk/kernel/syscalls/sys_read.c
r625 r633 59 59 error_t error; 60 60 vseg_t * vseg; // required for user space checking 61 61 xptr_t file_xp; // remote file extended pointer 62 62 vfs_file_t * file_ptr; // remote file local pointer 63 63 cxy_t file_cxy; // remote file cluster identifier 64 64 uint32_t file_type; // file type 65 uint32_t file_offset; // current file offset66 65 uint32_t file_attr; // file_attribute 67 vfs_inode_t * inode_ptr; // local pointer on associated inode68 66 uint32_t nbytes; // number of bytes actually read 69 67 reg_t save_sr; // required to enable IRQs during syscall … … 132 130 file_cxy = GET_CXY( file_xp ); 133 131 134 // get file type , offset, attributes and associated inode132 // get file type and attributes 135 133 file_type = hal_remote_l32( XPTR( file_cxy , &file_ptr->type ) ); 136 file_offset = hal_remote_l32( XPTR( file_cxy , &file_ptr->offset ) );137 inode_ptr = hal_remote_lpt( XPTR( file_cxy , &file_ptr->inode ) );138 134 file_attr = hal_remote_l32( XPTR( file_cxy , &file_ptr->attr ) ); 139 135 -
trunk/kernel/syscalls/sys_thread_create.c
r626 r633 47 47 void * start_args ) 48 48 { 49 pthread_attr_t kern_attr; // copy of pthread attributes in kernel space 50 thread_t * parent; // pointer on thread executing the pthread_create 51 xptr_t parent_xp; // extended pointer on calling thread 49 pthread_attr_t kern_attr; // copy of pthread attributes in kernel space 50 thread_t * parent; // pointer on thread executing the pthread_create 52 51 cxy_t child_cxy; // created child thread cluster identifier 53 thread_t * child_ptr; // pointer on created child thread 54 xptr_t child_xp; // extended pointer on created thread 55 trdid_t trdid; // created thread identifier 56 process_t * process; // pointer on local process descriptor 57 vseg_t * vseg; // required for user space checking 58 error_t error; 59 60 // get parent thead pointer, extended pointer, and process 61 parent = CURRENT_THREAD; 62 parent_xp = XPTR( local_cxy , parent ); 63 process = parent->process; 52 thread_t * child_ptr; // pointer on created child thread 53 xptr_t child_xp; // extended pointer on created thread 54 trdid_t trdid; // created thread identifier 55 process_t * process; // pointer on local process descriptor 56 vseg_t * vseg; // required for user space checking 57 error_t error; 58 59 // get parent thead pointer, extended pointer, and process 60 parent = CURRENT_THREAD; 61 process = parent->process; 64 62 65 63 #if (DEBUG_SYS_THREAD_CREATE || CONFIG_INSTRUMENTATION_SYSCALLS) -
trunk/kernel/syscalls/sys_thread_join.c
r584 r633 46 46 xptr_t target_join_lock_xp; 47 47 xptr_t target_flags_xp; 48 xptr_t target_blocked_xp;49 48 xptr_t target_join_xp_xp; 50 49 xptr_t killer_xp; … … 126 125 target_join_lock_xp = XPTR( target_cxy , &target_ptr->join_lock ); 127 126 target_flags_xp = XPTR( target_cxy , &target_ptr->flags ); 128 target_blocked_xp = XPTR( target_cxy , &target_ptr->blocked );129 127 target_join_xp_xp = XPTR( target_cxy , &target_ptr->join_xp ); 130 128
Note: See TracChangeset
for help on using the changeset viewer.