Author: avg
Date: Mon Jun 25 09:19:50 2018
New Revision: 335628
URL: https://svnweb.freebsd.org/changeset/base/335628

Log:
  MFC r333638: calibrate lapic timer in native_lapic_setup

Modified:
  stable/11/sys/x86/x86/local_apic.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/x86/x86/local_apic.c
==============================================================================
--- stable/11/sys/x86/x86/local_apic.c  Mon Jun 25 08:57:03 2018        
(r335627)
+++ stable/11/sys/x86/x86/local_apic.c  Mon Jun 25 09:19:50 2018        
(r335628)
@@ -202,6 +202,9 @@ SYSCTL_INT(_hw_apic, OID_AUTO, eoi_suppression, CTLFLA
 SYSCTL_INT(_hw_apic, OID_AUTO, timer_tsc_deadline, CTLFLAG_RD,
     &lapic_timer_tsc_deadline, 0, "");
 
+static void lapic_calibrate_initcount(struct lapic *la);
+static void lapic_calibrate_deadline(struct lapic *la);
+
 static uint32_t
 lapic_read32(enum LAPIC_REGISTERS reg)
 {
@@ -783,6 +786,13 @@ native_lapic_setup(int boot)
                intrcnt_add(buf, &la->la_timer_count);
        }
 
+       /* Calibrate the timer parameters using BSP. */
+       if (boot && IS_BSP()) {
+               lapic_calibrate_initcount(la);
+               if (lapic_timer_tsc_deadline)
+                       lapic_calibrate_deadline(la);
+       }
+
        /* Setup the timer if configured. */
        if (la->la_timer_mode != LAT_MODE_UNDEF) {
                KASSERT(la->la_timer_period != 0, ("lapic%u: zero divisor",
@@ -917,7 +927,7 @@ native_lapic_disable_pmc(void)
 }
 
 static void
-lapic_calibrate_initcount(struct eventtimer *et, struct lapic *la)
+lapic_calibrate_initcount(struct lapic *la)
 {
        u_long value;
 
@@ -943,7 +953,7 @@ lapic_calibrate_initcount(struct eventtimer *et, struc
 }
 
 static void
-lapic_calibrate_deadline(struct eventtimer *et, struct lapic *la __unused)
+lapic_calibrate_deadline(struct lapic *la __unused)
 {
 
        if (bootverbose) {
@@ -985,11 +995,6 @@ lapic_et_start(struct eventtimer *et, sbintime_t first
        struct lapic *la;
 
        la = &lapics[PCPU_GET(apic_id)];
-       if (et->et_frequency == 0) {
-               lapic_calibrate_initcount(et, la);
-               if (lapic_timer_tsc_deadline)
-                       lapic_calibrate_deadline(et, la);
-       }
        if (period != 0) {
                lapic_change_mode(et, la, LAT_MODE_PERIODIC);
                la->la_timer_period = ((uint32_t)et->et_frequency * period) >>
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to