From: Keith Owens <kaos@sgi.com>
To: linux-ia64@vger.kernel.org
Subject: [patch] 2/5 2.4.25-pre7 mca.c cleanup - Delete all record printing code, moved to salinfo_decode in
Date: Mon, 02 Feb 2004 07:03:59 +0000 [thread overview]
Message-ID: <6751.1075705439@kao2.melbourne.sgi.com> (raw)
Delete all record printing code, moved to salinfo_decode in user space.
Index: 25-pre7.4/include/asm-ia64/mca.h
--- 25-pre7.4/include/asm-ia64/mca.h Mon, 02 Feb 2004 14:21:30 +1100 kaos (linux-2.4/t/19_mca.h 1.1.3.1.1.1.1.1.1.1.1.1.1.3 644)
+++ 25-pre7.5/include/asm-ia64/mca.h Mon, 02 Feb 2004 16:52:37 +1100 kaos (linux-2.4/t/19_mca.h 1.1.3.1.1.1.1.1.1.1.1.1.1.4 644)
@@ -133,8 +133,6 @@ typedef struct ia64_mca_os_to_sal_state_
*/
} ia64_mca_os_to_sal_state_t;
-typedef int (*prfunc_t)(const char * fmt, ...);
-
extern void ia64_mca_init(void);
extern void ia64_os_mca_dispatch(void);
extern void ia64_os_mca_dispatch_end(void);
@@ -147,19 +145,9 @@ extern void ia64_mca_cmc_int_handler(int
extern void ia64_mca_cmc_int_caller(int,void *,struct pt_regs *);
extern void ia64_mca_cpe_int_handler(int,void *,struct pt_regs *);
extern void ia64_mca_cpe_int_caller(int,void *,struct pt_regs *);
-extern int ia64_log_print(int,prfunc_t);
extern void ia64_mca_cmc_vector_setup(void);
extern int ia64_mca_check_errors(void);
-#define PLATFORM_CALL(fn, args) printk("Platform call TBD\n")
-
-#define platform_mem_dev_err_print ia64_log_prt_oem_data
-#define platform_pci_bus_err_print ia64_log_prt_oem_data
-#define platform_pci_comp_err_print ia64_log_prt_oem_data
-#define platform_plat_specific_err_print ia64_log_prt_oem_data
-#define platform_host_ctlr_err_print ia64_log_prt_oem_data
-#define platform_plat_bus_err_print ia64_log_prt_oem_data
-
#undef MCA_TEST
#undef IA64_MCA_DEBUG_INFO
Index: 25-pre7.4/arch/ia64/kernel/mca.c
--- 25-pre7.4/arch/ia64/kernel/mca.c Mon, 02 Feb 2004 16:38:33 +1100 kaos (linux-2.4/s/c/5_mca.c 1.1.3.2.3.1.1.1.1.2.1.1.1.1.1.7 644)
+++ 25-pre7.5/arch/ia64/kernel/mca.c Mon, 02 Feb 2004 16:52:37 +1100 kaos (linux-2.4/s/c/5_mca.c 1.1.3.2.3.1.1.1.1.2.1.1.1.1.1.8 644)
@@ -43,6 +43,7 @@
*
* 2004-02-01 Keith Owens <kaos@sgi.com>
* Avoid deadlock when using printk() for MCA and INIT records.
+ * Delete all record printing code, moved to salinfo_decode in user space.
*/
#include <linux/config.h>
#include <linux/types.h>
@@ -437,7 +438,7 @@ ia64_mca_check_errors (void)
/*
* If there is an MCA error record pending, get it and log it.
*/
- printk("CPU %d: checking for saved MCA error records\n", smp_processor_id());
+ printk(KERN_INFO "CPU %d: checking for saved MCA error records\n", smp_processor_id());
ia64_mca_log_sal_error_record(SAL_INFO_TYPE_MCA, 1);
return 0;
@@ -557,60 +558,6 @@ ia64_mca_cmc_vector_enable (void *dummy)
smp_processor_id(), cmcv.cmcv_vector);
}
-
-#if defined(MCA_TEST)
-
-sal_log_processor_info_t slpi_buf;
-
-void
-mca_test(void)
-{
- slpi_buf.valid.psi_static_struct = 1;
- slpi_buf.valid.num_cache_check = 1;
- slpi_buf.valid.num_tlb_check = 1;
- slpi_buf.valid.num_bus_check = 1;
- slpi_buf.valid.processor_static_info.minstate = 1;
- slpi_buf.valid.processor_static_info.br = 1;
- slpi_buf.valid.processor_static_info.cr = 1;
- slpi_buf.valid.processor_static_info.ar = 1;
- slpi_buf.valid.processor_static_info.rr = 1;
- slpi_buf.valid.processor_static_info.fr = 1;
-
- ia64_os_mca_dispatch();
-}
-
-#endif /* #if defined(MCA_TEST) */
-
-
-/*
- * verify_guid
- *
- * Compares a test guid to a target guid and returns result.
- *
- * Inputs
- * test_guid * (ptr to guid to be verified)
- * target_guid * (ptr to standard guid to be verified against)
- *
- * Outputs
- * 0 (test verifies against target)
- * non-zero (test guid does not verify)
- */
-static int
-verify_guid (efi_guid_t *test, efi_guid_t *target)
-{
- int rc;
-#ifdef IA64_MCA_DEBUG_INFO
- char out[40];
-#endif
-
- if ((rc = efi_guidcmp(*test, *target))) {
- IA64_MCA_DEBUG(KERN_DEBUG
- "verify_guid: invalid GUID = %s\n",
- efi_guid_unparse(test, out));
- }
- return rc;
-}
-
/*
* ia64_mca_cmc_vector_disable_keventd
*
@@ -1336,68 +1283,6 @@ ia64_init_handler (struct pt_regs *pt, s
}
/*
- * ia64_log_prt_guid
- *
- * Print a formatted GUID.
- *
- * Inputs : p_guid (ptr to the GUID)
- * prfunc (print function)
- * Outputs : None
- *
- */
-void
-ia64_log_prt_guid (efi_guid_t *p_guid, prfunc_t prfunc)
-{
- char out[40];
- printk(KERN_DEBUG "GUID = %s\n", efi_guid_unparse(p_guid, out));
-}
-
-static void
-ia64_log_hexdump(unsigned char *p, unsigned long n_ch, prfunc_t prfunc)
-{
- unsigned long i;
- int j;
-
- if (!p)
- return;
-
- for (i = 0; i < n_ch;) {
- prfunc("%p ", (void *)p);
- for (j = 0; (j < 16) && (i < n_ch); i++, j++, p++) {
- prfunc("%02x ", *p);
- }
- prfunc("\n");
- }
-}
-
-#ifdef MCA_PRT_XTRA_DATA // for test only @FVL
-
-static void
-ia64_log_prt_record_header (sal_log_record_header_t *rh, prfunc_t prfunc)
-{
- prfunc("SAL RECORD HEADER: Record buffer = %p, header size = %ld\n",
- (void *)rh, sizeof(sal_log_record_header_t));
- ia64_log_hexdump((unsigned char *)rh, sizeof(sal_log_record_header_t),
- (prfunc_t)prfunc);
- prfunc("Total record length = %d\n", rh->len);
- ia64_log_prt_guid(&rh->platform_guid, prfunc);
- prfunc("End of SAL RECORD HEADER\n");
-}
-
-static void
-ia64_log_prt_section_header (sal_log_section_hdr_t *sh, prfunc_t prfunc)
-{
- prfunc("SAL SECTION HEADER: Record buffer = %p, header size = %ld\n",
- (void *)sh, sizeof(sal_log_section_hdr_t));
- ia64_log_hexdump((unsigned char *)sh, sizeof(sal_log_section_hdr_t),
- (prfunc_t)prfunc);
- prfunc("Length of section & header = %d\n", sh->len);
- ia64_log_prt_guid(&sh->guid, prfunc);
- prfunc("End of SAL SECTION HEADER\n");
-}
-#endif // MCA_PRT_XTRA_DATA for test only @FVL
-
-/*
* ia64_log_init
* Reset the OS ia64 log buffer
* Inputs : info_type (SAL_INFO_TYPE_{MCA,INIT,CMC,CPE})
@@ -1460,953 +1345,6 @@ ia64_log_get(int sal_info_type, u8 **buf
}
}
-/*
- * ia64_log_prt_oem_data
- *
- * Print OEM specific data if included.
- *
- * Inputs : header_len (length passed in section header)
- * sect_len (default length of section type)
- * p_data (ptr to data)
- * prfunc (print function)
- * Outputs : None
- *
- */
-void
-ia64_log_prt_oem_data (int header_len, int sect_len, u8 *p_data, prfunc_t prfunc)
-{
- int oem_data_len, i;
-
- if ((oem_data_len = header_len - sect_len) > 0) {
- prfunc(" OEM Specific Data:");
- for (i = 0; i < oem_data_len; i++, p_data++)
- prfunc(" %02x", *p_data);
- }
- prfunc("\n");
-}
-
-/*
- * ia64_log_rec_header_print
- *
- * Log info from the SAL error record header.
- *
- * Inputs : lh * (ptr to SAL log error record header)
- * prfunc (fn ptr of log output function to use)
- * Outputs : None
- */
-void
-ia64_log_rec_header_print (sal_log_record_header_t *lh, prfunc_t prfunc)
-{
- prfunc("+Err Record ID: %ld SAL Rev: %2x.%02x\n", lh->id,
- lh->revision.major, lh->revision.minor);
- prfunc("+Time: %02x/%02x/%02x%02x %02x:%02x:%02x Severity %d\n",
- lh->timestamp.slh_month, lh->timestamp.slh_day,
- lh->timestamp.slh_century, lh->timestamp.slh_year,
- lh->timestamp.slh_hour, lh->timestamp.slh_minute,
- lh->timestamp.slh_second, lh->severity);
-}
-
-/*
- * ia64_log_processor_regs_print
- * Print the contents of the saved processor register(s) in the format
- * <reg_prefix>[<index>] <value>
- *
- * Inputs : regs (Register save buffer)
- * reg_num (# of registers)
- * reg_class (application/banked/control/bank1_general)
- * reg_prefix (ar/br/cr/b1_gr)
- * Outputs : None
- *
- */
-void
-ia64_log_processor_regs_print(u64 *regs,
- int reg_num,
- char *reg_class,
- char *reg_prefix,
- prfunc_t prfunc)
-{
- int i;
-
- prfunc("+%s Registers\n", reg_class);
- for (i = 0; i < reg_num; i++)
- prfunc("+ %s[%d] 0x%lx\n", reg_prefix, i, regs[i]);
-}
-
-/*
- * ia64_log_processor_fp_regs_print
- * Print the contents of the saved floating page register(s) in the format
- * <reg_prefix>[<index>] <value>
- *
- * Inputs: ia64_fpreg (Register save buffer)
- * reg_num (# of registers)
- * reg_class (application/banked/control/bank1_general)
- * reg_prefix (ar/br/cr/b1_gr)
- * Outputs: None
- *
- */
-void
-ia64_log_processor_fp_regs_print (struct ia64_fpreg *regs,
- int reg_num,
- char *reg_class,
- char *reg_prefix,
- prfunc_t prfunc)
-{
- int i;
-
- prfunc("+%s Registers\n", reg_class);
- for (i = 0; i < reg_num; i++)
- prfunc("+ %s[%d] 0x%lx%016lx\n", reg_prefix, i, regs[i].u.bits[1],
- regs[i].u.bits[0]);
-}
-
-static char *pal_mesi_state[] = {
- "Invalid",
- "Shared",
- "Exclusive",
- "Modified",
- "Reserved1",
- "Reserved2",
- "Reserved3",
- "Reserved4"
-};
-
-static char *pal_cache_op[] = {
- "Unknown",
- "Move in",
- "Cast out",
- "Coherency check",
- "Internal",
- "Instruction fetch",
- "Implicit Writeback",
- "Reserved"
-};
-
-/*
- * ia64_log_cache_check_info_print
- * Display the machine check information related to cache error(s).
- * Inputs: i (Multiple errors are logged, i - index of logged error)
- * cc_info * (Ptr to cache check info logged by the PAL and later
- * captured by the SAL)
- * prfunc (fn ptr of print function to be used for output)
- * Outputs: None
- */
-void
-ia64_log_cache_check_info_print (int i,
- sal_log_mod_error_info_t *cache_check_info,
- prfunc_t prfunc)
-{
- pal_cache_check_info_t *info;
- u64 target_addr;
-
- if (!cache_check_info->valid.check_info) {
- IA64_MCA_DEBUG("ia64_mca_log_print: invalid cache_check_info[%d]\n",i);
- return; /* If check info data not valid, skip it */
- }
-
- info = (pal_cache_check_info_t *)&cache_check_info->check_info;
- target_addr = cache_check_info->target_identifier;
-
- prfunc("+ Cache check info[%d]\n+", i);
- prfunc(" Level: L%d,",info->level);
- if (info->mv)
- prfunc(" Mesi: %s,",pal_mesi_state[info->mesi]);
- prfunc(" Index: %d,", info->index);
- if (info->ic)
- prfunc(" Cache: Instruction,");
- if (info->dc)
- prfunc(" Cache: Data,");
- if (info->tl)
- prfunc(" Line: Tag,");
- if (info->dl)
- prfunc(" Line: Data,");
- prfunc(" Operation: %s,", pal_cache_op[info->op]);
- if (info->wiv)
- prfunc(" Way: %d,", info->way);
- if (cache_check_info->valid.target_identifier)
- /* Hope target address is saved in target_identifier */
- if (info->tv)
- prfunc(" Target Addr: 0x%lx,", target_addr);
- if (info->mcc)
- prfunc(" MC: Corrected");
- prfunc("\n");
-}
-
-/*
- * ia64_log_tlb_check_info_print
- * Display the machine check information related to tlb error(s).
- * Inputs: i (Multiple errors are logged, i - index of logged error)
- * tlb_info * (Ptr to machine check info logged by the PAL and later
- * captured by the SAL)
- * prfunc (fn ptr of print function to be used for output)
- * Outputs: None
- */
-void
-ia64_log_tlb_check_info_print (int i,
- sal_log_mod_error_info_t *tlb_check_info,
- prfunc_t prfunc)
-
-{
- pal_tlb_check_info_t *info;
-
- if (!tlb_check_info->valid.check_info) {
- IA64_MCA_DEBUG("ia64_mca_log_print: invalid tlb_check_info[%d]\n", i);
- return; /* If check info data not valid, skip it */
- }
-
- info = (pal_tlb_check_info_t *)&tlb_check_info->check_info;
-
- prfunc("+ TLB Check Info [%d]\n+", i);
- if (info->itc)
- prfunc(" Failure: Instruction Translation Cache");
- if (info->dtc)
- prfunc(" Failure: Data Translation Cache");
- if (info->itr) {
- prfunc(" Failure: Instruction Translation Register");
- prfunc(" ,Slot: %ld", info->tr_slot);
- }
- if (info->dtr) {
- prfunc(" Failure: Data Translation Register");
- prfunc(" ,Slot: %ld", info->tr_slot);
- }
- if (info->mcc)
- prfunc(" ,MC: Corrected");
- prfunc("\n");
-}
-
-/*
- * ia64_log_bus_check_info_print
- * Display the machine check information related to bus error(s).
- * Inputs: i (Multiple errors are logged, i - index of logged error)
- * bus_info * (Ptr to machine check info logged by the PAL and later
- * captured by the SAL)
- * prfunc (fn ptr of print function to be used for output)
- * Outputs: None
- */
-void
-ia64_log_bus_check_info_print (int i,
- sal_log_mod_error_info_t *bus_check_info,
- prfunc_t prfunc)
-{
- pal_bus_check_info_t *info;
- u64 req_addr; /* Address of the requestor of the transaction */
- u64 resp_addr; /* Address of the responder of the transaction */
- u64 targ_addr; /* Address where the data was to be delivered to */
- /* or obtained from */
-
- if (!bus_check_info->valid.check_info) {
- IA64_MCA_DEBUG("ia64_mca_log_print: invalid bus_check_info[%d]\n", i);
- return; /* If check info data not valid, skip it */
- }
-
- info = (pal_bus_check_info_t *)&bus_check_info->check_info;
- req_addr = bus_check_info->requestor_identifier;
- resp_addr = bus_check_info->responder_identifier;
- targ_addr = bus_check_info->target_identifier;
-
- prfunc("+ BUS Check Info [%d]\n+", i);
- prfunc(" Status Info: %d", info->bsi);
- prfunc(" ,Severity: %d", info->sev);
- prfunc(" ,Transaction Type: %d", info->type);
- prfunc(" ,Transaction Size: %d", info->size);
- if (info->cc)
- prfunc(" ,Cache-cache-transfer");
- if (info->ib)
- prfunc(" ,Error: Internal");
- if (info->eb)
- prfunc(" ,Error: External");
- if (info->mcc)
- prfunc(" ,MC: Corrected");
- if (info->tv)
- prfunc(" ,Target Address: 0x%lx", targ_addr);
- if (info->rq)
- prfunc(" ,Requestor Address: 0x%lx", req_addr);
- if (info->tv)
- prfunc(" ,Responder Address: 0x%lx", resp_addr);
- prfunc("\n");
-}
-
-/*
- * ia64_log_mem_dev_err_info_print
- *
- * Format and log the platform memory device error record section data.
- *
- * Inputs: mem_dev_err_info * (Ptr to memory device error record section
- * returned by SAL)
- * prfunc (fn ptr of print function to be used for output)
- * Outputs: None
- */
-void
-ia64_log_mem_dev_err_info_print (sal_log_mem_dev_err_info_t *mdei,
- prfunc_t prfunc)
-{
- prfunc("+ Mem Error Detail: ");
-
- if (mdei->valid.error_status)
- prfunc(" Error Status: %#lx,", mdei->error_status);
- if (mdei->valid.physical_addr)
- prfunc(" Physical Address: %#lx,", mdei->physical_addr);
- if (mdei->valid.addr_mask)
- prfunc(" Address Mask: %#lx,", mdei->addr_mask);
- if (mdei->valid.node)
- prfunc(" Node: %d,", mdei->node);
- if (mdei->valid.card)
- prfunc(" Card: %d,", mdei->card);
- if (mdei->valid.module)
- prfunc(" Module: %d,", mdei->module);
- if (mdei->valid.bank)
- prfunc(" Bank: %d,", mdei->bank);
- if (mdei->valid.device)
- prfunc(" Device: %d,", mdei->device);
- if (mdei->valid.row)
- prfunc(" Row: %d,", mdei->row);
- if (mdei->valid.column)
- prfunc(" Column: %d,", mdei->column);
- if (mdei->valid.bit_position)
- prfunc(" Bit Position: %d,", mdei->bit_position);
- if (mdei->valid.target_id)
- prfunc(" ,Target Address: %#lx,", mdei->target_id);
- if (mdei->valid.requestor_id)
- prfunc(" ,Requestor Address: %#lx,", mdei->requestor_id);
- if (mdei->valid.responder_id)
- prfunc(" ,Responder Address: %#lx,", mdei->responder_id);
- if (mdei->valid.bus_spec_data)
- prfunc(" Bus Specific Data: %#lx,", mdei->bus_spec_data);
- prfunc("\n");
-
- if (mdei->valid.oem_id) {
- u8 *p_data = &(mdei->oem_id[0]);
- int i;
-
- prfunc(" OEM Memory Controller ID:");
- for (i = 0; i < 16; i++, p_data++)
- prfunc(" %02x", *p_data);
- prfunc("\n");
- }
-
- if (mdei->valid.oem_data) {
- platform_mem_dev_err_print((int)mdei->header.len,
- (int)sizeof(sal_log_mem_dev_err_info_t) - 1,
- &(mdei->oem_data[0]), prfunc);
- }
-}
-
-/*
- * ia64_log_sel_dev_err_info_print
- *
- * Format and log the platform SEL device error record section data.
- *
- * Inputs: sel_dev_err_info * (Ptr to the SEL device error record section
- * returned by SAL)
- * prfunc (fn ptr of print function to be used for output)
- * Outputs: None
- */
-void
-ia64_log_sel_dev_err_info_print (sal_log_sel_dev_err_info_t *sdei,
- prfunc_t prfunc)
-{
- int i;
-
- prfunc("+ SEL Device Error Detail: ");
-
- if (sdei->valid.record_id)
- prfunc(" Record ID: %#x", sdei->record_id);
- if (sdei->valid.record_type)
- prfunc(" Record Type: %#x", sdei->record_type);
- prfunc(" Time Stamp: ");
- for (i = 0; i < 4; i++)
- prfunc("%1d", sdei->timestamp[i]);
- if (sdei->valid.generator_id)
- prfunc(" Generator ID: %#x", sdei->generator_id);
- if (sdei->valid.evm_rev)
- prfunc(" Message Format Version: %#x", sdei->evm_rev);
- if (sdei->valid.sensor_type)
- prfunc(" Sensor Type: %#x", sdei->sensor_type);
- if (sdei->valid.sensor_num)
- prfunc(" Sensor Number: %#x", sdei->sensor_num);
- if (sdei->valid.event_dir)
- prfunc(" Event Direction Type: %#x", sdei->event_dir);
- if (sdei->valid.event_data1)
- prfunc(" Data1: %#x", sdei->event_data1);
- if (sdei->valid.event_data2)
- prfunc(" Data2: %#x", sdei->event_data2);
- if (sdei->valid.event_data3)
- prfunc(" Data3: %#x", sdei->event_data3);
- prfunc("\n");
-
-}
-
-/*
- * ia64_log_pci_bus_err_info_print
- *
- * Format and log the platform PCI bus error record section data.
- *
- * Inputs: pci_bus_err_info * (Ptr to the PCI bus error record section
- * returned by SAL)
- * prfunc (fn ptr of print function to be used for output)
- * Outputs: None
- */
-void
-ia64_log_pci_bus_err_info_print (sal_log_pci_bus_err_info_t *pbei,
- prfunc_t prfunc)
-{
- prfunc("+ PCI Bus Error Detail: ");
-
- if (pbei->valid.err_status)
- prfunc(" Error Status: %#lx", pbei->err_status);
- if (pbei->valid.err_type)
- prfunc(" Error Type: %#x", pbei->err_type);
- if (pbei->valid.bus_id)
- prfunc(" Bus ID: %#x", pbei->bus_id);
- if (pbei->valid.bus_address)
- prfunc(" Bus Address: %#lx", pbei->bus_address);
- if (pbei->valid.bus_data)
- prfunc(" Bus Data: %#lx", pbei->bus_data);
- if (pbei->valid.bus_cmd)
- prfunc(" Bus Command: %#lx", pbei->bus_cmd);
- if (pbei->valid.requestor_id)
- prfunc(" Requestor ID: %#lx", pbei->requestor_id);
- if (pbei->valid.responder_id)
- prfunc(" Responder ID: %#lx", pbei->responder_id);
- if (pbei->valid.target_id)
- prfunc(" Target ID: %#lx", pbei->target_id);
- if (pbei->valid.oem_data)
- prfunc("\n");
-
- if (pbei->valid.oem_data) {
- platform_pci_bus_err_print((int)pbei->header.len,
- (int)sizeof(sal_log_pci_bus_err_info_t) - 1,
- &(pbei->oem_data[0]), prfunc);
- }
-}
-
-/*
- * ia64_log_smbios_dev_err_info_print
- *
- * Format and log the platform SMBIOS device error record section data.
- *
- * Inputs: smbios_dev_err_info * (Ptr to the SMBIOS device error record
- * section returned by SAL)
- * prfunc (fn ptr of print function to be used for output)
- * Outputs: None
- */
-void
-ia64_log_smbios_dev_err_info_print (sal_log_smbios_dev_err_info_t *sdei,
- prfunc_t prfunc)
-{
- u8 i;
-
- prfunc("+ SMBIOS Device Error Detail: ");
-
- if (sdei->valid.event_type)
- prfunc(" Event Type: %#x", sdei->event_type);
- if (sdei->valid.time_stamp) {
- prfunc(" Time Stamp: ");
- for (i = 0; i < 6; i++)
- prfunc("%d", sdei->time_stamp[i]);
- }
- if ((sdei->valid.data) && (sdei->valid.length)) {
- prfunc(" Data: ");
- for (i = 0; i < sdei->length; i++)
- prfunc(" %02x", sdei->data[i]);
- }
- prfunc("\n");
-}
-
-/*
- * ia64_log_pci_comp_err_info_print
- *
- * Format and log the platform PCI component error record section data.
- *
- * Inputs: pci_comp_err_info * (Ptr to the PCI component error record section
- * returned by SAL)
- * prfunc (fn ptr of print function to be used for output)
- * Outputs: None
- */
-void
-ia64_log_pci_comp_err_info_print(sal_log_pci_comp_err_info_t *pcei,
- prfunc_t prfunc)
-{
- u32 n_mem_regs, n_io_regs;
- u64 i, n_pci_data;
- u64 *p_reg_data;
- u8 *p_oem_data;
-
- prfunc("+ PCI Component Error Detail: ");
-
- if (pcei->valid.err_status)
- prfunc(" Error Status: %#lx\n", pcei->err_status);
- if (pcei->valid.comp_info)
- prfunc(" Component Info: Vendor Id = %#x, Device Id = %#x,"
- " Class Code = %#x, Seg/Bus/Dev/Func = %d/%d/%d/%d\n",
- pcei->comp_info.vendor_id, pcei->comp_info.device_id,
- pcei->comp_info.class_code, pcei->comp_info.seg_num,
- pcei->comp_info.bus_num, pcei->comp_info.dev_num,
- pcei->comp_info.func_num);
-
- n_mem_regs = (pcei->valid.num_mem_regs) ? pcei->num_mem_regs : 0;
- n_io_regs = (pcei->valid.num_io_regs) ? pcei->num_io_regs : 0;
- p_reg_data = &(pcei->reg_data_pairs[0]);
- p_oem_data = (u8 *)p_reg_data +
- (n_mem_regs + n_io_regs) * 2 * sizeof(u64);
- n_pci_data = p_oem_data - (u8 *)pcei;
-
- if (n_pci_data > pcei->header.len) {
- prfunc(" Invalid PCI Component Error Record format: length = %ld, "
- " Size PCI Data = %d, Num Mem-Map/IO-Map Regs = %ld/%ld\n",
- pcei->header.len, n_pci_data, n_mem_regs, n_io_regs);
- return;
- }
-
- if (n_mem_regs) {
- prfunc(" Memory Mapped Registers\n Address \tValue\n");
- for (i = 0; i < pcei->num_mem_regs; i++) {
- prfunc(" %#lx %#lx\n", p_reg_data[0], p_reg_data[1]);
- p_reg_data += 2;
- }
- }
- if (n_io_regs) {
- prfunc(" I/O Mapped Registers\n Address \tValue\n");
- for (i = 0; i < pcei->num_io_regs; i++) {
- prfunc(" %#lx %#lx\n", p_reg_data[0], p_reg_data[1]);
- p_reg_data += 2;
- }
- }
- if (pcei->valid.oem_data) {
- platform_pci_comp_err_print((int)pcei->header.len, n_pci_data,
- p_oem_data, prfunc);
- prfunc("\n");
- }
-}
-
-/*
- * ia64_log_plat_specific_err_info_print
- *
- * Format and log the platform specifie error record section data.
- *
- * Inputs: sel_dev_err_info * (Ptr to the platform specific error record
- * section returned by SAL)
- * prfunc (fn ptr of print function to be used for output)
- * Outputs: None
- */
-void
-ia64_log_plat_specific_err_info_print (sal_log_plat_specific_err_info_t *psei,
- prfunc_t prfunc)
-{
- prfunc("+ Platform Specific Error Detail: ");
-
- if (psei->valid.err_status)
- prfunc(" Error Status: %#lx", psei->err_status);
- if (psei->valid.guid) {
- prfunc(" GUID: ");
- ia64_log_prt_guid(&psei->guid, prfunc);
- }
- if (psei->valid.oem_data) {
- platform_plat_specific_err_print((int) psei->header.len,
- (char *) psei->oem_data - (char *) psei,
- &psei->oem_data[0], prfunc);
- }
- prfunc("\n");
-}
-
-/*
- * ia64_log_host_ctlr_err_info_print
- *
- * Format and log the platform host controller error record section data.
- *
- * Inputs: host_ctlr_err_info * (Ptr to the host controller error record
- * section returned by SAL)
- * prfunc (fn ptr of print function to be used for output)
- * Outputs: None
- */
-void
-ia64_log_host_ctlr_err_info_print (sal_log_host_ctlr_err_info_t *hcei,
- prfunc_t prfunc)
-{
- prfunc("+ Host Controller Error Detail: ");
-
- if (hcei->valid.err_status)
- prfunc(" Error Status: %#lx", hcei->err_status);
- if (hcei->valid.requestor_id)
- prfunc(" Requestor ID: %#lx", hcei->requestor_id);
- if (hcei->valid.responder_id)
- prfunc(" Responder ID: %#lx", hcei->responder_id);
- if (hcei->valid.target_id)
- prfunc(" Target ID: %#lx", hcei->target_id);
- if (hcei->valid.bus_spec_data)
- prfunc(" Bus Specific Data: %#lx", hcei->bus_spec_data);
- if (hcei->valid.oem_data) {
- platform_host_ctlr_err_print((int)hcei->header.len,
- (int)sizeof(sal_log_host_ctlr_err_info_t) - 1,
- &(hcei->oem_data[0]), prfunc);
- }
- prfunc("\n");
-}
-
-/*
- * ia64_log_plat_bus_err_info_print
- *
- * Format and log the platform bus error record section data.
- *
- * Inputs: plat_bus_err_info * (Ptr to the platform bus error record section
- * returned by SAL)
- * prfunc (fn ptr of print function to be used for output)
- * Outputs: None
- */
-void
-ia64_log_plat_bus_err_info_print (sal_log_plat_bus_err_info_t *pbei,
- prfunc_t prfunc)
-{
- prfunc("+ Platform Bus Error Detail: ");
-
- if (pbei->valid.err_status)
- prfunc(" Error Status: %#lx", pbei->err_status);
- if (pbei->valid.requestor_id)
- prfunc(" Requestor ID: %#lx", pbei->requestor_id);
- if (pbei->valid.responder_id)
- prfunc(" Responder ID: %#lx", pbei->responder_id);
- if (pbei->valid.target_id)
- prfunc(" Target ID: %#lx", pbei->target_id);
- if (pbei->valid.bus_spec_data)
- prfunc(" Bus Specific Data: %#lx", pbei->bus_spec_data);
- if (pbei->valid.oem_data) {
- platform_plat_bus_err_print((int)pbei->header.len,
- (int)sizeof(sal_log_plat_bus_err_info_t) - 1,
- &(pbei->oem_data[0]), prfunc);
- }
- prfunc("\n");
-}
-
-/*
- * ia64_log_proc_dev_err_info_print
- *
- * Display the processor device error record.
- *
- * Inputs: sal_log_processor_info_t * (Ptr to processor device error record
- * section body).
- * prfunc (fn ptr of print function to be used
- * for output).
- * Outputs: None
- */
-void
-ia64_log_proc_dev_err_info_print (sal_log_processor_info_t *slpi,
- prfunc_t prfunc)
-{
-#ifdef MCA_PRT_XTRA_DATA
- size_t d_len = slpi->header.len - sizeof(sal_log_section_hdr_t);
-#endif
- sal_processor_static_info_t *spsi;
- int i;
- sal_log_mod_error_info_t *p_data;
-
- prfunc("+Processor Device Error Info Section\n");
-
-#ifdef MCA_PRT_XTRA_DATA // for test only @FVL
- {
- char *p_data = (char *)&slpi->valid;
-
- prfunc("SAL_PROC_DEV_ERR SECTION DATA: Data buffer = %p, "
- "Data size = %ld\n", (void *)p_data, d_len);
- ia64_log_hexdump(p_data, d_len, prfunc);
- prfunc("End of SAL_PROC_DEV_ERR SECTION DATA\n");
- }
-#endif // MCA_PRT_XTRA_DATA for test only @FVL
-
- if (slpi->valid.proc_error_map)
- prfunc(" Processor Error Map: %#lx\n", slpi->proc_error_map);
-
- if (slpi->valid.proc_state_param)
- prfunc(" Processor State Param: %#lx\n", slpi->proc_state_parameter);
-
- if (slpi->valid.proc_cr_lid)
- prfunc(" Processor LID: %#lx\n", slpi->proc_cr_lid);
-
- /*
- * Note: March 2001 SAL spec states that if the number of elements in any
- * of the MOD_ERROR_INFO_STRUCT arrays is zero, the entire array is
- * absent. Also, current implementations only allocate space for number of
- * elements used. So we walk the data pointer from here on.
- */
- p_data = &slpi->info[0];
-
- /* Print the cache check information if any*/
- for (i = 0 ; i < slpi->valid.num_cache_check; i++, p_data++)
- ia64_log_cache_check_info_print(i, p_data, prfunc);
-
- /* Print the tlb check information if any*/
- for (i = 0 ; i < slpi->valid.num_tlb_check; i++, p_data++)
- ia64_log_tlb_check_info_print(i, p_data, prfunc);
-
- /* Print the bus check information if any*/
- for (i = 0 ; i < slpi->valid.num_bus_check; i++, p_data++)
- ia64_log_bus_check_info_print(i, p_data, prfunc);
-
- /* Print the reg file check information if any*/
- for (i = 0 ; i < slpi->valid.num_reg_file_check; i++, p_data++)
- ia64_log_hexdump((u8 *)p_data, sizeof(sal_log_mod_error_info_t),
- prfunc); /* Just hex dump for now */
-
- /* Print the ms check information if any*/
- for (i = 0 ; i < slpi->valid.num_ms_check; i++, p_data++)
- ia64_log_hexdump((u8 *)p_data, sizeof(sal_log_mod_error_info_t),
- prfunc); /* Just hex dump for now */
-
- /* Print CPUID registers if any*/
- if (slpi->valid.cpuid_info) {
- u64 *p = (u64 *)p_data;
-
- prfunc(" CPUID Regs: %#lx %#lx %#lx %#lx\n", p[0], p[1], p[2], p[3]);
- p_data++;
- }
-
- /* Print processor static info if any */
- if (slpi->valid.psi_static_struct) {
- spsi = (sal_processor_static_info_t *)p_data;
-
- /* Print branch register contents if valid */
- if (spsi->valid.br)
- ia64_log_processor_regs_print(spsi->br, 8, "Branch", "br",
- prfunc);
-
- /* Print control register contents if valid */
- if (spsi->valid.cr)
- ia64_log_processor_regs_print(spsi->cr, 128, "Control", "cr",
- prfunc);
-
- /* Print application register contents if valid */
- if (spsi->valid.ar)
- ia64_log_processor_regs_print(spsi->ar, 128, "Application",
- "ar", prfunc);
-
- /* Print region register contents if valid */
- if (spsi->valid.rr)
- ia64_log_processor_regs_print(spsi->rr, 8, "Region", "rr",
- prfunc);
-
- /* Print floating-point register contents if valid */
- if (spsi->valid.fr)
- ia64_log_processor_fp_regs_print(spsi->fr, 128, "Floating-point", "fr",
- prfunc);
- }
-}
-
-/*
- * ia64_log_processor_info_print
- *
- * Display the processor-specific information logged by PAL as a part
- * of MCA or INIT or CMC.
- *
- * Inputs : lh (Pointer of the sal log header which specifies the
- * format of SAL state info as specified by the SAL spec).
- * prfunc (fn ptr of print function to be used for output).
- * Outputs : None
- */
-void
-ia64_log_processor_info_print(sal_log_record_header_t *lh, prfunc_t prfunc)
-{
- sal_log_section_hdr_t *slsh;
- int n_sects;
- u32 ercd_pos;
-
- if (!lh)
- return;
-
-#ifdef MCA_PRT_XTRA_DATA // for test only @FVL
- ia64_log_prt_record_header(lh, prfunc);
-#endif // MCA_PRT_XTRA_DATA for test only @FVL
-
- if ((ercd_pos = sizeof(sal_log_record_header_t)) >= lh->len) {
- IA64_MCA_DEBUG("ia64_mca_log_print: "
- "truncated SAL CMC error record. len = %d\n",
- lh->len);
- return;
- }
-
- /* Print record header info */
- ia64_log_rec_header_print(lh, prfunc);
-
- for (n_sects = 0; (ercd_pos < lh->len); n_sects++, ercd_pos += slsh->len) {
- /* point to next section header */
- slsh = (sal_log_section_hdr_t *)((char *)lh + ercd_pos);
-
-#ifdef MCA_PRT_XTRA_DATA // for test only @FVL
- ia64_log_prt_section_header(slsh, prfunc);
-#endif // MCA_PRT_XTRA_DATA for test only @FVL
-
- if (verify_guid(&slsh->guid, &(SAL_PROC_DEV_ERR_SECT_GUID))) {
- IA64_MCA_DEBUG("ia64_mca_log_print: unsupported record section\n");
- continue;
- }
-
- /*
- * Now process processor device error record section
- */
- ia64_log_proc_dev_err_info_print((sal_log_processor_info_t *)slsh, printk);
- }
-
- IA64_MCA_DEBUG("ia64_mca_log_print: "
- "found %d sections in SAL CMC error record. len = %d\n",
- n_sects, lh->len);
- if (!n_sects) {
- prfunc("No Processor Device Error Info Section found\n");
- return;
- }
-}
-
-/*
- * ia64_log_platform_info_print
- *
- * Format and Log the SAL Platform Error Record.
- *
- * Inputs : lh (Pointer to the sal error record header with format
- * specified by the SAL spec).
- * prfunc (fn ptr of log output function to use)
- * Outputs : platform error status
- */
-int
-ia64_log_platform_info_print (sal_log_record_header_t *lh, prfunc_t prfunc)
-{
- sal_log_section_hdr_t *slsh;
- int n_sects;
- u32 ercd_pos;
- int platform_err = 0;
-
- if (!lh)
- return platform_err;
-
-#ifdef MCA_PRT_XTRA_DATA // for test only @FVL
- ia64_log_prt_record_header(lh, prfunc);
-#endif // MCA_PRT_XTRA_DATA for test only @FVL
-
- if ((ercd_pos = sizeof(sal_log_record_header_t)) >= lh->len) {
- IA64_MCA_DEBUG("ia64_mca_log_print: "
- "truncated SAL error record. len = %d\n",
- lh->len);
- return platform_err;
- }
-
- /* Print record header info */
- ia64_log_rec_header_print(lh, prfunc);
-
- for (n_sects = 0; (ercd_pos < lh->len); n_sects++, ercd_pos += slsh->len) {
- /* point to next section header */
- slsh = (sal_log_section_hdr_t *)((char *)lh + ercd_pos);
-
-#ifdef MCA_PRT_XTRA_DATA // for test only @FVL
- ia64_log_prt_section_header(slsh, prfunc);
-
- if (efi_guidcmp(slsh->guid, SAL_PROC_DEV_ERR_SECT_GUID) != 0) {
- size_t d_len = slsh->len - sizeof(sal_log_section_hdr_t);
- char *p_data = (char *)&((sal_log_mem_dev_err_info_t *)slsh)->valid;
-
- prfunc("Start of Platform Err Data Section: Data buffer = %p, "
- "Data size = %ld\n", (void *)p_data, d_len);
- ia64_log_hexdump(p_data, d_len, prfunc);
- prfunc("End of Platform Err Data Section\n");
- }
-#endif // MCA_PRT_XTRA_DATA for test only @FVL
-
- /*
- * Now process CPE error record section
- */
- if (efi_guidcmp(slsh->guid, SAL_PROC_DEV_ERR_SECT_GUID) = 0) {
- ia64_log_proc_dev_err_info_print((sal_log_processor_info_t *)slsh,
- prfunc);
- } else if (efi_guidcmp(slsh->guid, SAL_PLAT_MEM_DEV_ERR_SECT_GUID) = 0) {
- platform_err = 1;
- prfunc("+Platform Memory Device Error Info Section\n");
- ia64_log_mem_dev_err_info_print((sal_log_mem_dev_err_info_t *)slsh,
- prfunc);
- } else if (efi_guidcmp(slsh->guid, SAL_PLAT_SEL_DEV_ERR_SECT_GUID) = 0) {
- platform_err = 1;
- prfunc("+Platform SEL Device Error Info Section\n");
- ia64_log_sel_dev_err_info_print((sal_log_sel_dev_err_info_t *)slsh,
- prfunc);
- } else if (efi_guidcmp(slsh->guid, SAL_PLAT_PCI_BUS_ERR_SECT_GUID) = 0) {
- platform_err = 1;
- prfunc("+Platform PCI Bus Error Info Section\n");
- ia64_log_pci_bus_err_info_print((sal_log_pci_bus_err_info_t *)slsh,
- prfunc);
- } else if (efi_guidcmp(slsh->guid, SAL_PLAT_SMBIOS_DEV_ERR_SECT_GUID) = 0) {
- platform_err = 1;
- prfunc("+Platform SMBIOS Device Error Info Section\n");
- ia64_log_smbios_dev_err_info_print((sal_log_smbios_dev_err_info_t *)slsh,
- prfunc);
- } else if (efi_guidcmp(slsh->guid, SAL_PLAT_PCI_COMP_ERR_SECT_GUID) = 0) {
- platform_err = 1;
- prfunc("+Platform PCI Component Error Info Section\n");
- ia64_log_pci_comp_err_info_print((sal_log_pci_comp_err_info_t *)slsh,
- prfunc);
- } else if (efi_guidcmp(slsh->guid, SAL_PLAT_SPECIFIC_ERR_SECT_GUID) = 0) {
- platform_err = 1;
- prfunc("+Platform Specific Error Info Section\n");
- ia64_log_plat_specific_err_info_print((sal_log_plat_specific_err_info_t *)
- slsh,
- prfunc);
- } else if (efi_guidcmp(slsh->guid, SAL_PLAT_HOST_CTLR_ERR_SECT_GUID) = 0) {
- platform_err = 1;
- prfunc("+Platform Host Controller Error Info Section\n");
- ia64_log_host_ctlr_err_info_print((sal_log_host_ctlr_err_info_t *)slsh,
- prfunc);
- } else if (efi_guidcmp(slsh->guid, SAL_PLAT_BUS_ERR_SECT_GUID) = 0) {
- platform_err = 1;
- prfunc("+Platform Bus Error Info Section\n");
- ia64_log_plat_bus_err_info_print((sal_log_plat_bus_err_info_t *)slsh,
- prfunc);
- } else {
- IA64_MCA_DEBUG("ia64_mca_log_print: unsupported record section\n");
- continue;
- }
- }
-
- IA64_MCA_DEBUG("ia64_mca_log_print: found %d sections in SAL error record. len = %d\n",
- n_sects, lh->len);
- if (!n_sects) {
- prfunc("No Platform Error Info Sections found\n");
- return platform_err;
- }
- return platform_err;
-}
-
-/*
- * ia64_log_print
- *
- * Displays the contents of the OS error log information
- *
- * Inputs : info_type (SAL_INFO_TYPE_{MCA,INIT,CMC,CPE})
- * prfunc (fn ptr of log output function to use)
- * Outputs : platform error status
- */
-int
-ia64_log_print(int sal_info_type, prfunc_t prfunc)
-{
- int platform_err = 0;
-
- switch(sal_info_type) {
- case SAL_INFO_TYPE_MCA:
- prfunc("+CPU %d: SAL log contains MCA error record\n", smp_processor_id());
- ia64_log_rec_header_print(IA64_LOG_CURR_BUFFER(sal_info_type), prfunc);
- break;
- case SAL_INFO_TYPE_INIT:
- prfunc("+CPU %d: SAL log contains INIT error record\n", smp_processor_id());
- ia64_log_rec_header_print(IA64_LOG_CURR_BUFFER(sal_info_type), prfunc);
- break;
- case SAL_INFO_TYPE_CMC:
- prfunc("+BEGIN HARDWARE ERROR STATE AT CMC\n");
- ia64_log_processor_info_print(IA64_LOG_CURR_BUFFER(sal_info_type), prfunc);
- prfunc("+END HARDWARE ERROR STATE AT CMC\n");
- break;
- case SAL_INFO_TYPE_CPE:
- prfunc("+BEGIN HARDWARE ERROR STATE AT CPE\n");
- ia64_log_platform_info_print(IA64_LOG_CURR_BUFFER(sal_info_type), prfunc);
- prfunc("+END HARDWARE ERROR STATE AT CPE\n");
- break;
- default:
- prfunc("+MCA UNKNOWN ERROR LOG (UNIMPLEMENTED)\n");
- break;
- }
- return platform_err;
-}
-
static int __init
ia64_mca_disable_cpe_polling(char *str)
{
Index: 25-pre7.4/arch/ia64/sn/kernel/mca.c
--- 25-pre7.4/arch/ia64/sn/kernel/mca.c Sun, 06 Jul 2003 14:16:24 +1000 kaos (linux-2.4/b/g/51_mca.c 1.2.1.1 644)
+++ 25-pre7.5/arch/ia64/sn/kernel/mca.c Mon, 02 Feb 2004 16:52:37 +1100 kaos (linux-2.4/b/g/51_mca.c 1.2.1.2 644)
@@ -91,20 +91,6 @@ print_hook(const char *fmt, ...)
}
-
-/*
- * ia64_sn2_platform_plat_specific_err_print
- *
- * Called by the MCA handler to log platform-specific errors.
- */
-void
-ia64_sn2_platform_plat_specific_err_print(int header_len, int sect_len, u8 *p_data, prfunc_t prfunc)
-{
- ia64_sn_plat_specific_err_print(print_hook, p_data - sect_len);
-}
-
-
-
static void
sn_cpei_handler(int irq, void *devid, struct pt_regs *regs)
{
reply other threads:[~2004-02-02 7:03 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6751.1075705439@kao2.melbourne.sgi.com \
--to=kaos@sgi.com \
--cc=linux-ia64@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox