]> git.hungrycats.org Git - linux/commitdiff
[PATCH] ia64: MCA min_state area must be uncacheable
authorTony Luck <tony.luck@intel.com>
Thu, 16 Oct 2003 08:11:43 +0000 (01:11 -0700)
committerDavid Mosberger <davidm@tiger.hpl.hp.com>
Thu, 16 Oct 2003 08:11:43 +0000 (01:11 -0700)
Software Developer's Manual page 2:270, section 11.3.2.3
says that the processor min-state save area must be in an
uncacheable region ... but current MCA recovery code
allocates the min-state area "ia64_mca_min_state_save_info"
in regular kernel data/bss.

This patch re-uses the same min-state area that the PAL/SAL
used to report the error to Linux ... which mostly requires
deleting code and declarations (some of which were wrong,
MIN_STATE_AREA_SIZE ought to have been 58).  The real "work"
is copying the pointer to the min-state area from the
sal_to_os handoff structure into the os_to_sal structure.

arch/ia64/kernel/mca.c
arch/ia64/kernel/mca_asm.S
include/asm-ia64/mca.h

index a879faedcfdc780d68ab3240cde0391cd5454921..820691dc437f852b05a3c49d852a35b492ec422c 100644 (file)
@@ -81,8 +81,6 @@ u64                           ia64_init_stack[KERNEL_STACK_SIZE/8] __attribute__((aligned(16)));
 u64                            ia64_mca_sal_data_area[1356];
 u64                            ia64_tlb_functional;
 u64                            ia64_os_mca_recovery_successful;
-/* TODO: need to assign min-state structure to UC memory */
-u64                            ia64_mca_min_state_save_info[MIN_STATE_AREA_SIZE] __attribute__((aligned(512)));
 static void                    ia64_mca_wakeup_ipi_wait(void);
 static void                    ia64_mca_wakeup(int cpu);
 static void                    ia64_mca_wakeup_all(void);
@@ -465,26 +463,6 @@ ia64_mca_register_cpev (int cpev)
 
 #endif /* PLATFORM_MCA_HANDLERS */
 
-/*
- * routine to process and prepare to dump min_state_save
- * information for debugging purposes.
- */
-void
-ia64_process_min_state_save (pal_min_state_area_t *pmss)
-{
-       int i, max = MIN_STATE_AREA_SIZE;
-       u64 *tpmss_ptr = (u64 *)pmss;
-       u64 *return_min_state_ptr = ia64_mca_min_state_save_info;
-
-       for (i=0;i<max;i++) {
-
-               /* copy min-state register info for eventual return to PAL */
-               *return_min_state_ptr++ = *tpmss_ptr;
-
-               tpmss_ptr++;  /* skip to next entry */
-       }
-}
-
 /*
  * ia64_mca_cmc_vector_setup
  *
@@ -961,9 +939,8 @@ ia64_return_to_sal_check(void)
        /* Default = tell SAL to return to same context */
        ia64_os_to_sal_handoff_state.imots_context = IA64_MCA_SAME_CONTEXT;
 
-       /* Register pointer to new min state values */
        ia64_os_to_sal_handoff_state.imots_new_min_state =
-               ia64_mca_min_state_save_info;
+               (u64 *)ia64_sal_to_os_handoff_state.pal_min_state;
 }
 
 /*
@@ -2154,9 +2131,6 @@ ia64_log_proc_dev_err_info_print (sal_log_processor_info_t  *slpi,
        if (slpi->valid.psi_static_struct) {
                spsi = (sal_processor_static_info_t *)p_data;
 
-               /* copy interrupted context PAL min-state info */
-               ia64_process_min_state_save(&spsi->min_state_area);
-
                /* Print branch register contents if valid */
                if (spsi->valid.br)
                        ia64_log_processor_regs_print(spsi->br, 8, "Branch", "br",
index bbb0ff2dbced08c61eb6733b2afecceacbb28e5c..de46bda5d6db4f312590b139d615ca7ee9e4f5d4 100644 (file)
 (p6)   movl    r10=IA64_MCA_SAME_CONTEXT;              \
 (p6)   add     _tmp=0x18,_tmp;;                        \
 (p6)   ld8     r9=[_tmp],0x10;                         \
-(p6)   movl    r22=ia64_mca_min_state_save_info;;      \
+(p6)   mov     r22=r0;;                                \
 (p7)   ld8     r8=[_tmp],0x08;;                        \
 (p7)   ld8     r9=[_tmp],0x08;;                        \
 (p7)   ld8     r10=[_tmp],0x08;;                       \
-(p7)   ld8     r22=[_tmp],0x08;;                       \
-       DATA_VA_TO_PA(r22)
+(p7)   ld8     r22=[_tmp],0x08;;
        // now _tmp is pointing to SAL rtn save location
 
 
@@ -97,7 +96,6 @@
        .global ia64_init_stack
        .global ia64_mca_sal_data_area
        .global ia64_tlb_functional
-       .global ia64_mca_min_state_save_info
 
        .text
        .align 16
index da678bd6358f3d08902b121d09bfc85819d830fe..6791e7358a0367dfef2bf95331a2969f5c6fbb36 100644 (file)
@@ -108,8 +108,6 @@ enum {
        IA64_MCA_NEW_CONTEXT    =       -1      /* SAL to return to new context */
 };
 
-#define MIN_STATE_AREA_SIZE     57
-
 typedef struct ia64_mca_os_to_sal_state_s {
        u64             imots_os_status;        /*   OS status to SAL as to what happened
                                                 *   with the MCA handling.