ACPI, CPER: Update cper info
authorChen, Gong <gong.chen@linux.intel.com>
Fri, 18 Oct 2013 21:28:59 +0000 (14:28 -0700)
committerTony Luck <tony.luck@intel.com>
Mon, 21 Oct 2013 22:12:00 +0000 (15:12 -0700)
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: Chen, Gong <gong.chen@linux.intel.com>
Acked-by: Borislav Petkov <bp@suse.de>
Reviewed-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
drivers/acpi/apei/apei-internal.h
drivers/acpi/apei/cper.c
drivers/acpi/apei/ghes.c
include/acpi/actbl1.h
include/acpi/ghes.h
include/linux/cper.h

index f220d642136ed94a1844411ee532e777be6f847e..21ba34a73883d4cad91406659bbe27f80b788bdb 100644 (file)
@@ -122,11 +122,11 @@ struct dentry;
 struct dentry *apei_get_debugfs_dir(void);
 
 #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;  \
             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)
                return estatus->raw_data_offset + \
@@ -135,10 +135,10 @@ static inline u32 apei_estatus_len(struct acpi_hest_generic_status *estatus)
                return sizeof(*estatus) + estatus->data_length;
 }
 
-void apei_estatus_print(const char *pfx,
-                       const struct acpi_hest_generic_status *estatus);
-int apei_estatus_check_header(const struct acpi_hest_generic_status *estatus);
-int apei_estatus_check(const struct acpi_hest_generic_status *estatus);
+void cper_estatus_print(const char *pfx,
+                       const struct acpi_generic_status *estatus);
+int cper_estatus_check_header(const struct acpi_generic_status *estatus);
+int cper_estatus_check(const struct acpi_generic_status *estatus);
 
 int apei_osc_setup(void);
 #endif
index f827f02bfbe8c5ce371d3fe4f970197d62e4ec60..eb5f6d6d7dbcf6986962c742a1f8e5900dbb9bd1 100644 (file)
@@ -5,7 +5,7 @@
  *     Author: Huang Ying <ying.huang@intel.com>
  *
  * 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
  * Specification version 2.3.
@@ -73,7 +73,7 @@ static const char *cper_severity_str(unsigned int severity)
  * printed, with @pfx is printed at the beginning of each line.
  */
 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;
        const char *str;
@@ -98,32 +98,32 @@ void cper_print_bits(const char *pfx, unsigned int bits,
                printk("%s\n", buf);
 }
 
-static const char *cper_proc_type_strs[] = {
+static const char * const cper_proc_type_strs[] = {
        "IA32/X64",
        "IA64",
 };
 
-static const char *cper_proc_isa_strs[] = {
+static const char * const cper_proc_isa_strs[] = {
        "IA32",
        "IA64",
        "X64",
 };
 
-static const char *cper_proc_error_type_strs[] = {
+static const char * const cper_proc_error_type_strs[] = {
        "cache error",
        "TLB error",
        "bus error",
        "micro-architectural error",
 };
 
-static const char *cper_proc_op_strs[] = {
+static const char * const cper_proc_op_strs[] = {
        "unknown or generic",
        "data read",
        "data write",
        "instruction execution",
 };
 
-static const char *cper_proc_flag_strs[] = {
+static const char * const cper_proc_flag_strs[] = {
        "restartable",
        "precise IP",
        "overflow",
@@ -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,
-                           const struct acpi_hest_generic_data *gdata)
+                           const struct acpi_generic_data *gdata)
 {
        if (pcie->validation_bits & CPER_PCIE_VALID_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,
        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",
        "containment warning",
        "reset",
-       "threshold exceeded",
+       "error threshold exceeded",
        "resource not accessible",
        "latent error",
 };
 
-static void apei_estatus_print_section(
-       const char *pfx, const struct acpi_hest_generic_data *gdata, int sec_no)
+static void cper_estatus_print_section(
+       const char *pfx, const struct acpi_generic_data *gdata, int sec_no)
 {
        uuid_le *sec_type = (uuid_le *)gdata->section_type;
        __u16 severity;
@@ -302,8 +302,8 @@ static void apei_estatus_print_section(
        printk("%s""section: %d, severity: %d, %s\n", pfx, sec_no, severity,
               cper_severity_str(severity));
        printk("%s""flags: 0x%02x\n", pfx, gdata->flags);
-       cper_print_bits(pfx, gdata->flags, apei_estatus_section_flag_strs,
-                       ARRAY_SIZE(apei_estatus_section_flag_strs));
+       cper_print_bits(pfx, gdata->flags, cper_estatus_section_flag_strs,
+                       ARRAY_SIZE(cper_estatus_section_flag_strs));
        if (gdata->validation_bits & CPER_SEC_VALID_FRU_ID)
                printk("%s""fru_id: %pUl\n", pfx, (uuid_le *)gdata->fru_id);
        if (gdata->validation_bits & CPER_SEC_VALID_FRU_TEXT)
@@ -339,34 +339,34 @@ err_section_too_small:
        pr_err(FW_WARN "error section length is too small\n");
 }
 
-void apei_estatus_print(const char *pfx,
-                       const struct acpi_hest_generic_status *estatus)
+void cper_estatus_print(const char *pfx,
+                       const struct acpi_generic_status *estatus)
 {
-       struct acpi_hest_generic_data *gdata;
+       struct acpi_generic_data *gdata;
        unsigned int data_len, gedata_len;
        int sec_no = 0;
        __u16 severity;
 
-       printk("%s""APEI generic hardware error status\n", pfx);
+       printk("%s""Generic Hardware Error Status\n", pfx);
        severity = estatus->error_severity;
        printk("%s""severity: %d, %s\n", pfx, severity,
               cper_severity_str(severity));
        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)) {
                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);
                gdata = (void *)(gdata + 1) + gedata_len;
                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 &&
-           estatus->data_length < sizeof(struct acpi_hest_generic_data))
+           estatus->data_length < sizeof(struct acpi_generic_data))
                return -EINVAL;
        if (estatus->raw_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)
 
        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;
        int rc;
 
-       rc = apei_estatus_check_header(estatus);
+       rc = cper_estatus_check_header(estatus);
        if (rc)
                return rc;
        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)) {
                gedata_len = gdata->error_data_length;
                if (gedata_len > data_len - sizeof(*gdata))
@@ -399,4 +399,4 @@ int apei_estatus_check(const struct acpi_hest_generic_status *estatus)
 
        return 0;
 }
-EXPORT_SYMBOL_GPL(apei_estatus_check);
+EXPORT_SYMBOL_GPL(cper_estatus_check);
index 8ec37bbdd6991939107c4bde2a54d3652290f0e6..0db6e4ff650133f5a7c088b182f538e4078d5f0b 100644 (file)
 #define GHES_ESTATUS_CACHE_LEN(estatus_len)                    \
        (sizeof(struct ghes_estatus_cache) + (estatus_len))
 #define GHES_ESTATUS_FROM_CACHE(estatus_cache)                 \
-       ((struct acpi_hest_generic_status *)                    \
+       ((struct acpi_generic_status *)                         \
         ((struct ghes_estatus_cache *)(estatus_cache) + 1))
 
 #define GHES_ESTATUS_NODE_LEN(estatus_len)                     \
        (sizeof(struct ghes_estatus_node) + (estatus_len))
-#define GHES_ESTATUS_FROM_NODE(estatus_node)                           \
-       ((struct acpi_hest_generic_status *)                            \
+#define GHES_ESTATUS_FROM_NODE(estatus_node)                   \
+       ((struct acpi_generic_status *)                         \
         ((struct ghes_estatus_node *)(estatus_node) + 1))
 
 bool ghes_disable;
@@ -378,17 +378,17 @@ static int ghes_read_estatus(struct ghes *ghes, int silent)
        ghes->flags |= GHES_TO_CLEAR;
 
        rc = -EIO;
-       len = apei_estatus_len(ghes->estatus);
+       len = cper_estatus_len(ghes->estatus);
        if (len < sizeof(*ghes->estatus))
                goto err_read_block;
        if (len > ghes->generic->error_block_length)
                goto err_read_block;
-       if (apei_estatus_check_header(ghes->estatus))
+       if (cper_estatus_check_header(ghes->estatus))
                goto err_read_block;
        ghes_copy_tofrom_phys(ghes->estatus + 1,
                              buf_paddr + sizeof(*ghes->estatus),
                              len - sizeof(*ghes->estatus), 1);
-       if (apei_estatus_check(ghes->estatus))
+       if (cper_estatus_check(ghes->estatus))
                goto err_read_block;
        rc = 0;
 
@@ -409,7 +409,7 @@ static void ghes_clear_estatus(struct ghes *ghes)
        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
        unsigned long pfn;
@@ -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,
-                        const struct acpi_hest_generic_status *estatus)
+                        const struct acpi_generic_status *estatus)
 {
        int sev, sec_sev;
-       struct acpi_hest_generic_data *gdata;
+       struct acpi_generic_data *gdata;
 
        sev = ghes_severity(estatus->error_severity);
        apei_estatus_for_each_section(estatus, gdata) {
@@ -496,7 +496,7 @@ static void ghes_do_proc(struct ghes *ghes,
 
 static void __ghes_print_estatus(const char *pfx,
                                 const struct acpi_hest_generic *generic,
-                                const struct acpi_hest_generic_status *estatus)
+                                const struct acpi_generic_status *estatus)
 {
        static atomic_t seqno;
        unsigned int curr_seqno;
@@ -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);
        printk("%s""Hardware error from APEI Generic Hardware Error Source: %d\n",
               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,
                              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 */
        static DEFINE_RATELIMIT_STATE(ratelimit_corrected, 5*HZ, 2);
@@ -540,15 +540,15 @@ static int ghes_print_estatus(const char *pfx,
  * GHES error status reporting throttle, to report more kinds of
  * 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;
        int i, cached = 0;
        unsigned long long now;
        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();
        for (i = 0; i < GHES_ESTATUS_CACHES_SIZE; i++) {
                cache = rcu_dereference(ghes_estatus_caches[i]);
@@ -571,19 +571,19 @@ static int ghes_estatus_cached(struct acpi_hest_generic_status *estatus)
 
 static struct ghes_estatus_cache *ghes_estatus_cache_alloc(
        struct acpi_hest_generic *generic,
-       struct acpi_hest_generic_status *estatus)
+       struct acpi_generic_status *estatus)
 {
        int alloced;
        u32 len, cache_len;
        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);
        if (alloced > GHES_ESTATUS_CACHE_ALLOCED_MAX) {
                atomic_dec(&ghes_estatus_cache_alloced);
                return NULL;
        }
-       len = apei_estatus_len(estatus);
+       len = cper_estatus_len(estatus);
        cache_len = GHES_ESTATUS_CACHE_LEN(len);
        cache = (void *)gen_pool_alloc(ghes_estatus_pool, cache_len);
        if (!cache) {
@@ -603,7 +603,7 @@ static void ghes_estatus_cache_free(struct ghes_estatus_cache *cache)
 {
        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);
        gen_pool_free(ghes_estatus_pool, (unsigned long)cache, len);
        atomic_dec(&ghes_estatus_cache_alloced);
@@ -619,7 +619,7 @@ static void ghes_estatus_cache_rcu_free(struct rcu_head *head)
 
 static void ghes_estatus_cache_add(
        struct acpi_hest_generic *generic,
-       struct acpi_hest_generic_status *estatus)
+       struct acpi_generic_status *estatus)
 {
        int i, slot = -1, count;
        unsigned long long now, duration, period, max_period = 0;
@@ -751,7 +751,7 @@ static void ghes_proc_in_irq(struct irq_work *irq_work)
        struct llist_node *llnode, *next;
        struct ghes_estatus_node *estatus_node;
        struct acpi_hest_generic *generic;
-       struct acpi_hest_generic_status *estatus;
+       struct acpi_generic_status *estatus;
        u32 len, node_len;
 
        llnode = llist_del_all(&ghes_estatus_llist);
@@ -765,7 +765,7 @@ static void ghes_proc_in_irq(struct irq_work *irq_work)
                estatus_node = llist_entry(llnode, struct ghes_estatus_node,
                                           llnode);
                estatus = GHES_ESTATUS_FROM_NODE(estatus_node);
-               len = apei_estatus_len(estatus);
+               len = cper_estatus_len(estatus);
                node_len = GHES_ESTATUS_NODE_LEN(len);
                ghes_do_proc(estatus_node->ghes, estatus);
                if (!ghes_estatus_cached(estatus)) {
@@ -784,7 +784,7 @@ static void ghes_print_queued_estatus(void)
        struct llist_node *llnode;
        struct ghes_estatus_node *estatus_node;
        struct acpi_hest_generic *generic;
-       struct acpi_hest_generic_status *estatus;
+       struct acpi_generic_status *estatus;
        u32 len, node_len;
 
        llnode = llist_del_all(&ghes_estatus_llist);
@@ -797,7 +797,7 @@ static void ghes_print_queued_estatus(void)
                estatus_node = llist_entry(llnode, struct ghes_estatus_node,
                                           llnode);
                estatus = GHES_ESTATUS_FROM_NODE(estatus_node);
-               len = apei_estatus_len(estatus);
+               len = cper_estatus_len(estatus);
                node_len = GHES_ESTATUS_NODE_LEN(len);
                generic = estatus_node->generic;
                ghes_print_estatus(NULL, generic, estatus);
@@ -843,7 +843,7 @@ static int ghes_notify_nmi(unsigned int cmd, struct pt_regs *regs)
 #ifdef CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG
                u32 len, node_len;
                struct ghes_estatus_node *estatus_node;
-               struct acpi_hest_generic_status *estatus;
+               struct acpi_generic_status *estatus;
 #endif
                if (!(ghes->flags & GHES_TO_CLEAR))
                        continue;
@@ -851,7 +851,7 @@ static int ghes_notify_nmi(unsigned int cmd, struct pt_regs *regs)
                if (ghes_estatus_cached(ghes->estatus))
                        goto next;
                /* 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);
                estatus_node = (void *)gen_pool_alloc(ghes_estatus_pool,
                                                      node_len);
@@ -923,7 +923,7 @@ static int ghes_probe(struct platform_device *ghes_dev)
 
        rc = -EIO;
        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",
                           generic->error_block_length,
                           generic->header.source_id);
index 0bd750ebeb491c5b026c7f62811d1311ff08d310..556c83ee6b42f3fafc419755f47062cde2212412 100644 (file)
@@ -596,7 +596,7 @@ struct acpi_hest_generic {
 
 /* Generic Error Status block */
 
-struct acpi_hest_generic_status {
+struct acpi_generic_status {
        u32 block_status;
        u32 raw_data_offset;
        u32 raw_data_length;
@@ -606,15 +606,15 @@ struct acpi_hest_generic_status {
 
 /* Values for block_status flags above */
 
-#define ACPI_HEST_UNCORRECTABLE             (1)
-#define ACPI_HEST_CORRECTABLE               (1<<1)
-#define ACPI_HEST_MULTIPLE_UNCORRECTABLE    (1<<2)
-#define ACPI_HEST_MULTIPLE_CORRECTABLE      (1<<3)
-#define ACPI_HEST_ERROR_ENTRY_COUNT         (0xFF<<4)  /* 8 bits, error count */
+#define ACPI_GEN_ERR_UC                        BIT(0)
+#define ACPI_GEN_ERR_CE                        BIT(1)
+#define ACPI_GEN_ERR_MULTI_UC          BIT(2)
+#define ACPI_GEN_ERR_MULTI_CE          BIT(3)
+#define ACPI_GEN_ERR_COUNT_SHIFT       (0xFF<<4) /* 8 bits, error count */
 
 /* Generic Error Data entry */
 
-struct acpi_hest_generic_data {
+struct acpi_generic_data {
        u8 section_type[16];
        u32 error_severity;
        u16 revision;
index 720446cb243e81f07a02a8763eea0994ce43e772..dfd60d0bfd2783ec8d93e53c9134c48d5b690bde 100644 (file)
@@ -14,7 +14,7 @@
 
 struct ghes {
        struct acpi_hest_generic *generic;
-       struct acpi_hest_generic_status *estatus;
+       struct acpi_generic_status *estatus;
        u64 buffer_paddr;
        unsigned long flags;
        union {
index c23049496531c2670a07c101c0a6c60c3dc572f7..09ebe2113641585863cb488c0971ff010ef9d0ea 100644 (file)
@@ -389,6 +389,6 @@ struct cper_sec_pcie {
 
 u64 cper_next_record_id(void);
 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