systime: complete remove of kernel_now from x86_64
authorAdam Turowski <adam.turowski@inf.ethz.ch>
Tue, 29 Nov 2016 11:47:39 +0000 (12:47 +0100)
committerAdam Turowski <adam.turowski@inf.ethz.ch>
Tue, 29 Nov 2016 11:48:10 +0000 (12:48 +0100)
Signed-off-by: Adam Turowski <adam.turowski@inf.ethz.ch>

kernel/arch/x86/misc.c
kernel/arch/x86/timing.c
kernel/arch/x86_64/entry.S

index 3d9d7ca..9ff9992 100644 (file)
  */
 bool kernel_ticks_enabled = true;
 
-/**
- * The current time since kernel start in timeslices.
- */
-size_t kernel_now = 0;
-
 void
 wait_cycles(uint64_t duration)
 {
index a71f5d8..96d84dc 100644 (file)
@@ -167,11 +167,11 @@ static uint32_t calibrate_apic_timer_pit(systime_t *systime_freq)
     apic_timer_set_count(UINT32_MAX);
 
     // Wait a second (1,193,182 ticks)
-    uint16_t oldcnt = pit_timer0_read();
+    uint16_t oldcnt = pit_timer0_read_lsb();
     uint64_t timestamp = rdtsc();
     uint32_t ticks = 0;
     do {
-        uint16_t cnt = pit_timer0_read();
+        uint16_t cnt = pit_timer0_read_lsb();
         if (cnt <= oldcnt) {
             ticks += oldcnt - cnt;
         } else {
index 3493994..446c51c 100644 (file)
@@ -191,15 +191,21 @@ lrpc_check_runnable_continue:
     mov     %eax, %fs
     mov     %eax, %gs
 
+    /* Get systime */
+    xchg    %rdx, %r11
+    rdtsc
+    shl     $32, %rdx
+    mov     %eax, %edx
+
     /* Get new dispatcher pointer */
     mov     OFFSETOF_DCB_DISP(%rsi), %rax
     /* Disable target dispatcher -- gotta do it here for TLB hit reasons */
     movl    $1, OFFSETOF_DISP_DISABLED(%rax)
     /* update dispatcher's global delivered count */
     addl    $(LRPC_MSG_LENGTH + LMP_RECV_HEADER_LENGTH), OFFSETOF_DISP_LMP_DELIVERED(%rax)
-    /* update systime field in dispatcher from kernel_now variable */
-    movq    kernel_now(%rip), %r11
-    movq    %r11, OFFSETOF_DISP_SYSTIME(%rax)
+    /* update systime field in dispatcher */
+    movq    %rdx, OFFSETOF_DISP_SYSTIME(%rax)
+    xchg    %rdx, %r11
 
     /* Check if it's necessary to load a new LDT */
     mov     OFFSETOF_DISP_X86_64_LDT_BASE(%rax), %r11