* 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) */
# 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 */
# 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 */
#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 *
#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 *
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) );
#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) );
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 */