Commit 88f074f4 authored by Chen, Gong's avatar Chen, Gong Committed by Tony Luck

ACPI, CPER: Update cper info

We have a lot of confusing names of functions and data structures in
amongs the the error reporting code.  In particular the "apei" prefix
has been applied to many objects that are not part of APEI.  Since we
will be using these routines for extended error log reporting it will
be clearer if we fix up the names first.
Signed-off-by: default avatarChen, Gong <gong.chen@linux.intel.com>
Acked-by: default avatarBorislav Petkov <bp@suse.de>
Reviewed-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
parent 833ba4b1
...@@ -122,11 +122,11 @@ struct dentry; ...@@ -122,11 +122,11 @@ struct dentry;
struct dentry *apei_get_debugfs_dir(void); struct dentry *apei_get_debugfs_dir(void);
#define apei_estatus_for_each_section(estatus, section) \ #define apei_estatus_for_each_section(estatus, section) \
for (section = (struct acpi_hest_generic_data *)(estatus + 1); \ for (section = (struct acpi_generic_data *)(estatus + 1); \
(void *)section - (void *)estatus < estatus->data_length; \ (void *)section - (void *)estatus < estatus->data_length; \
section = (void *)(section+1) + section->error_data_length) section = (void *)(section+1) + section->error_data_length)
static inline u32 apei_estatus_len(struct acpi_hest_generic_status *estatus) static inline u32 cper_estatus_len(struct acpi_generic_status *estatus)
{ {
if (estatus->raw_data_length) if (estatus->raw_data_length)
return estatus->raw_data_offset + \ return estatus->raw_data_offset + \
...@@ -135,10 +135,10 @@ static inline u32 apei_estatus_len(struct acpi_hest_generic_status *estatus) ...@@ -135,10 +135,10 @@ static inline u32 apei_estatus_len(struct acpi_hest_generic_status *estatus)
return sizeof(*estatus) + estatus->data_length; return sizeof(*estatus) + estatus->data_length;
} }
void apei_estatus_print(const char *pfx, void cper_estatus_print(const char *pfx,
const struct acpi_hest_generic_status *estatus); const struct acpi_generic_status *estatus);
int apei_estatus_check_header(const struct acpi_hest_generic_status *estatus); int cper_estatus_check_header(const struct acpi_generic_status *estatus);
int apei_estatus_check(const struct acpi_hest_generic_status *estatus); int cper_estatus_check(const struct acpi_generic_status *estatus);
int apei_osc_setup(void); int apei_osc_setup(void);
#endif #endif
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* Author: Huang Ying <ying.huang@intel.com> * Author: Huang Ying <ying.huang@intel.com>
* *
* CPER is the format used to describe platform hardware error by * CPER is the format used to describe platform hardware error by
* various APEI tables, such as ERST, BERT and HEST etc. * various tables, such as ERST, BERT and HEST etc.
* *
* For more information about CPER, please refer to Appendix N of UEFI * For more information about CPER, please refer to Appendix N of UEFI
* Specification version 2.3. * Specification version 2.3.
...@@ -73,7 +73,7 @@ static const char *cper_severity_str(unsigned int severity) ...@@ -73,7 +73,7 @@ static const char *cper_severity_str(unsigned int severity)
* printed, with @pfx is printed at the beginning of each line. * printed, with @pfx is printed at the beginning of each line.
*/ */
void cper_print_bits(const char *pfx, unsigned int bits, void cper_print_bits(const char *pfx, unsigned int bits,
const char *strs[], unsigned int strs_size) const char * const strs[], unsigned int strs_size)
{ {
int i, len = 0; int i, len = 0;
const char *str; const char *str;
...@@ -98,32 +98,32 @@ void cper_print_bits(const char *pfx, unsigned int bits, ...@@ -98,32 +98,32 @@ void cper_print_bits(const char *pfx, unsigned int bits,
printk("%s\n", buf); printk("%s\n", buf);
} }
static const char *cper_proc_type_strs[] = { static const char * const cper_proc_type_strs[] = {
"IA32/X64", "IA32/X64",
"IA64", "IA64",
}; };
static const char *cper_proc_isa_strs[] = { static const char * const cper_proc_isa_strs[] = {
"IA32", "IA32",
"IA64", "IA64",
"X64", "X64",
}; };
static const char *cper_proc_error_type_strs[] = { static const char * const cper_proc_error_type_strs[] = {
"cache error", "cache error",
"TLB error", "TLB error",
"bus error", "bus error",
"micro-architectural error", "micro-architectural error",
}; };
static const char *cper_proc_op_strs[] = { static const char * const cper_proc_op_strs[] = {
"unknown or generic", "unknown or generic",
"data read", "data read",
"data write", "data write",
"instruction execution", "instruction execution",
}; };
static const char *cper_proc_flag_strs[] = { static const char * const cper_proc_flag_strs[] = {
"restartable", "restartable",
"precise IP", "precise IP",
"overflow", "overflow",
...@@ -248,7 +248,7 @@ static const char *cper_pcie_port_type_strs[] = { ...@@ -248,7 +248,7 @@ static const char *cper_pcie_port_type_strs[] = {
}; };
static void cper_print_pcie(const char *pfx, const struct cper_sec_pcie *pcie, static void cper_print_pcie(const char *pfx, const struct cper_sec_pcie *pcie,
const struct acpi_hest_generic_data *gdata) const struct acpi_generic_data *gdata)
{ {
if (pcie->validation_bits & CPER_PCIE_VALID_PORT_TYPE) if (pcie->validation_bits & CPER_PCIE_VALID_PORT_TYPE)
printk("%s""port_type: %d, %s\n", pfx, pcie->port_type, printk("%s""port_type: %d, %s\n", pfx, pcie->port_type,
...@@ -283,17 +283,17 @@ static void cper_print_pcie(const char *pfx, const struct cper_sec_pcie *pcie, ...@@ -283,17 +283,17 @@ static void cper_print_pcie(const char *pfx, const struct cper_sec_pcie *pcie,
pfx, pcie->bridge.secondary_status, pcie->bridge.control); pfx, pcie->bridge.secondary_status, pcie->bridge.control);
} }
static const char *apei_estatus_section_flag_strs[] = { static const char * const cper_estatus_section_flag_strs[] = {
"primary", "primary",
"containment warning", "containment warning",
"reset", "reset",
"threshold exceeded", "error threshold exceeded",
"resource not accessible", "resource not accessible",
"latent error", "latent error",
}; };
static void apei_estatus_print_section( static void cper_estatus_print_section(
const char *pfx, const struct acpi_hest_generic_data *gdata, int sec_no) const char *pfx, const struct acpi_generic_data *gdata, int sec_no)
{ {
uuid_le *sec_type = (uuid_le *)gdata->section_type; uuid_le *sec_type = (uuid_le *)gdata->section_type;
__u16 severity; __u16 severity;
...@@ -302,8 +302,8 @@ static void apei_estatus_print_section( ...@@ -302,8 +302,8 @@ static void apei_estatus_print_section(
printk("%s""section: %d, severity: %d, %s\n", pfx, sec_no, severity, printk("%s""section: %d, severity: %d, %s\n", pfx, sec_no, severity,
cper_severity_str(severity)); cper_severity_str(severity));
printk("%s""flags: 0x%02x\n", pfx, gdata->flags); printk("%s""flags: 0x%02x\n", pfx, gdata->flags);
cper_print_bits(pfx, gdata->flags, apei_estatus_section_flag_strs, cper_print_bits(pfx, gdata->flags, cper_estatus_section_flag_strs,
ARRAY_SIZE(apei_estatus_section_flag_strs)); ARRAY_SIZE(cper_estatus_section_flag_strs));
if (gdata->validation_bits & CPER_SEC_VALID_FRU_ID) if (gdata->validation_bits & CPER_SEC_VALID_FRU_ID)
printk("%s""fru_id: %pUl\n", pfx, (uuid_le *)gdata->fru_id); printk("%s""fru_id: %pUl\n", pfx, (uuid_le *)gdata->fru_id);
if (gdata->validation_bits & CPER_SEC_VALID_FRU_TEXT) if (gdata->validation_bits & CPER_SEC_VALID_FRU_TEXT)
...@@ -339,34 +339,34 @@ static void apei_estatus_print_section( ...@@ -339,34 +339,34 @@ static void apei_estatus_print_section(
pr_err(FW_WARN "error section length is too small\n"); pr_err(FW_WARN "error section length is too small\n");
} }
void apei_estatus_print(const char *pfx, void cper_estatus_print(const char *pfx,
const struct acpi_hest_generic_status *estatus) const struct acpi_generic_status *estatus)
{ {
struct acpi_hest_generic_data *gdata; struct acpi_generic_data *gdata;
unsigned int data_len, gedata_len; unsigned int data_len, gedata_len;
int sec_no = 0; int sec_no = 0;
__u16 severity; __u16 severity;
printk("%s""APEI generic hardware error status\n", pfx); printk("%s""Generic Hardware Error Status\n", pfx);
severity = estatus->error_severity; severity = estatus->error_severity;
printk("%s""severity: %d, %s\n", pfx, severity, printk("%s""severity: %d, %s\n", pfx, severity,
cper_severity_str(severity)); cper_severity_str(severity));
data_len = estatus->data_length; data_len = estatus->data_length;
gdata = (struct acpi_hest_generic_data *)(estatus + 1); gdata = (struct acpi_generic_data *)(estatus + 1);
while (data_len >= sizeof(*gdata)) { while (data_len >= sizeof(*gdata)) {
gedata_len = gdata->error_data_length; gedata_len = gdata->error_data_length;
apei_estatus_print_section(pfx, gdata, sec_no); cper_estatus_print_section(pfx, gdata, sec_no);
data_len -= gedata_len + sizeof(*gdata); data_len -= gedata_len + sizeof(*gdata);
gdata = (void *)(gdata + 1) + gedata_len; gdata = (void *)(gdata + 1) + gedata_len;
sec_no++; sec_no++;
} }
} }
EXPORT_SYMBOL_GPL(apei_estatus_print); EXPORT_SYMBOL_GPL(cper_estatus_print);
int apei_estatus_check_header(const struct acpi_hest_generic_status *estatus) int cper_estatus_check_header(const struct acpi_generic_status *estatus)
{ {
if (estatus->data_length && if (estatus->data_length &&
estatus->data_length < sizeof(struct acpi_hest_generic_data)) estatus->data_length < sizeof(struct acpi_generic_data))
return -EINVAL; return -EINVAL;
if (estatus->raw_data_length && if (estatus->raw_data_length &&
estatus->raw_data_offset < sizeof(*estatus) + estatus->data_length) estatus->raw_data_offset < sizeof(*estatus) + estatus->data_length)
...@@ -374,19 +374,19 @@ int apei_estatus_check_header(const struct acpi_hest_generic_status *estatus) ...@@ -374,19 +374,19 @@ int apei_estatus_check_header(const struct acpi_hest_generic_status *estatus)
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(apei_estatus_check_header); EXPORT_SYMBOL_GPL(cper_estatus_check_header);
int apei_estatus_check(const struct acpi_hest_generic_status *estatus) int cper_estatus_check(const struct acpi_generic_status *estatus)
{ {
struct acpi_hest_generic_data *gdata; struct acpi_generic_data *gdata;
unsigned int data_len, gedata_len; unsigned int data_len, gedata_len;
int rc; int rc;
rc = apei_estatus_check_header(estatus); rc = cper_estatus_check_header(estatus);
if (rc) if (rc)
return rc; return rc;
data_len = estatus->data_length; data_len = estatus->data_length;
gdata = (struct acpi_hest_generic_data *)(estatus + 1); gdata = (struct acpi_generic_data *)(estatus + 1);
while (data_len >= sizeof(*gdata)) { while (data_len >= sizeof(*gdata)) {
gedata_len = gdata->error_data_length; gedata_len = gdata->error_data_length;
if (gedata_len > data_len - sizeof(*gdata)) if (gedata_len > data_len - sizeof(*gdata))
...@@ -399,4 +399,4 @@ int apei_estatus_check(const struct acpi_hest_generic_status *estatus) ...@@ -399,4 +399,4 @@ int apei_estatus_check(const struct acpi_hest_generic_status *estatus)
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(apei_estatus_check); EXPORT_SYMBOL_GPL(cper_estatus_check);
...@@ -75,13 +75,13 @@ ...@@ -75,13 +75,13 @@
#define GHES_ESTATUS_CACHE_LEN(estatus_len) \ #define GHES_ESTATUS_CACHE_LEN(estatus_len) \
(sizeof(struct ghes_estatus_cache) + (estatus_len)) (sizeof(struct ghes_estatus_cache) + (estatus_len))
#define GHES_ESTATUS_FROM_CACHE(estatus_cache) \ #define GHES_ESTATUS_FROM_CACHE(estatus_cache) \
((struct acpi_hest_generic_status *) \ ((struct acpi_generic_status *) \
((struct ghes_estatus_cache *)(estatus_cache) + 1)) ((struct ghes_estatus_cache *)(estatus_cache) + 1))
#define GHES_ESTATUS_NODE_LEN(estatus_len) \ #define GHES_ESTATUS_NODE_LEN(estatus_len) \
(sizeof(struct ghes_estatus_node) + (estatus_len)) (sizeof(struct ghes_estatus_node) + (estatus_len))
#define GHES_ESTATUS_FROM_NODE(estatus_node) \ #define GHES_ESTATUS_FROM_NODE(estatus_node) \
((struct acpi_hest_generic_status *) \ ((struct acpi_generic_status *) \
((struct ghes_estatus_node *)(estatus_node) + 1)) ((struct ghes_estatus_node *)(estatus_node) + 1))
bool ghes_disable; bool ghes_disable;
...@@ -378,17 +378,17 @@ static int ghes_read_estatus(struct ghes *ghes, int silent) ...@@ -378,17 +378,17 @@ static int ghes_read_estatus(struct ghes *ghes, int silent)
ghes->flags |= GHES_TO_CLEAR; ghes->flags |= GHES_TO_CLEAR;
rc = -EIO; rc = -EIO;
len = apei_estatus_len(ghes->estatus); len = cper_estatus_len(ghes->estatus);
if (len < sizeof(*ghes->estatus)) if (len < sizeof(*ghes->estatus))
goto err_read_block; goto err_read_block;
if (len > ghes->generic->error_block_length) if (len > ghes->generic->error_block_length)
goto err_read_block; goto err_read_block;
if (apei_estatus_check_header(ghes->estatus)) if (cper_estatus_check_header(ghes->estatus))
goto err_read_block; goto err_read_block;
ghes_copy_tofrom_phys(ghes->estatus + 1, ghes_copy_tofrom_phys(ghes->estatus + 1,
buf_paddr + sizeof(*ghes->estatus), buf_paddr + sizeof(*ghes->estatus),
len - sizeof(*ghes->estatus), 1); len - sizeof(*ghes->estatus), 1);
if (apei_estatus_check(ghes->estatus)) if (cper_estatus_check(ghes->estatus))
goto err_read_block; goto err_read_block;
rc = 0; rc = 0;
...@@ -409,7 +409,7 @@ static void ghes_clear_estatus(struct ghes *ghes) ...@@ -409,7 +409,7 @@ static void ghes_clear_estatus(struct ghes *ghes)
ghes->flags &= ~GHES_TO_CLEAR; ghes->flags &= ~GHES_TO_CLEAR;
} }
static void ghes_handle_memory_failure(struct acpi_hest_generic_data *gdata, int sev) static void ghes_handle_memory_failure(struct acpi_generic_data *gdata, int sev)
{ {
#ifdef CONFIG_ACPI_APEI_MEMORY_FAILURE #ifdef CONFIG_ACPI_APEI_MEMORY_FAILURE
unsigned long pfn; unsigned long pfn;
...@@ -438,10 +438,10 @@ static void ghes_handle_memory_failure(struct acpi_hest_generic_data *gdata, int ...@@ -438,10 +438,10 @@ static void ghes_handle_memory_failure(struct acpi_hest_generic_data *gdata, int
} }
static void ghes_do_proc(struct ghes *ghes, static void ghes_do_proc(struct ghes *ghes,
const struct acpi_hest_generic_status *estatus) const struct acpi_generic_status *estatus)
{ {
int sev, sec_sev; int sev, sec_sev;
struct acpi_hest_generic_data *gdata; struct acpi_generic_data *gdata;
sev = ghes_severity(estatus->error_severity); sev = ghes_severity(estatus->error_severity);
apei_estatus_for_each_section(estatus, gdata) { apei_estatus_for_each_section(estatus, gdata) {
...@@ -496,7 +496,7 @@ static void ghes_do_proc(struct ghes *ghes, ...@@ -496,7 +496,7 @@ static void ghes_do_proc(struct ghes *ghes,
static void __ghes_print_estatus(const char *pfx, static void __ghes_print_estatus(const char *pfx,
const struct acpi_hest_generic *generic, const struct acpi_hest_generic *generic,
const struct acpi_hest_generic_status *estatus) const struct acpi_generic_status *estatus)
{ {
static atomic_t seqno; static atomic_t seqno;
unsigned int curr_seqno; unsigned int curr_seqno;
...@@ -513,12 +513,12 @@ static void __ghes_print_estatus(const char *pfx, ...@@ -513,12 +513,12 @@ static void __ghes_print_estatus(const char *pfx,
snprintf(pfx_seq, sizeof(pfx_seq), "%s{%u}" HW_ERR, pfx, curr_seqno); snprintf(pfx_seq, sizeof(pfx_seq), "%s{%u}" HW_ERR, pfx, curr_seqno);
printk("%s""Hardware error from APEI Generic Hardware Error Source: %d\n", printk("%s""Hardware error from APEI Generic Hardware Error Source: %d\n",
pfx_seq, generic->header.source_id); pfx_seq, generic->header.source_id);
apei_estatus_print(pfx_seq, estatus); cper_estatus_print(pfx_seq, estatus);
} }
static int ghes_print_estatus(const char *pfx, static int ghes_print_estatus(const char *pfx,
const struct acpi_hest_generic *generic, const struct acpi_hest_generic *generic,
const struct acpi_hest_generic_status *estatus) const struct acpi_generic_status *estatus)
{ {
/* Not more than 2 messages every 5 seconds */ /* Not more than 2 messages every 5 seconds */
static DEFINE_RATELIMIT_STATE(ratelimit_corrected, 5*HZ, 2); static DEFINE_RATELIMIT_STATE(ratelimit_corrected, 5*HZ, 2);
...@@ -540,15 +540,15 @@ static int ghes_print_estatus(const char *pfx, ...@@ -540,15 +540,15 @@ static int ghes_print_estatus(const char *pfx,
* GHES error status reporting throttle, to report more kinds of * GHES error status reporting throttle, to report more kinds of
* errors, instead of just most frequently occurred errors. * errors, instead of just most frequently occurred errors.
*/ */
static int ghes_estatus_cached(struct acpi_hest_generic_status *estatus) static int ghes_estatus_cached(struct acpi_generic_status *estatus)
{ {
u32 len; u32 len;
int i, cached = 0; int i, cached = 0;
unsigned long long now; unsigned long long now;
struct ghes_estatus_cache *cache; struct ghes_estatus_cache *cache;
struct acpi_hest_generic_status *cache_estatus; struct acpi_generic_status *cache_estatus;
len = apei_estatus_len(estatus); len = cper_estatus_len(estatus);
rcu_read_lock(); rcu_read_lock();
for (i = 0; i < GHES_ESTATUS_CACHES_SIZE; i++) { for (i = 0; i < GHES_ESTATUS_CACHES_SIZE; i++) {
cache = rcu_dereference(ghes_estatus_caches[i]); cache = rcu_dereference(ghes_estatus_caches[i]);
...@@ -571,19 +571,19 @@ static int ghes_estatus_cached(struct acpi_hest_generic_status *estatus) ...@@ -571,19 +571,19 @@ static int ghes_estatus_cached(struct acpi_hest_generic_status *estatus)
static struct ghes_estatus_cache *ghes_estatus_cache_alloc( static struct ghes_estatus_cache *ghes_estatus_cache_alloc(
struct acpi_hest_generic *generic, struct acpi_hest_generic *generic,
struct acpi_hest_generic_status *estatus) struct acpi_generic_status *estatus)
{ {
int alloced; int alloced;
u32 len, cache_len; u32 len, cache_len;
struct ghes_estatus_cache *cache; struct ghes_estatus_cache *cache;
struct acpi_hest_generic_status *cache_estatus; struct acpi_generic_status *cache_estatus;
alloced = atomic_add_return(1, &ghes_estatus_cache_alloced); alloced = atomic_add_return(1, &ghes_estatus_cache_alloced);
if (alloced > GHES_ESTATUS_CACHE_ALLOCED_MAX) { if (alloced > GHES_ESTATUS_CACHE_ALLOCED_MAX) {
atomic_dec(&ghes_estatus_cache_alloced); atomic_dec(&ghes_estatus_cache_alloced);
return NULL; return NULL;
} }
len = apei_estatus_len(estatus); len = cper_estatus_len(estatus);
cache_len = GHES_ESTATUS_CACHE_LEN(len); cache_len = GHES_ESTATUS_CACHE_LEN(len);
cache = (void *)gen_pool_alloc(ghes_estatus_pool, cache_len); cache = (void *)gen_pool_alloc(ghes_estatus_pool, cache_len);
if (!cache) { if (!cache) {
...@@ -603,7 +603,7 @@ static void ghes_estatus_cache_free(struct ghes_estatus_cache *cache) ...@@ -603,7 +603,7 @@ static void ghes_estatus_cache_free(struct ghes_estatus_cache *cache)
{ {
u32 len; u32 len;
len = apei_estatus_len(GHES_ESTATUS_FROM_CACHE(cache)); len = cper_estatus_len(GHES_ESTATUS_FROM_CACHE(cache));
len = GHES_ESTATUS_CACHE_LEN(len); len = GHES_ESTATUS_CACHE_LEN(len);
gen_pool_free(ghes_estatus_pool, (unsigned long)cache, len); gen_pool_free(ghes_estatus_pool, (unsigned long)cache, len);
atomic_dec(&ghes_estatus_cache_alloced); atomic_dec(&ghes_estatus_cache_alloced);
...@@ -619,7 +619,7 @@ static void ghes_estatus_cache_rcu_free(struct rcu_head *head) ...@@ -619,7 +619,7 @@ static void ghes_estatus_cache_rcu_free(struct rcu_head *head)
static void ghes_estatus_cache_add( static void ghes_estatus_cache_add(
struct acpi_hest_generic *generic, struct acpi_hest_generic *generic,
struct acpi_hest_generic_status *estatus) struct acpi_generic_status *estatus)
{ {
int i, slot = -1, count; int i, slot = -1, count;
unsigned long long now, duration, period, max_period = 0; unsigned long long now, duration, period, max_period = 0;
...@@ -751,7 +751,7 @@ static void ghes_proc_in_irq(struct irq_work *irq_work) ...@@ -751,7 +751,7 @@ static void ghes_proc_in_irq(struct irq_work *irq_work)
struct llist_node *llnode, *next; struct llist_node *llnode, *next;
struct ghes_estatus_node *estatus_node; struct ghes_estatus_node *estatus_node;
struct acpi_hest_generic *generic; struct acpi_hest_generic *generic;
struct acpi_hest_generic_status *estatus; struct acpi_generic_status *estatus;
u32 len, node_len; u32 len, node_len;
llnode = llist_del_all(&ghes_estatus_llist); llnode = llist_del_all(&ghes_estatus_llist);
...@@ -765,7 +765,7 @@ static void ghes_proc_in_irq(struct irq_work *irq_work) ...@@ -765,7 +765,7 @@ static void ghes_proc_in_irq(struct irq_work *irq_work)
estatus_node = llist_entry(llnode, struct ghes_estatus_node, estatus_node = llist_entry(llnode, struct ghes_estatus_node,
llnode); llnode);
estatus = GHES_ESTATUS_FROM_NODE(estatus_node); estatus = GHES_ESTATUS_FROM_NODE(estatus_node);
len = apei_estatus_len(estatus); len = cper_estatus_len(estatus);
node_len = GHES_ESTATUS_NODE_LEN(len); node_len = GHES_ESTATUS_NODE_LEN(len);
ghes_do_proc(estatus_node->ghes, estatus); ghes_do_proc(estatus_node->ghes, estatus);
if (!ghes_estatus_cached(estatus)) { if (!ghes_estatus_cached(estatus)) {
...@@ -784,7 +784,7 @@ static void ghes_print_queued_estatus(void) ...@@ -784,7 +784,7 @@ static void ghes_print_queued_estatus(void)
struct llist_node *llnode; struct llist_node *llnode;
struct ghes_estatus_node *estatus_node; struct ghes_estatus_node *estatus_node;
struct acpi_hest_generic *generic; struct acpi_hest_generic *generic;
struct acpi_hest_generic_status *estatus; struct acpi_generic_status *estatus;
u32 len, node_len; u32 len, node_len;
llnode = llist_del_all(&ghes_estatus_llist); llnode = llist_del_all(&ghes_estatus_llist);
...@@ -797,7 +797,7 @@ static void ghes_print_queued_estatus(void) ...@@ -797,7 +797,7 @@ static void ghes_print_queued_estatus(void)
estatus_node = llist_entry(llnode, struct ghes_estatus_node, estatus_node = llist_entry(llnode, struct ghes_estatus_node,
llnode); llnode);
estatus = GHES_ESTATUS_FROM_NODE(estatus_node); estatus = GHES_ESTATUS_FROM_NODE(estatus_node);
len = apei_estatus_len(estatus); len = cper_estatus_len(estatus);
node_len = GHES_ESTATUS_NODE_LEN(len); node_len = GHES_ESTATUS_NODE_LEN(len);
generic = estatus_node->generic; generic = estatus_node->generic;
ghes_print_estatus(NULL, generic, estatus); ghes_print_estatus(NULL, generic, estatus);
...@@ -843,7 +843,7 @@ static int ghes_notify_nmi(unsigned int cmd, struct pt_regs *regs) ...@@ -843,7 +843,7 @@ static int ghes_notify_nmi(unsigned int cmd, struct pt_regs *regs)
#ifdef CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG #ifdef CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG
u32 len, node_len; u32 len, node_len;
struct ghes_estatus_node *estatus_node; struct ghes_estatus_node *estatus_node;
struct acpi_hest_generic_status *estatus; struct acpi_generic_status *estatus;
#endif #endif
if (!(ghes->flags & GHES_TO_CLEAR)) if (!(ghes->flags & GHES_TO_CLEAR))
continue; continue;
...@@ -851,7 +851,7 @@ static int ghes_notify_nmi(unsigned int cmd, struct pt_regs *regs) ...@@ -851,7 +851,7 @@ static int ghes_notify_nmi(unsigned int cmd, struct pt_regs *regs)
if (ghes_estatus_cached(ghes->estatus)) if (ghes_estatus_cached(ghes->estatus))
goto next; goto next;
/* Save estatus for further processing in IRQ context */ /* Save estatus for further processing in IRQ context */
len = apei_estatus_len(ghes->estatus); len = cper_estatus_len(ghes->estatus);
node_len = GHES_ESTATUS_NODE_LEN(len); node_len = GHES_ESTATUS_NODE_LEN(len);
estatus_node = (void *)gen_pool_alloc(ghes_estatus_pool, estatus_node = (void *)gen_pool_alloc(ghes_estatus_pool,
node_len); node_len);
...@@ -923,7 +923,7 @@ static int ghes_probe(struct platform_device *ghes_dev) ...@@ -923,7 +923,7 @@ static int ghes_probe(struct platform_device *ghes_dev)
rc = -EIO; rc = -EIO;
if (generic->error_block_length < if (generic->error_block_length <
sizeof(struct acpi_hest_generic_status)) { sizeof(struct acpi_generic_status)) {
pr_warning(FW_BUG GHES_PFX "Invalid error block length: %u for generic hardware error source: %d\n", pr_warning(FW_BUG GHES_PFX "Invalid error block length: %u for generic hardware error source: %d\n",
generic->error_block_length, generic->error_block_length,
generic->header.source_id); generic->header.source_id);
......
...@@ -596,7 +596,7 @@ struct acpi_hest_generic { ...@@ -596,7 +596,7 @@ struct acpi_hest_generic {
/* Generic Error Status block */ /* Generic Error Status block */
struct acpi_hest_generic_status { struct acpi_generic_status {
u32 block_status; u32 block_status;
u32 raw_data_offset; u32 raw_data_offset;
u32 raw_data_length; u32 raw_data_length;
...@@ -606,15 +606,15 @@ struct acpi_hest_generic_status { ...@@ -606,15 +606,15 @@ struct acpi_hest_generic_status {
/* Values for block_status flags above */ /* Values for block_status flags above */
#define ACPI_HEST_UNCORRECTABLE (1) #define ACPI_GEN_ERR_UC BIT(0)
#define ACPI_HEST_CORRECTABLE (1<<1) #define ACPI_GEN_ERR_CE BIT(1)
#define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) #define ACPI_GEN_ERR_MULTI_UC BIT(2)
#define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) #define ACPI_GEN_ERR_MULTI_CE BIT(3)
#define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ #define ACPI_GEN_ERR_COUNT_SHIFT (0xFF<<4) /* 8 bits, error count */
/* Generic Error Data entry */ /* Generic Error Data entry */
struct acpi_hest_generic_data { struct acpi_generic_data {
u8 section_type[16]; u8 section_type[16];
u32 error_severity; u32 error_severity;
u16 revision; u16 revision;
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
struct ghes { struct ghes {
struct acpi_hest_generic *generic; struct acpi_hest_generic *generic;
struct acpi_hest_generic_status *estatus; struct acpi_generic_status *estatus;
u64 buffer_paddr; u64 buffer_paddr;
unsigned long flags; unsigned long flags;
union { union {
......
...@@ -389,6 +389,6 @@ struct cper_sec_pcie { ...@@ -389,6 +389,6 @@ struct cper_sec_pcie {
u64 cper_next_record_id(void); u64 cper_next_record_id(void);
void cper_print_bits(const char *prefix, unsigned int bits, void cper_print_bits(const char *prefix, unsigned int bits,
const char *strs[], unsigned int strs_size); const char * const strs[], unsigned int strs_size);
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment