ACPI, APEI, Add ERST record ID cache
authorHuang Ying <ying.huang@intel.com>
Mon, 21 Feb 2011 05:54:41 +0000 (13:54 +0800)
committerLen Brown <len.brown@intel.com>
Tue, 22 Mar 2011 02:59:06 +0000 (22:59 -0400)
commit885b976fada5bc6595a9fd3e67e3cb1a3d11f50b
tree8b598bd3b265c0bbe8237e129410fdc80fe7847a
parentdd9c1549edef02290edced639f67b54a25abbe0e
ACPI, APEI, Add ERST record ID cache

APEI ERST firmware interface and implementation has no multiple users
in mind.  For example, if there is four records in storage with ID: 1,
2, 3 and 4, if two ERST readers enumerate the records via
GET_NEXT_RECORD_ID as follow,

reader 1 reader 2
1
2
3
4
-1
-1

where -1 signals there is no more record ID.

Reader 1 has no chance to check record 2 and 4, while reader 2 has no
chance to check record 1 and 3.  And any other GET_NEXT_RECORD_ID will
return -1, that is, other readers will has no chance to check any
record even they are not cleared by anyone.

This makes raw GET_NEXT_RECORD_ID not suitable for used by multiple
users.

To solve the issue, an in-memory ERST record ID cache is designed and
implemented.  When enumerating record ID, the ID returned by
GET_NEXT_RECORD_ID is added into cache in addition to be returned to
caller.  So other readers can check the cache to get all record ID
available.

Signed-off-by: Huang Ying <ying.huang@intel.com>
Reviewed-by: Andi Kleen <ak@linux.intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
arch/x86/kernel/cpu/mcheck/mce-apei.c
drivers/acpi/apei/erst-dbg.c
drivers/acpi/apei/erst.c
include/acpi/apei.h