Changeset 611 for trunk/kernel/syscalls/sys_closedir.c
- Timestamp:
- Jan 9, 2019, 3:02:51 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kernel/syscalls/sys_closedir.c
r473 r611 1 1 /* 2 * sys_closedir.c - Close an open directory.2 * sys_closedir.c - Close an open VFS directory. 3 3 * 4 * Author Alain Greiner (2016, 2017)4 * Author Alain Greiner (2016,2017,2018) 5 5 * 6 6 * Copyright (c) UPMC Sorbonne Universites … … 22 22 */ 23 23 24 #include <kernel_config.h> 24 25 #include <hal_kernel_types.h> 25 26 #include <vfs.h> … … 27 28 #include <thread.h> 28 29 #include <process.h> 30 #include <remote_dir.h> 29 31 #include <errno.h> 30 32 #include <syscalls.h> … … 34 36 int sys_closedir ( DIR * dirp ) 35 37 { 36 printk("\n[ERROR] in %s : not implemented yet\n", __FUNCTION__, dirp ); 37 return -1; 38 xptr_t dir_xp; // extended pointer on remote_dir_t structure 39 40 thread_t * this = CURRENT_THREAD; // client thread 41 process_t * process = this->process; // client process 42 43 #if (DEBUG_SYS_CLOSEDIR || CONFIG_INSTRUMENTATION_SYSCALLS) 44 uint64_t tm_start = hal_get_cycles(); 45 #endif 46 47 #if DEBUG_SYS_CLOSEDIR 48 if( DEBUG_SYS_CLOSEDIR < tm_start ) 49 printk("\n[%s] thread[%x,%x] enter for DIR <%x> / cycle %d\n", 50 __FUNCTION__, process->pid, this->trdid, dirp, (uint32_t)tm_start ); 51 #endif 52 53 // get extended pointer on kernel remote_dir_t structure from dirp 54 dir_xp = remote_dir_from_ident( (intptr_t)dirp ); 55 56 if( dir_xp == XPTR_NULL ) 57 { 58 59 #if DEBUG_SYSCALLS_ERROR 60 printk("\n[ERROR] in %s / thread[%x,%x] : DIR pointer %x not registered\n", 61 __FUNCTION__ , process->pid , this->trdid, dirp ); 62 #endif 63 this->errno = EINVAL; 64 return -1; 65 } 66 67 // delete kernel remote_dir_t structure 68 remote_dir_destroy( dir_xp ); 69 70 hal_fence(); 71 72 #if (DEBUG_SYS_CLOSEDIR || CONFIG_INSTRUMENTATION_SYSCALLS) 73 uint64_t tm_end = hal_get_cycles(); 74 #endif 75 76 #if DEBUG_SYS_CLOSEDIR 77 if( DEBUG_SYS_CLOSEDIR < tm_end ) 78 printk("\n[%s] thread[%x,%x] exit for DIR <%x> / cycle %d\n", 79 __FUNCTION__, process->pid, this->trdid, dirp, (uint32_t)tm_end ); 80 #endif 81 82 #if CONFIG_INSTRUMENTATION_SYSCALLS 83 hal_atomic_add( &syscalls_cumul_cost[SYS_CLOSEDIR] , tm_end - tm_start ); 84 hal_atomic_add( &syscalls_occurences[SYS_CLOSEDIR] , 1 ); 85 #endif 86 87 return 0; 88 38 89 } // end sys_closedir()
Note: See TracChangeset
for help on using the changeset viewer.