]> Zhao Yanbai Git Server - minix.git/commitdiff
. let kernel use read_tsc() from sysutil library
authorBen Gras <ben@minix3.org>
Thu, 8 Mar 2007 15:39:14 +0000 (15:39 +0000)
committerBen Gras <ben@minix3.org>
Thu, 8 Mar 2007 15:39:14 +0000 (15:39 +0000)
 . read_tsc() in sysutil library saves edx and eax now
 . added read_tsc_64() by Antonio Mancina to load tsc into
   a 64-bit data type directly
 . deleted read_tsc.h in favour of a prototype in <minix/syslib.h>

include/minix/syslib.h
kernel/arch/i386/klib386.s
lib/sysutil/Makefile.in
lib/sysutil/profile.c
lib/sysutil/read_tsc.h [deleted file]
lib/sysutil/read_tsc.s
lib/sysutil/read_tsc_64.c [new file with mode: 0644]

index dddd916df33a97621279eb99bab3a86f8d3a52ab..70340832c9a2e87a2e2f3b71154d6658fb5e479e 100755 (executable)
@@ -11,6 +11,8 @@
 #include <minix/ipc.h>
 #endif
 
+#include <minix/u64.h>
+
 #ifndef _DEVIO_H
 #include <minix/devio.h>
 #endif
@@ -205,6 +207,9 @@ _PROTOTYPE( int sys_cprof, (int action, int size, int endpt,
                                        void *ctl_ptr, void *mem_ptr)   );
 _PROTOTYPE( int sys_profbuf, (void *ctl_ptr, void *mem_ptr)            );
 
+/* read_tsc() and friends. */
+_PROTOTYPE( void read_tsc_64, (u64_t *t)                               );
+_PROTOTYPE( void read_tsc, (u32_t *hi, u32_t *lo)                      );
 
 #endif /* _SYSLIB_H */
 
index 04aa8587e5a79df92965dd18ab1f7f7c270f3467..d978c6f52ab982221c3ca1d065d3ea2cfe2e5ce5 100755 (executable)
@@ -32,7 +32,6 @@
 .define        _reset          ! reset the system
 .define        _idle_task      ! task executed when there is no work
 .define        _level0         ! call a function at level 0
-.define        _read_tsc       ! read the cycle counter (Pentium and up)
 .define        _read_cpu_flags ! read the cpu flags
 .define        _read_cr0       ! read cr0
 .define        _write_cr0      ! write a value in cr0
@@ -547,24 +546,6 @@ _level0:
        ret
 
 
-!*===========================================================================*
-!*                           read_tsc                                       *
-!*===========================================================================*
-! PUBLIC void read_tsc(unsigned long *high, unsigned long *low);
-! Read the cycle counter of the CPU. Pentium and up. 
-! This function clobbers edx and eax.
-.align 16
-_read_tsc:
-.data1 0x0f            ! this is the RDTSC instruction 
-.data1 0x31            ! it places the TSC in EDX:EAX
-       push ebp
-       mov ebp, 8(esp)
-       mov (ebp), edx
-       mov ebp, 12(esp)
-       mov (ebp), eax
-       pop ebp
-       ret
-
 !*===========================================================================*
 !*                           read_flags                                             *
 !*===========================================================================*
index c80adaa6d94395f4bc236c9d09dd3caa7555c5d5..0443579d4e6d8f8b652739701dca3d0e69cf843c 100644 (file)
@@ -18,6 +18,7 @@ libsysutil_FILES=" \
        report.c \
        taskcall.c \
        read_tsc.s \
+       read_tsc_64.c \
        profile_extern.c \
        profile.c"
 
index 179de031a339da62b20d2d49daf01dd56cd8e5c7..aaa2e55979bdf6e41f4953a71df567d8b9bd0c4b 100644 (file)
@@ -20,7 +20,6 @@
 #include <minix/profile.h>
 #include <minix/syslib.h>
 #include <minix/u64.h>
-#include "read_tsc.h"
 
 #define U64_LO 0
 #define U64_HI 1
diff --git a/lib/sysutil/read_tsc.h b/lib/sysutil/read_tsc.h
deleted file mode 100644 (file)
index ff72854..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef READ_TSC_H
-#define READ_TSC_H
-
-_PROTOTYPE(void read_tsc, (unsigned long *hi, unsigned long *lo) );
-
-#endif /* READ_TSC_H */
-
index 5d45b090da8aefeb4581ac8a69fe6ffa9cc27908..4b8a4d08c0452717cef307989e0f0132e7ba1fe9 100644 (file)
 ! Read the cycle counter of the CPU. Pentium and up. 
 .align 16
 _read_tsc:
+       push edx
+       push eax
 .data1 0x0f            ! this is the RDTSC instruction 
 .data1 0x31            ! it places the TSC in EDX:EAX
        push ebp
-       mov ebp, 8(esp)
+       mov ebp, 16(esp)
        mov (ebp), edx
-       mov ebp, 12(esp)
+       mov ebp, 20(esp)
        mov (ebp), eax
        pop ebp
+       pop eax
+       pop edx
        ret
 
diff --git a/lib/sysutil/read_tsc_64.c b/lib/sysutil/read_tsc_64.c
new file mode 100644 (file)
index 0000000..e13ef1b
--- /dev/null
@@ -0,0 +1,16 @@
+
+#include "sysutil.h"
+#include <minix/u64.h>
+#include <minix/syslib.h>
+
+/* Utility function to work directly with u64_t
+ * By Antonio Mancina
+ */
+PUBLIC void read_tsc_64(t)
+u64_t* t;
+{
+    u32_t lo, hi;
+    read_tsc (&hi, &lo);
+    *t = make64 (lo, hi);
+}
+