|
@@ -84,23 +84,23 @@ mca_page_isolate(unsigned long paddr)
|
|
struct page *p;
|
|
struct page *p;
|
|
|
|
|
|
/* whether physical address is valid or not */
|
|
/* whether physical address is valid or not */
|
|
- if ( !ia64_phys_addr_valid(paddr) )
|
|
|
|
|
|
+ if (!ia64_phys_addr_valid(paddr))
|
|
return ISOLATE_NG;
|
|
return ISOLATE_NG;
|
|
|
|
|
|
/* convert physical address to physical page number */
|
|
/* convert physical address to physical page number */
|
|
p = pfn_to_page(paddr>>PAGE_SHIFT);
|
|
p = pfn_to_page(paddr>>PAGE_SHIFT);
|
|
|
|
|
|
/* check whether a page number have been already registered or not */
|
|
/* check whether a page number have been already registered or not */
|
|
- for( i = 0; i < num_page_isolate; i++ )
|
|
|
|
- if( page_isolate[i] == p )
|
|
|
|
|
|
+ for (i = 0; i < num_page_isolate; i++)
|
|
|
|
+ if (page_isolate[i] == p)
|
|
return ISOLATE_OK; /* already listed */
|
|
return ISOLATE_OK; /* already listed */
|
|
|
|
|
|
/* limitation check */
|
|
/* limitation check */
|
|
- if( num_page_isolate == MAX_PAGE_ISOLATE )
|
|
|
|
|
|
+ if (num_page_isolate == MAX_PAGE_ISOLATE)
|
|
return ISOLATE_NG;
|
|
return ISOLATE_NG;
|
|
|
|
|
|
/* kick pages having attribute 'SLAB' or 'Reserved' */
|
|
/* kick pages having attribute 'SLAB' or 'Reserved' */
|
|
- if( PageSlab(p) || PageReserved(p) )
|
|
|
|
|
|
+ if (PageSlab(p) || PageReserved(p))
|
|
return ISOLATE_NG;
|
|
return ISOLATE_NG;
|
|
|
|
|
|
/* add attribute 'Reserved' and register the page */
|
|
/* add attribute 'Reserved' and register the page */
|
|
@@ -139,10 +139,10 @@ mca_handler_bh(unsigned long paddr)
|
|
* @peidx: pointer to index of processor error section
|
|
* @peidx: pointer to index of processor error section
|
|
*/
|
|
*/
|
|
|
|
|
|
-static void
|
|
|
|
|
|
+static void
|
|
mca_make_peidx(sal_log_processor_info_t *slpi, peidx_table_t *peidx)
|
|
mca_make_peidx(sal_log_processor_info_t *slpi, peidx_table_t *peidx)
|
|
{
|
|
{
|
|
- /*
|
|
|
|
|
|
+ /*
|
|
* calculate the start address of
|
|
* calculate the start address of
|
|
* "struct cpuid_info" and "sal_processor_static_info_t".
|
|
* "struct cpuid_info" and "sal_processor_static_info_t".
|
|
*/
|
|
*/
|
|
@@ -164,7 +164,7 @@ mca_make_peidx(sal_log_processor_info_t *slpi, peidx_table_t *peidx)
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * mca_make_slidx - Make index of SAL error record
|
|
|
|
|
|
+ * mca_make_slidx - Make index of SAL error record
|
|
* @buffer: pointer to SAL error record
|
|
* @buffer: pointer to SAL error record
|
|
* @slidx: pointer to index of SAL error record
|
|
* @slidx: pointer to index of SAL error record
|
|
*
|
|
*
|
|
@@ -172,12 +172,12 @@ mca_make_peidx(sal_log_processor_info_t *slpi, peidx_table_t *peidx)
|
|
* 1 if record has platform error / 0 if not
|
|
* 1 if record has platform error / 0 if not
|
|
*/
|
|
*/
|
|
#define LOG_INDEX_ADD_SECT_PTR(sect, ptr) \
|
|
#define LOG_INDEX_ADD_SECT_PTR(sect, ptr) \
|
|
- { slidx_list_t *hl = &slidx_pool.buffer[slidx_pool.cur_idx]; \
|
|
|
|
- hl->hdr = ptr; \
|
|
|
|
- list_add(&hl->list, &(sect)); \
|
|
|
|
- slidx_pool.cur_idx = (slidx_pool.cur_idx + 1)%slidx_pool.max_idx; }
|
|
|
|
|
|
+ {slidx_list_t *hl = &slidx_pool.buffer[slidx_pool.cur_idx]; \
|
|
|
|
+ hl->hdr = ptr; \
|
|
|
|
+ list_add(&hl->list, &(sect)); \
|
|
|
|
+ slidx_pool.cur_idx = (slidx_pool.cur_idx + 1)%slidx_pool.max_idx; }
|
|
|
|
|
|
-static int
|
|
|
|
|
|
+static int
|
|
mca_make_slidx(void *buffer, slidx_table_t *slidx)
|
|
mca_make_slidx(void *buffer, slidx_table_t *slidx)
|
|
{
|
|
{
|
|
int platform_err = 0;
|
|
int platform_err = 0;
|
|
@@ -214,28 +214,36 @@ mca_make_slidx(void *buffer, slidx_table_t *slidx)
|
|
sp = (sal_log_section_hdr_t *)((char*)buffer + ercd_pos);
|
|
sp = (sal_log_section_hdr_t *)((char*)buffer + ercd_pos);
|
|
if (!efi_guidcmp(sp->guid, SAL_PROC_DEV_ERR_SECT_GUID)) {
|
|
if (!efi_guidcmp(sp->guid, SAL_PROC_DEV_ERR_SECT_GUID)) {
|
|
LOG_INDEX_ADD_SECT_PTR(slidx->proc_err, sp);
|
|
LOG_INDEX_ADD_SECT_PTR(slidx->proc_err, sp);
|
|
- } else if (!efi_guidcmp(sp->guid, SAL_PLAT_MEM_DEV_ERR_SECT_GUID)) {
|
|
|
|
|
|
+ } else if (!efi_guidcmp(sp->guid,
|
|
|
|
+ SAL_PLAT_MEM_DEV_ERR_SECT_GUID)) {
|
|
platform_err = 1;
|
|
platform_err = 1;
|
|
LOG_INDEX_ADD_SECT_PTR(slidx->mem_dev_err, sp);
|
|
LOG_INDEX_ADD_SECT_PTR(slidx->mem_dev_err, sp);
|
|
- } else if (!efi_guidcmp(sp->guid, SAL_PLAT_SEL_DEV_ERR_SECT_GUID)) {
|
|
|
|
|
|
+ } else if (!efi_guidcmp(sp->guid,
|
|
|
|
+ SAL_PLAT_SEL_DEV_ERR_SECT_GUID)) {
|
|
platform_err = 1;
|
|
platform_err = 1;
|
|
LOG_INDEX_ADD_SECT_PTR(slidx->sel_dev_err, sp);
|
|
LOG_INDEX_ADD_SECT_PTR(slidx->sel_dev_err, sp);
|
|
- } else if (!efi_guidcmp(sp->guid, SAL_PLAT_PCI_BUS_ERR_SECT_GUID)) {
|
|
|
|
|
|
+ } else if (!efi_guidcmp(sp->guid,
|
|
|
|
+ SAL_PLAT_PCI_BUS_ERR_SECT_GUID)) {
|
|
platform_err = 1;
|
|
platform_err = 1;
|
|
LOG_INDEX_ADD_SECT_PTR(slidx->pci_bus_err, sp);
|
|
LOG_INDEX_ADD_SECT_PTR(slidx->pci_bus_err, sp);
|
|
- } else if (!efi_guidcmp(sp->guid, SAL_PLAT_SMBIOS_DEV_ERR_SECT_GUID)) {
|
|
|
|
|
|
+ } else if (!efi_guidcmp(sp->guid,
|
|
|
|
+ SAL_PLAT_SMBIOS_DEV_ERR_SECT_GUID)) {
|
|
platform_err = 1;
|
|
platform_err = 1;
|
|
LOG_INDEX_ADD_SECT_PTR(slidx->smbios_dev_err, sp);
|
|
LOG_INDEX_ADD_SECT_PTR(slidx->smbios_dev_err, sp);
|
|
- } else if (!efi_guidcmp(sp->guid, SAL_PLAT_PCI_COMP_ERR_SECT_GUID)) {
|
|
|
|
|
|
+ } else if (!efi_guidcmp(sp->guid,
|
|
|
|
+ SAL_PLAT_PCI_COMP_ERR_SECT_GUID)) {
|
|
platform_err = 1;
|
|
platform_err = 1;
|
|
LOG_INDEX_ADD_SECT_PTR(slidx->pci_comp_err, sp);
|
|
LOG_INDEX_ADD_SECT_PTR(slidx->pci_comp_err, sp);
|
|
- } else if (!efi_guidcmp(sp->guid, SAL_PLAT_SPECIFIC_ERR_SECT_GUID)) {
|
|
|
|
|
|
+ } else if (!efi_guidcmp(sp->guid,
|
|
|
|
+ SAL_PLAT_SPECIFIC_ERR_SECT_GUID)) {
|
|
platform_err = 1;
|
|
platform_err = 1;
|
|
LOG_INDEX_ADD_SECT_PTR(slidx->plat_specific_err, sp);
|
|
LOG_INDEX_ADD_SECT_PTR(slidx->plat_specific_err, sp);
|
|
- } else if (!efi_guidcmp(sp->guid, SAL_PLAT_HOST_CTLR_ERR_SECT_GUID)) {
|
|
|
|
|
|
+ } else if (!efi_guidcmp(sp->guid,
|
|
|
|
+ SAL_PLAT_HOST_CTLR_ERR_SECT_GUID)) {
|
|
platform_err = 1;
|
|
platform_err = 1;
|
|
LOG_INDEX_ADD_SECT_PTR(slidx->host_ctlr_err, sp);
|
|
LOG_INDEX_ADD_SECT_PTR(slidx->host_ctlr_err, sp);
|
|
- } else if (!efi_guidcmp(sp->guid, SAL_PLAT_BUS_ERR_SECT_GUID)) {
|
|
|
|
|
|
+ } else if (!efi_guidcmp(sp->guid,
|
|
|
|
+ SAL_PLAT_BUS_ERR_SECT_GUID)) {
|
|
platform_err = 1;
|
|
platform_err = 1;
|
|
LOG_INDEX_ADD_SECT_PTR(slidx->plat_bus_err, sp);
|
|
LOG_INDEX_ADD_SECT_PTR(slidx->plat_bus_err, sp);
|
|
} else {
|
|
} else {
|
|
@@ -253,15 +261,16 @@ mca_make_slidx(void *buffer, slidx_table_t *slidx)
|
|
* Return value:
|
|
* Return value:
|
|
* 0 on Success / -ENOMEM on Failure
|
|
* 0 on Success / -ENOMEM on Failure
|
|
*/
|
|
*/
|
|
-static int
|
|
|
|
|
|
+static int
|
|
init_record_index_pools(void)
|
|
init_record_index_pools(void)
|
|
{
|
|
{
|
|
int i;
|
|
int i;
|
|
int rec_max_size; /* Maximum size of SAL error records */
|
|
int rec_max_size; /* Maximum size of SAL error records */
|
|
int sect_min_size; /* Minimum size of SAL error sections */
|
|
int sect_min_size; /* Minimum size of SAL error sections */
|
|
/* minimum size table of each section */
|
|
/* minimum size table of each section */
|
|
- static int sal_log_sect_min_sizes[] = {
|
|
|
|
- sizeof(sal_log_processor_info_t) + sizeof(sal_processor_static_info_t),
|
|
|
|
|
|
+ static int sal_log_sect_min_sizes[] = {
|
|
|
|
+ sizeof(sal_log_processor_info_t)
|
|
|
|
+ + sizeof(sal_processor_static_info_t),
|
|
sizeof(sal_log_mem_dev_err_info_t),
|
|
sizeof(sal_log_mem_dev_err_info_t),
|
|
sizeof(sal_log_sel_dev_err_info_t),
|
|
sizeof(sal_log_sel_dev_err_info_t),
|
|
sizeof(sal_log_pci_bus_err_info_t),
|
|
sizeof(sal_log_pci_bus_err_info_t),
|
|
@@ -294,7 +303,8 @@ init_record_index_pools(void)
|
|
|
|
|
|
/* - 3 - */
|
|
/* - 3 - */
|
|
slidx_pool.max_idx = (rec_max_size/sect_min_size) * 2 + 1;
|
|
slidx_pool.max_idx = (rec_max_size/sect_min_size) * 2 + 1;
|
|
- slidx_pool.buffer = (slidx_list_t *) kmalloc(slidx_pool.max_idx * sizeof(slidx_list_t), GFP_KERNEL);
|
|
|
|
|
|
+ slidx_pool.buffer = (slidx_list_t *)
|
|
|
|
+ kmalloc(slidx_pool.max_idx * sizeof(slidx_list_t), GFP_KERNEL);
|
|
|
|
|
|
return slidx_pool.buffer ? 0 : -ENOMEM;
|
|
return slidx_pool.buffer ? 0 : -ENOMEM;
|
|
}
|
|
}
|
|
@@ -308,6 +318,7 @@ init_record_index_pools(void)
|
|
* is_mca_global - Check whether this MCA is global or not
|
|
* is_mca_global - Check whether this MCA is global or not
|
|
* @peidx: pointer of index of processor error section
|
|
* @peidx: pointer of index of processor error section
|
|
* @pbci: pointer to pal_bus_check_info_t
|
|
* @pbci: pointer to pal_bus_check_info_t
|
|
|
|
+ * @sos: pointer to hand off struct between SAL and OS
|
|
*
|
|
*
|
|
* Return value:
|
|
* Return value:
|
|
* MCA_IS_LOCAL / MCA_IS_GLOBAL
|
|
* MCA_IS_LOCAL / MCA_IS_GLOBAL
|
|
@@ -317,11 +328,12 @@ static mca_type_t
|
|
is_mca_global(peidx_table_t *peidx, pal_bus_check_info_t *pbci,
|
|
is_mca_global(peidx_table_t *peidx, pal_bus_check_info_t *pbci,
|
|
struct ia64_sal_os_state *sos)
|
|
struct ia64_sal_os_state *sos)
|
|
{
|
|
{
|
|
- pal_processor_state_info_t *psp = (pal_processor_state_info_t*)peidx_psp(peidx);
|
|
|
|
|
|
+ pal_processor_state_info_t *psp =
|
|
|
|
+ (pal_processor_state_info_t*)peidx_psp(peidx);
|
|
|
|
|
|
- /*
|
|
|
|
|
|
+ /*
|
|
* PAL can request a rendezvous, if the MCA has a global scope.
|
|
* PAL can request a rendezvous, if the MCA has a global scope.
|
|
- * If "rz_always" flag is set, SAL requests MCA rendezvous
|
|
|
|
|
|
+ * If "rz_always" flag is set, SAL requests MCA rendezvous
|
|
* in spite of global MCA.
|
|
* in spite of global MCA.
|
|
* Therefore it is local MCA when rendezvous has not been requested.
|
|
* Therefore it is local MCA when rendezvous has not been requested.
|
|
* Failed to rendezvous, the system must be down.
|
|
* Failed to rendezvous, the system must be down.
|
|
@@ -381,13 +393,15 @@ is_mca_global(peidx_table_t *peidx, pal_bus_check_info_t *pbci,
|
|
* @slidx: pointer of index of SAL error record
|
|
* @slidx: pointer of index of SAL error record
|
|
* @peidx: pointer of index of processor error section
|
|
* @peidx: pointer of index of processor error section
|
|
* @pbci: pointer of pal_bus_check_info
|
|
* @pbci: pointer of pal_bus_check_info
|
|
|
|
+ * @sos: pointer to hand off struct between SAL and OS
|
|
*
|
|
*
|
|
* Return value:
|
|
* Return value:
|
|
* 1 on Success / 0 on Failure
|
|
* 1 on Success / 0 on Failure
|
|
*/
|
|
*/
|
|
|
|
|
|
static int
|
|
static int
|
|
-recover_from_read_error(slidx_table_t *slidx, peidx_table_t *peidx, pal_bus_check_info_t *pbci,
|
|
|
|
|
|
+recover_from_read_error(slidx_table_t *slidx,
|
|
|
|
+ peidx_table_t *peidx, pal_bus_check_info_t *pbci,
|
|
struct ia64_sal_os_state *sos)
|
|
struct ia64_sal_os_state *sos)
|
|
{
|
|
{
|
|
sal_log_mod_error_info_t *smei;
|
|
sal_log_mod_error_info_t *smei;
|
|
@@ -453,24 +467,28 @@ recover_from_read_error(slidx_table_t *slidx, peidx_table_t *peidx, pal_bus_chec
|
|
* @slidx: pointer of index of SAL error record
|
|
* @slidx: pointer of index of SAL error record
|
|
* @peidx: pointer of index of processor error section
|
|
* @peidx: pointer of index of processor error section
|
|
* @pbci: pointer of pal_bus_check_info
|
|
* @pbci: pointer of pal_bus_check_info
|
|
|
|
+ * @sos: pointer to hand off struct between SAL and OS
|
|
*
|
|
*
|
|
* Return value:
|
|
* Return value:
|
|
* 1 on Success / 0 on Failure
|
|
* 1 on Success / 0 on Failure
|
|
*/
|
|
*/
|
|
|
|
|
|
static int
|
|
static int
|
|
-recover_from_platform_error(slidx_table_t *slidx, peidx_table_t *peidx, pal_bus_check_info_t *pbci,
|
|
|
|
|
|
+recover_from_platform_error(slidx_table_t *slidx, peidx_table_t *peidx,
|
|
|
|
+ pal_bus_check_info_t *pbci,
|
|
struct ia64_sal_os_state *sos)
|
|
struct ia64_sal_os_state *sos)
|
|
{
|
|
{
|
|
int status = 0;
|
|
int status = 0;
|
|
- pal_processor_state_info_t *psp = (pal_processor_state_info_t*)peidx_psp(peidx);
|
|
|
|
|
|
+ pal_processor_state_info_t *psp =
|
|
|
|
+ (pal_processor_state_info_t*)peidx_psp(peidx);
|
|
|
|
|
|
if (psp->bc && pbci->eb && pbci->bsi == 0) {
|
|
if (psp->bc && pbci->eb && pbci->bsi == 0) {
|
|
switch(pbci->type) {
|
|
switch(pbci->type) {
|
|
case 1: /* partial read */
|
|
case 1: /* partial read */
|
|
case 3: /* full line(cpu) read */
|
|
case 3: /* full line(cpu) read */
|
|
case 9: /* I/O space read */
|
|
case 9: /* I/O space read */
|
|
- status = recover_from_read_error(slidx, peidx, pbci, sos);
|
|
|
|
|
|
+ status = recover_from_read_error(slidx, peidx, pbci,
|
|
|
|
+ sos);
|
|
break;
|
|
break;
|
|
case 0: /* unknown */
|
|
case 0: /* unknown */
|
|
case 2: /* partial write */
|
|
case 2: /* partial write */
|
|
@@ -481,7 +499,8 @@ recover_from_platform_error(slidx_table_t *slidx, peidx_table_t *peidx, pal_bus_
|
|
case 8: /* write coalescing transactions */
|
|
case 8: /* write coalescing transactions */
|
|
case 10: /* I/O space write */
|
|
case 10: /* I/O space write */
|
|
case 11: /* inter-processor interrupt message(IPI) */
|
|
case 11: /* inter-processor interrupt message(IPI) */
|
|
- case 12: /* interrupt acknowledge or external task priority cycle */
|
|
|
|
|
|
+ case 12: /* interrupt acknowledge or
|
|
|
|
+ external task priority cycle */
|
|
default:
|
|
default:
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -496,6 +515,7 @@ recover_from_platform_error(slidx_table_t *slidx, peidx_table_t *peidx, pal_bus_
|
|
* @slidx: pointer of index of SAL error record
|
|
* @slidx: pointer of index of SAL error record
|
|
* @peidx: pointer of index of processor error section
|
|
* @peidx: pointer of index of processor error section
|
|
* @pbci: pointer of pal_bus_check_info
|
|
* @pbci: pointer of pal_bus_check_info
|
|
|
|
+ * @sos: pointer to hand off struct between SAL and OS
|
|
*
|
|
*
|
|
* Return value:
|
|
* Return value:
|
|
* 1 on Success / 0 on Failure
|
|
* 1 on Success / 0 on Failure
|
|
@@ -509,15 +529,17 @@ recover_from_platform_error(slidx_table_t *slidx, peidx_table_t *peidx, pal_bus_
|
|
*/
|
|
*/
|
|
|
|
|
|
static int
|
|
static int
|
|
-recover_from_processor_error(int platform, slidx_table_t *slidx, peidx_table_t *peidx, pal_bus_check_info_t *pbci,
|
|
|
|
|
|
+recover_from_processor_error(int platform, slidx_table_t *slidx,
|
|
|
|
+ peidx_table_t *peidx, pal_bus_check_info_t *pbci,
|
|
struct ia64_sal_os_state *sos)
|
|
struct ia64_sal_os_state *sos)
|
|
{
|
|
{
|
|
- pal_processor_state_info_t *psp = (pal_processor_state_info_t*)peidx_psp(peidx);
|
|
|
|
|
|
+ pal_processor_state_info_t *psp =
|
|
|
|
+ (pal_processor_state_info_t*)peidx_psp(peidx);
|
|
|
|
|
|
- /*
|
|
|
|
|
|
+ /*
|
|
* We cannot recover errors with other than bus_check.
|
|
* We cannot recover errors with other than bus_check.
|
|
*/
|
|
*/
|
|
- if (psp->cc || psp->rc || psp->uc)
|
|
|
|
|
|
+ if (psp->cc || psp->rc || psp->uc)
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -546,10 +568,10 @@ recover_from_processor_error(int platform, slidx_table_t *slidx, peidx_table_t *
|
|
* (e.g. a load from poisoned memory)
|
|
* (e.g. a load from poisoned memory)
|
|
* This means "there are some platform errors".
|
|
* This means "there are some platform errors".
|
|
*/
|
|
*/
|
|
- if (platform)
|
|
|
|
|
|
+ if (platform)
|
|
return recover_from_platform_error(slidx, peidx, pbci, sos);
|
|
return recover_from_platform_error(slidx, peidx, pbci, sos);
|
|
- /*
|
|
|
|
- * On account of strange SAL error record, we cannot recover.
|
|
|
|
|
|
+ /*
|
|
|
|
+ * On account of strange SAL error record, we cannot recover.
|
|
*/
|
|
*/
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
@@ -557,14 +579,14 @@ recover_from_processor_error(int platform, slidx_table_t *slidx, peidx_table_t *
|
|
/**
|
|
/**
|
|
* mca_try_to_recover - Try to recover from MCA
|
|
* mca_try_to_recover - Try to recover from MCA
|
|
* @rec: pointer to a SAL error record
|
|
* @rec: pointer to a SAL error record
|
|
|
|
+ * @sos: pointer to hand off struct between SAL and OS
|
|
*
|
|
*
|
|
* Return value:
|
|
* Return value:
|
|
* 1 on Success / 0 on Failure
|
|
* 1 on Success / 0 on Failure
|
|
*/
|
|
*/
|
|
|
|
|
|
static int
|
|
static int
|
|
-mca_try_to_recover(void *rec,
|
|
|
|
- struct ia64_sal_os_state *sos)
|
|
|
|
|
|
+mca_try_to_recover(void *rec, struct ia64_sal_os_state *sos)
|
|
{
|
|
{
|
|
int platform_err;
|
|
int platform_err;
|
|
int n_proc_err;
|
|
int n_proc_err;
|
|
@@ -588,7 +610,8 @@ mca_try_to_recover(void *rec,
|
|
}
|
|
}
|
|
|
|
|
|
/* Make index of processor error section */
|
|
/* Make index of processor error section */
|
|
- mca_make_peidx((sal_log_processor_info_t*)slidx_first_entry(&slidx.proc_err)->hdr, &peidx);
|
|
|
|
|
|
+ mca_make_peidx((sal_log_processor_info_t*)
|
|
|
|
+ slidx_first_entry(&slidx.proc_err)->hdr, &peidx);
|
|
|
|
|
|
/* Extract Processor BUS_CHECK[0] */
|
|
/* Extract Processor BUS_CHECK[0] */
|
|
*((u64*)&pbci) = peidx_check_info(&peidx, bus_check, 0);
|
|
*((u64*)&pbci) = peidx_check_info(&peidx, bus_check, 0);
|
|
@@ -598,7 +621,8 @@ mca_try_to_recover(void *rec,
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
/* Try to recover a processor error */
|
|
/* Try to recover a processor error */
|
|
- return recover_from_processor_error(platform_err, &slidx, &peidx, &pbci, sos);
|
|
|
|
|
|
+ return recover_from_processor_error(platform_err, &slidx, &peidx,
|
|
|
|
+ &pbci, sos);
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -611,7 +635,7 @@ int __init mca_external_handler_init(void)
|
|
return -ENOMEM;
|
|
return -ENOMEM;
|
|
|
|
|
|
/* register external mca handlers */
|
|
/* register external mca handlers */
|
|
- if (ia64_reg_MCA_extension(mca_try_to_recover)){
|
|
|
|
|
|
+ if (ia64_reg_MCA_extension(mca_try_to_recover)) {
|
|
printk(KERN_ERR "ia64_reg_MCA_extension failed.\n");
|
|
printk(KERN_ERR "ia64_reg_MCA_extension failed.\n");
|
|
kfree(slidx_pool.buffer);
|
|
kfree(slidx_pool.buffer);
|
|
return -EFAULT;
|
|
return -EFAULT;
|