Author: avg
Date: Tue Feb 14 22:46:39 2017
New Revision: 313752
URL: https://svnweb.freebsd.org/changeset/base/313752

Log:
  mca: use time_uptime instead of ticks for CMCI throttling
  
  This solves several problems.
  First of all, cmc_throttle is specified in seconds and there was no
  conversion between ticks and seconds when they were mixed together.
  Second, we avoid potential problems with ticks wrapping around.
  
  Resolution of time_uptime should be sufficient for the throttling
  purposes.
  
  Discussed with:       jhb
  MFC after:    12 days

Modified:
  head/sys/x86/x86/mca.c

Modified: head/sys/x86/x86/mca.c
==============================================================================
--- head/sys/x86/x86/mca.c      Tue Feb 14 22:30:22 2017        (r313751)
+++ head/sys/x86/x86/mca.c      Tue Feb 14 22:46:39 2017        (r313752)
@@ -533,7 +533,7 @@ cmci_update(enum scan_mode mode, int ban
        cc = &cmc_state[PCPU_GET(cpuid)][bank];
        ctl = rdmsr(MSR_MC_CTL2(bank));
        count = (rec->mr_status & MC_STATUS_COR_COUNT) >> 38;
-       delta = (u_int)(ticks - cc->last_intr);
+       delta = (u_int)(time_uptime - cc->last_intr);
 
        /*
         * If an interrupt was received less than cmc_throttle seconds
@@ -550,7 +550,7 @@ cmci_update(enum scan_mode mode, int ban
                        ctl |= limit;
                        wrmsr(MSR_MC_CTL2(bank), ctl);
                }
-               cc->last_intr = ticks;
+               cc->last_intr = time_uptime;
                return;
        }
 
@@ -857,7 +857,7 @@ cmci_resume(int i)
                return;
 
        cc = &cmc_state[PCPU_GET(cpuid)][i];
-       cc->last_intr = -ticks;
+       cc->last_intr = 0;
        ctl = rdmsr(MSR_MC_CTL2(i));
        ctl &= ~MC_CTL2_THRESHOLD;
        ctl |= MC_CTL2_CMCI_EN | 1;
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to