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