summaryrefslogtreecommitdiffstats
path: root/sys/amd64/amd64/apic_vector.S
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2010-05-24 15:45:05 +0000
committerjhb <jhb@FreeBSD.org>2010-05-24 15:45:05 +0000
commit9e6f9b1e86420cd7da13f1d568950ab52ff2428f (patch)
treea9d317cc94e24d55cd44eed2052b78547f4a46f9 /sys/amd64/amd64/apic_vector.S
parentce59c74efda35e47b39621f57c0fe63e02c7af5b (diff)
downloadFreeBSD-src-9e6f9b1e86420cd7da13f1d568950ab52ff2428f.zip
FreeBSD-src-9e6f9b1e86420cd7da13f1d568950ab52ff2428f.tar.gz
Add support for corrected machine check interrupts. CMCI is a new local
APIC interrupt that fires when a threshold of corrected machine check events is reached. CMCI also includes a count of events when reporting corrected errors in the bank's status register. Note that individual banks may or may not support CMCI. If they do, each bank includes its own threshold register that determines when the interrupt fires. Currently the code uses a very simple strategy where it doubles the threshold on each interrupt until it succeeds in throttling the interrupt to occur only once a minute (this interval can be tuned via sysctl). The threshold is also adjusted on each hourly poll which will lower the threshold once events stop occurring. Tested by: Sailaja Bangaru sbappana at yahoo com MFC after: 1 month
Diffstat (limited to 'sys/amd64/amd64/apic_vector.S')
-rw-r--r--sys/amd64/amd64/apic_vector.S12
1 files changed, 12 insertions, 0 deletions
diff --git a/sys/amd64/amd64/apic_vector.S b/sys/amd64/amd64/apic_vector.S
index 4cfc18b..1c044b8 100644
--- a/sys/amd64/amd64/apic_vector.S
+++ b/sys/amd64/amd64/apic_vector.S
@@ -105,6 +105,18 @@ IDTVEC(timerint)
jmp doreti
/*
+ * Local APIC CMCI handler.
+ */
+ .text
+ SUPERALIGN_TEXT
+IDTVEC(cmcint)
+ PUSH_FRAME
+ FAKE_MCOUNT(TF_RIP(%rsp))
+ call lapic_handle_cmc
+ MEXITCOUNT
+ jmp doreti
+
+/*
* Local APIC error interrupt handler.
*/
.text
OpenPOWER on IntegriCloud