Added support for lock()/unlock() timing registration; also phys_zero system

call
This commit is contained in:
Ben Gras 2005-06-01 09:34:18 +00:00
parent 39a2fc72dd
commit e0ffcdadd1
4 changed files with 30 additions and 2 deletions

View file

@ -196,7 +196,6 @@
* modifying the system call numbers. The numbers here determine which call
* is made from the call vector.
*/
#define NR_SYS_CALLS 33 /* number of system calls */
# define SYS_TIMES 0 /* sys_times(proc_nr, bufptr) */
# define SYS_XIT 1 /* sys_xit(parent, proc) */
# define SYS_GETSIG 2 /* sys_getsig(proc_nr, sig_map) */
@ -230,6 +229,8 @@
# define SYS_VIRCOPY 30 /* sys_vircopy(src,seg,addr,dst,seg,addr,cnt) */
# define SYS_PHYSCOPY 31 /* sys_physcopy(src_addr,dst_addr,count) */
# define SYS_VIRVCOPY 32 /* sys_virvcopy(vec_ptr, vec_size) */
# define SYS_PHYSZERO 33 /* sys_physzero(addr,count) */
#define NR_SYS_CALLS 34 /* number of system calls */
/* Field names for SYS_MEM, SYS_KMALLOC. */
#define MEM_CHUNK_BASE m4_l1 /* physical base address */
@ -328,6 +329,7 @@
# define GET_SCHEDINFO 10 /* get scheduling queues */
# define GET_PROC 11 /* get process slot if given process */
# define GET_MACHINE 12 /* get machine information */
# define GET_LOCKTIMING 13 /* get lock()/unlock() latency timing */
#define I_PROC_NR m7_i4 /* calling process */
#define I_VAL_PTR m7_p1 /* virtual address at caller */
#define I_VAL_LEN m7_i1 /* max length of value */
@ -373,6 +375,9 @@
#define PR_IP_PTR m1_p3 /* initial value for ip after exec */
#define PR_MEM_PTR m1_p1 /* tells where memory map is for sys_newmap */
/* Field names for SYS_PHYSZERO */
#define PZ_MEM_PTR m1_p1 /* base */
#define PZ_COUNT m1_i1 /* count */
/*===========================================================================*
* Miscellaneous messages, mainly used by IS *

View file

@ -122,7 +122,17 @@
#define NR_RS_LINES 0 /* # rs232 terminals (0 to 4) */
#define NR_PTYS 32 /* # pseudo terminals (0 to 64) */
#define ENABLE_MESSAGE_STATS 0
/* these timing functions use quite a bit more kernel memory to hold
* timing data.
*/
#define ENABLE_INT_TIMING 0
#define ENABLE_LOCK_TIMING 0
#if ENABLE_LOCK_TIMING
#define TIMING_POINTS 20
#define TIMING_CATEGORIES 20
#define TIMING_NAME 10
#endif
/*===========================================================================*
* There are no user-settable parameters after this line *

View file

@ -102,6 +102,7 @@ _PROTOTYPE(int sys_vircopy, (int src_proc, int src_seg, vir_bytes src_vir,
sys_physcopy(NONE, PHYS_SEG, src_phys, NONE, PHYS_SEG, dst_phys, bytes)
_PROTOTYPE(int sys_physcopy, (int src_proc, int src_seg, vir_bytes src_vir,
int dst_proc, int dst_seg, vir_bytes dst_vir, phys_bytes bytes) );
_PROTOTYPE(int sys_physzero, (phys_bytes base, phys_bytes bytes) );
_PROTOTYPE(int sys_umap, (int proc_nr, int seg, vir_bytes vir_addr,
vir_bytes bytes, phys_bytes *phys_addr) );
@ -124,6 +125,7 @@ _PROTOTYPE(int sys_kmalloc, (size_t size, phys_bytes *phys_base) );
#define sys_getkenv(k,kl,v,vl) sys_getinfo(GET_KENV, v,vl, k,kl)
#define sys_getschedinfo(v1,v2) sys_getinfo(GET_SCHEDINFO, v1,0, v2,0)
#define sys_getkaddr(dst) sys_getinfo(GET_KADDRESSES, dst, 0,0,0)
#define sys_getlocktimings(dst) sys_getinfo(GET_LOCKTIMING, dst, 0,0,0)
_PROTOTYPE(int sys_getinfo, (int request, void *val_ptr, int val_len,
void *key_ptr, int key_len) );
_PROTOTYPE(int sys_exit, (int status) );

View file

@ -119,4 +119,15 @@ struct machine {
int vdu_vga;
};
/* Timing data of lock()/unlock() sequences, if selected to be compiled in. */
#if ENABLE_LOCK_TIMING
struct lock_timedata {
char names[TIMING_NAME];
unsigned long lock_timings[TIMING_POINTS];
unsigned long lock_timings_range[2];
unsigned long binsize, resets, misses, measurements;
};
#endif
#endif /* _TYPE_H */