svn commit: r313752 - head/sys/x86/x86

Andriy Gapon avg at FreeBSD.org
Tue Feb 14 22:46:41 UTC 2017


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;


More information about the svn-src-head mailing list