]> CyberLeo.Net >> Repos - FreeBSD/stable/9.git/commit
MFC 233709,233781,233793:
authorjhb <jhb@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Wed, 16 May 2012 20:04:45 +0000 (20:04 +0000)
committerjhb <jhb@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Wed, 16 May 2012 20:04:45 +0000 (20:04 +0000)
commit3caed6dedb2f72bb16541adad77370a723483117
tree52c23da2974cd0b34155534bcd29a95fe27d8eca
parent59042a8427ac3e65c682b95e9405a4ec5e0e110a
MFC 233709,233781,233793:
- 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/9@235515 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
sys/amd64/amd64/trap.c
sys/i386/i386/trap.c
sys/x86/include/mca.h
sys/x86/x86/mca.c