]> CyberLeo.Net >> Repos - FreeBSD/stable/8.git/commit
MFC 218221,233709,233781,233793:
authorjhb <jhb@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Wed, 16 May 2012 20:05:31 +0000 (20:05 +0000)
committerjhb <jhb@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Wed, 16 May 2012 20:05:31 +0000 (20:05 +0000)
commit5250038ed1d643e50266460f2062d60edf5ea81c
treeeae1a0d99a41ac4f343997104c2344b13feb39ae
parent206e8471b0b87f29cf67de5bb3a68cefb5093387
MFC 218221,233709,233781,233793:
- Use a dedicated taskqueue with a thread that runs at a software-interrupt
  priority for the periodic polling of the machine check registers.
- Don't malloc() new MCA records for machine checks logged due to a
  CMCI or MC# exception.  Instead, use a pre-allocated pool of records.
  When a CMCI or MC# exception fires, schedule a task to refill the pool.
  The pool is sized to hold at least one record per available machine
  bank, and one record per CPU. This should handle the case of all CPUs
  triggering a single bank at once as well as the case a single CPU
  triggering all of its banks.  The periodic scans still use malloc()
  since they are run from a safe context.
- Make machine check exception logging more readable.  On newer Intel systems,
  an uncorrected ECC error tends to fire on all CPUs in a package
  simultaneously and the current printf hacks are not sufficient to make
  the messages legible.  Instead, use the existing mca_lock spinlock to
  serialize calls to mca_log() and change the machine check code to panic
  directly when an unrecoverable error is encoutered rather than falling
  back to a trap_fatal() call in trap() (which adds nearly a screen-full of
  logging messages that aren't useful for machine checks).

git-svn-id: svn://svn.freebsd.org/base/stable/8@235517 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
sys/amd64/amd64/trap.c
sys/amd64/include/mca.h
sys/i386/i386/trap.c
sys/i386/include/mca.h
sys/x86/x86/mca.c