The function get_kernel_data() in lockstat has a hardcoded assumption
that jiffies is incremented 100X / second, which is incorrect for alpha
based systems. The command also re-defined the HZ macro (also to be 100).
Here is a patch which will take HZ from param.h and replace the hardcoded
use of 100.0 with a call to sysconf(). This seems to do the right thing
on both x86 and alpha architectures, although there may be a more appropriate
method.
Pat
$ diff -u lockstat.c /tmp/lockstat.c
--- lockstat.c Tue Apr 4 12:54:15 2000
+++ /tmp/lockstat.c Wed May 31 10:43:13 2000
@@ -30,6 +30,8 @@
#include <string.h>
#include <sys/time.h>
#include <sys/utsname.h>
+#include <sys/param.h>
+#include <unistd.h>
typedef unsigned int uint32_t;
typedef unsigned long long uint64_t;
@@ -43,8 +45,6 @@
#define TSTAMP(s)
#endif
-#define HZ 100
-
char *helpstr[] = {
"Name"
" lockstat - display kernel lock statistics",
@@ -789,10 +789,13 @@
int ret_count;
int cpu_counts_len;
int directory_len;
+ double ticks;
if (debugopt == 2)
return;
+ ticks = (double)sysconf(_SC_CLK_TCK);
+
ret_count = read(dataFile, general_read_buf, general_read_buf_len);
if (ret_count != general_read_buf_len) {
fprintf(stderr,
@@ -839,7 +842,7 @@
}
end_time = request.current_time;
end_jiffies = request.current_jiffies;
- deltatime = (double) (end_jiffies - start_jiffies) / 100.0;
+ deltatime = (double) (end_jiffies - start_jiffies) / ticks;
}
next_free_dir_index = request.next_free_dir_index;
--
Patrick O'Rourke
orourke@xxxxxxxxxxxxxxxxxxxxxxxx
|