--- Gnu-Mach/kern/lock_mon.c 2020/09/02 04:36:56 1.1 +++ Gnu-Mach/kern/lock_mon.c 2020/09/02 04:47:27 1.1.1.4 @@ -1,4 +1,4 @@ -/* +/* * Mach Operating System * Copyright (c) 1990 Carnegie-Mellon University * Copyright (c) 1989 Carnegie-Mellon University @@ -10,7 +10,7 @@ * Grenoble, FRANCE * * All Rights Reserved - * + * * Permission to use, copy, modify, and distribute this software and * its documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appears in all copies and @@ -19,7 +19,7 @@ * Foundation not be used in advertising or publicity pertaining to * distribution of the software without specific, written prior * permission. - * + * * OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, * IN NO EVENT SHALL OSF BE LIABLE FOR ANY SPECIAL, INDIRECT, OR @@ -38,12 +38,9 @@ * Depending on hardware also records time spent with locks held */ -#include -#include -#include -#include - #include +#include + #include #include #include @@ -58,23 +55,22 @@ decl_simple_lock_data(extern , printf_lo #if TIME_STAMP extern time_stamp_t time_stamp; -#else TIME_STAMP +#else /* TIME_STAMP */ typedef unsigned int time_stamp_t; #define time_stamp 0 -#endif TIME_STAMP +#endif /* TIME_STAMP */ #define LOCK_INFO_MAX (1024*32) #define LOCK_INFO_HASH_COUNT 1024 #define LOCK_INFO_PER_BUCKET (LOCK_INFO_MAX/LOCK_INFO_HASH_COUNT) - #define HASH_LOCK(lock) ((long)lock>>5 & (LOCK_INFO_HASH_COUNT-1)) struct lock_info { unsigned int success; unsigned int fail; unsigned int masked; - unsigned int stack; + unsigned int stack; time_stamp_t time; decl_simple_lock_data(, *lock) vm_offset_t caller; @@ -88,7 +84,7 @@ struct lock_info_bucket lock_info[LOCK_I struct lock_info default_lock_info; unsigned default_lock_stack = 0; -extern int curr_ipl[]; +extern spl_t curr_ipl[]; @@ -97,8 +93,8 @@ locate_lock_info(lock) decl_simple_lock_data(, **lock) { struct lock_info *li = &(lock_info[HASH_LOCK(*lock)].info[0]); - register i; - register my_cpu = cpu_number(); + int i; + my_cpu = cpu_number(); for (i=0; i < LOCK_INFO_PER_BUCKET; i++, li++) if (li->lock) { @@ -113,15 +109,15 @@ decl_simple_lock_data(, **lock) li = &default_lock_info; return(li); } - -simple_lock(lock) + +void simple_lock(lock) decl_simple_lock_data(, *lock) { - register struct lock_info *li = locate_lock_info(&lock); - register my_cpu = cpu_number(); + struct lock_info *li = locate_lock_info(&lock); + my_cpu = cpu_number(); - if (current_thread()) + if (current_thread()) li->stack = current_thread()->lock_stack++; if (curr_ipl[my_cpu]) li->masked++; @@ -134,11 +130,11 @@ decl_simple_lock_data(, *lock) li->time = time_stamp - li->time; } -simple_lock_try(lock) +int simple_lock_try(lock) decl_simple_lock_data(, *lock) { - register struct lock_info *li = locate_lock_info(&lock); - register my_cpu = cpu_number(); + struct lock_info *li = locate_lock_info(&lock); + my_cpu = cpu_number(); if (curr_ipl[my_cpu]) li->masked++; @@ -154,12 +150,12 @@ decl_simple_lock_data(, *lock) } } -simple_unlock(lock) +void simple_unlock(lock) decl_simple_lock_data(, *lock) { - register time_stamp_t stamp = time_stamp; - register time_stamp_t *time = &locate_lock_info(&lock)->time; - register unsigned *lock_stack; + time_stamp_t stamp = time_stamp; + time_stamp_t *time = &locate_lock_info(&lock)->time; + unsigned *lock_stack; *time = stamp - *time; _simple_unlock(lock); @@ -170,16 +166,13 @@ decl_simple_lock_data(, *lock) } } -lip() { +void lip(void) { lis(4, 1, 0); } #define lock_info_sort lis -unsigned scurval, ssum; -struct lock_info *sli; - -lock_info_sort(arg, abs, count) +void lock_info_sort(arg, abs, count) { struct lock_info *li, mean; int bucket = 0; @@ -218,9 +211,6 @@ lock_info_sort(arg, abs, count) sum = li->success + li->fail; if(!sum && !abs) continue; - scurval = curval; - ssum = sum; - sli = li; if (!abs) switch(arg) { case 0: break; @@ -252,15 +242,15 @@ lock_info_sort(arg, abs, count) old_val = max_val; } db_printf("\n%d total locks, %d empty buckets", total, empty ); - if (default_lock_info.success) - db_printf(", default: %d", default_lock_info.success + default_lock_info.fail); + if (default_lock_info.success) + db_printf(", default: %d", default_lock_info.success + default_lock_info.fail); db_printf("\n"); print_lock_info(&mean); } #define lock_info_clear lic -lock_info_clear() +void lock_info_clear(void) { struct lock_info *li; int bucket = 0; @@ -268,13 +258,13 @@ lock_info_clear() for (bucket = 0; bucket < LOCK_INFO_HASH_COUNT; bucket++) { li = &lock_info[bucket].info[0]; for (i= 0; i< LOCK_INFO_PER_BUCKET; i++, li++) { - bzero(li, sizeof(struct lock_info)); + memset(li, 0, sizeof(struct lock_info)); } } - bzero(&default_lock_info, sizeof(struct lock_info)); + memset(&default_lock_info, 0, sizeof(struct lock_info)); } -print_lock_info(li) +void print_lock_info(li) struct lock_info *li; { int off; @@ -284,7 +274,7 @@ struct lock_info *li; li->masked, (li->masked*100)/sum, li->stack, li->stack/sum, li->time, li->time/sum); - db_search_symbol(li->lock, 0, &off); + db_free_symbol(db_search_symbol(li->lock, 0, &off)); if (off < 1024) db_printsym(li->lock, 0); else { @@ -294,7 +284,7 @@ struct lock_info *li; db_printf("\n"); } -#endif NCPUS > 1 && MACH_LOCK_MON +#endif /* NCPUS > 1 && MACH_LOCK_MON */ #if TIME_STAMP @@ -302,11 +292,11 @@ struct lock_info *li; * Measure lock/unlock operations */ -time_lock(loops) +void time_lock(int loops) { decl_simple_lock_data(, lock) - register time_stamp_t stamp; - register int i; + time_stamp_t stamp; + int i; if (!loops) @@ -327,9 +317,9 @@ time_lock(loops) } stamp = time_stamp - stamp; db_printf("%d stamps for _simple_locks\n", stamp/loops); -#endif MACH_LOCK_MON +#endif /* MACH_LOCK_MON */ } -#endif TIME_STAMP +#endif /* TIME_STAMP */ #if MACH_MP_DEBUG @@ -343,7 +333,7 @@ void retry_simple_lock(lock) decl_simple_lock_data(, *lock) { - register count = 0; + count = 0; while(!simple_lock_try(lock)) if (count++ > 1000000 && lock != &kdb_lock) { @@ -351,7 +341,7 @@ decl_simple_lock_data(, *lock) return; db_printf("cpu %d looping on simple_lock(%x) called by %x\n", cpu_number(), lock, *(((int *)&lock) -1)); - Debugger(); + SoftDebugger("simple_lock timeout"); count = 0; } } @@ -359,17 +349,14 @@ decl_simple_lock_data(, *lock) void retry_bit_lock(index, addr) { - register count = 0; + count = 0; while(!bit_lock_try(index, addr)) if (count++ > 1000000) { db_printf("cpu %d looping on bit_lock(%x, %x) called by %x\n", cpu_number(), index, addr, *(((int *)&index) -1)); - Debugger(); + SoftDebugger("bit_lock timeout"); count = 0; } } -#endif MACH_MP_DEBUG - - - +#endif /* MACH_MP_DEBUG */