Support for SI_CALL_STATS (counting systemcalls).

This commit is contained in:
Philip Homburg 2006-07-10 12:44:43 +00:00
parent 2cf649db2e
commit 7ce17fe655
4 changed files with 34 additions and 0 deletions

View File

@ -33,6 +33,10 @@ struct super_block; /* proto.h needs to know this */
#include "param.h" #include "param.h"
#include "super.h" #include "super.h"
#if ENABLE_SYSCALL_STATS
EXTERN unsigned long calls_stats[NCALLS];
#endif
FORWARD _PROTOTYPE( void fs_init, (void) ); FORWARD _PROTOTYPE( void fs_init, (void) );
FORWARD _PROTOTYPE( void get_work, (void) ); FORWARD _PROTOTYPE( void get_work, (void) );
FORWARD _PROTOTYPE( void init_root, (void) ); FORWARD _PROTOTYPE( void init_root, (void) );
@ -102,6 +106,9 @@ PUBLIC int main()
"FS, bad process, who = %d, call_nr = %d, endpt1 = %d\n", "FS, bad process, who = %d, call_nr = %d, endpt1 = %d\n",
who_e, call_nr, m_in.endpt1); who_e, call_nr, m_in.endpt1);
} else { } else {
#if ENABLE_SYSCALL_STATS
calls_stats[call_nr]++;
#endif
error = (*call_vec[call_nr])(); error = (*call_vec[call_nr])();
} }

View File

@ -38,6 +38,10 @@
#define CORE_NAME "core" #define CORE_NAME "core"
#define CORE_MODE 0777 /* mode to use on core image files */ #define CORE_MODE 0777 /* mode to use on core image files */
#if ENABLE_SYSCALL_STATS
PUBLIC unsigned long calls_stats[NCALLS];
#endif
FORWARD _PROTOTYPE( void free_proc, (struct fproc *freed, int flags)); FORWARD _PROTOTYPE( void free_proc, (struct fproc *freed, int flags));
FORWARD _PROTOTYPE( int dumpcore, (int proc_e, struct mem_map *seg_ptr)); FORWARD _PROTOTYPE( int dumpcore, (int proc_e, struct mem_map *seg_ptr));
FORWARD _PROTOTYPE( int write_bytes, (struct inode *rip, off_t off, FORWARD _PROTOTYPE( int write_bytes, (struct inode *rip, off_t off,
@ -80,6 +84,12 @@ PUBLIC int do_getsysinfo()
src_addr = (vir_bytes) dmap; src_addr = (vir_bytes) dmap;
len = sizeof(struct dmap) * NR_DEVICES; len = sizeof(struct dmap) * NR_DEVICES;
break; break;
#if ENABLE_SYSCALL_STATS
case SI_CALL_STATS:
src_addr = (vir_bytes) calls_stats;
len = sizeof(calls_stats);
break;
#endif
default: default:
return(EINVAL); return(EINVAL);
} }

View File

@ -29,6 +29,10 @@
#include "../../kernel/type.h" #include "../../kernel/type.h"
#include "../../kernel/proc.h" #include "../../kernel/proc.h"
#if ENABLE_SYSCALL_STATS
EXTERN unsigned long calls_stats[NCALLS];
#endif
FORWARD _PROTOTYPE( void get_work, (void) ); FORWARD _PROTOTYPE( void get_work, (void) );
FORWARD _PROTOTYPE( void pm_init, (void) ); FORWARD _PROTOTYPE( void pm_init, (void) );
FORWARD _PROTOTYPE( int get_nice_value, (int queue) ); FORWARD _PROTOTYPE( int get_nice_value, (int queue) );
@ -119,6 +123,9 @@ PUBLIC int main()
if ((unsigned) call_nr >= NCALLS) { if ((unsigned) call_nr >= NCALLS) {
result = ENOSYS; result = ENOSYS;
} else { } else {
#if ENABLE_SYSCALL_STATS
calls_stats[call_nr]++;
#endif
result = (*call_vec[call_nr])(); result = (*call_vec[call_nr])();
} }
break; break;

View File

@ -53,6 +53,10 @@ PRIVATE char *uts_tbl[] = {
NULL, /* No bus */ /* No bus */ NULL, /* No bus */ /* No bus */
}; };
#if ENABLE_SYSCALL_STATS
PUBLIC unsigned long calls_stats[NCALLS];
#endif
/*===========================================================================* /*===========================================================================*
* do_allocmem * * do_allocmem *
*===========================================================================*/ *===========================================================================*/
@ -256,6 +260,12 @@ PUBLIC int do_getsysinfo()
src_addr = (vir_bytes) &loadinfo; src_addr = (vir_bytes) &loadinfo;
len = sizeof(struct loadinfo); len = sizeof(struct loadinfo);
break; break;
#if ENABLE_SYSCALL_STATS
case SI_CALL_STATS:
src_addr = (vir_bytes) calls_stats;
len = sizeof(calls_stats);
break;
#endif
default: default:
return(EINVAL); return(EINVAL);
} }