diff options
author | Keith Owens <kaos@ocs.com.au> | 2006-04-07 04:08:11 -0400 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2006-06-21 17:44:26 -0400 |
commit | d270acbc24f0ce451c773c214ac0e92e95396b2f (patch) | |
tree | 46fb1417fd85a4fe477afe391975bc3bc3dec1ab /arch/ia64/kernel/mca_asm.S | |
parent | b7bb575c3fa3694811a072109f4e9c2f4705d8f5 (diff) |
[IA64] Sanitize assembler code for ia64_sal_os_state
struct ia64_sal_os_state has three semi-independent sections. The code
in mca_asm.S assumes that these three sections are contiguous, which
makes it very awkward to add new data to this structure. Remove the
assumption that the sections are contiguous. Define a macro to shorten
references to offsets in ia64_sal_os_state.
This patch does not change the way that the code behaves. It just
makes it easier to update the code in future and to add fields to
ia64_sal_os_state when debugging the MCA/INIT handlers.
Signed-off-by: Keith Owens <kaos@sgi.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'arch/ia64/kernel/mca_asm.S')
-rw-r--r-- | arch/ia64/kernel/mca_asm.S | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/arch/ia64/kernel/mca_asm.S b/arch/ia64/kernel/mca_asm.S index 6dff024cd62b..c1bd1feffab0 100644 --- a/arch/ia64/kernel/mca_asm.S +++ b/arch/ia64/kernel/mca_asm.S | |||
@@ -159,7 +159,7 @@ ia64_os_mca_spin: | |||
159 | GET_IA64_MCA_DATA(r2) | 159 | GET_IA64_MCA_DATA(r2) |
160 | // Using MCA stack, struct ia64_sal_os_state, variable proc_state_param | 160 | // Using MCA stack, struct ia64_sal_os_state, variable proc_state_param |
161 | ;; | 161 | ;; |
162 | add r3=IA64_MCA_CPU_MCA_STACK_OFFSET+MCA_SOS_OFFSET+IA64_SAL_OS_STATE_PROC_STATE_PARAM_OFFSET, r2 | 162 | add r3=IA64_MCA_CPU_MCA_STACK_OFFSET+MCA_SOS_OFFSET+SOS(PROC_STATE_PARAM), r2 |
163 | ;; | 163 | ;; |
164 | ld8 r18=[r3] // Get processor state parameter on existing PALE_CHECK. | 164 | ld8 r18=[r3] // Get processor state parameter on existing PALE_CHECK. |
165 | ;; | 165 | ;; |
@@ -479,9 +479,11 @@ ia64_state_save: | |||
479 | st8 [temp2]=r11,16 // rv_rc | 479 | st8 [temp2]=r11,16 // rv_rc |
480 | mov r11=cr.iipa | 480 | mov r11=cr.iipa |
481 | ;; | 481 | ;; |
482 | st8 [temp1]=r18,16 // proc_state_param | 482 | st8 [temp1]=r18 // proc_state_param |
483 | st8 [temp2]=r19,16 // monarch | 483 | st8 [temp2]=r19 // monarch |
484 | mov r6=IA64_KR(CURRENT) | 484 | mov r6=IA64_KR(CURRENT) |
485 | add temp1=SOS(SAL_RA), regs | ||
486 | add temp2=SOS(SAL_GP), regs | ||
485 | ;; | 487 | ;; |
486 | st8 [temp1]=r12,16 // sal_ra | 488 | st8 [temp1]=r12,16 // sal_ra |
487 | st8 [temp2]=r10,16 // sal_gp | 489 | st8 [temp2]=r10,16 // sal_gp |
@@ -503,12 +505,14 @@ ia64_state_save: | |||
503 | st8 [temp2]=r11,16 // cr.iipa | 505 | st8 [temp2]=r11,16 // cr.iipa |
504 | mov r12=cr.iim | 506 | mov r12=cr.iim |
505 | ;; | 507 | ;; |
506 | st8 [temp1]=r12,16 // cr.iim | 508 | st8 [temp1]=r12 // cr.iim |
507 | (p1) mov r12=IA64_MCA_COLD_BOOT | 509 | (p1) mov r12=IA64_MCA_COLD_BOOT |
508 | (p2) mov r12=IA64_INIT_WARM_BOOT | 510 | (p2) mov r12=IA64_INIT_WARM_BOOT |
509 | mov r6=cr.iha | 511 | mov r6=cr.iha |
512 | add temp1=SOS(OS_STATUS), regs | ||
510 | ;; | 513 | ;; |
511 | st8 [temp2]=r6,16 // cr.iha | 514 | st8 [temp2]=r6 // cr.iha |
515 | add temp2=SOS(CONTEXT), regs | ||
512 | st8 [temp1]=r12 // os_status, default is cold boot | 516 | st8 [temp1]=r12 // os_status, default is cold boot |
513 | mov r6=IA64_MCA_SAME_CONTEXT | 517 | mov r6=IA64_MCA_SAME_CONTEXT |
514 | ;; | 518 | ;; |
@@ -820,8 +824,8 @@ ia64_state_restore: | |||
820 | // Restore the SAL to OS state. The previous code left regs at pt_regs. | 824 | // Restore the SAL to OS state. The previous code left regs at pt_regs. |
821 | add regs=MCA_SOS_OFFSET-MCA_PT_REGS_OFFSET, regs | 825 | add regs=MCA_SOS_OFFSET-MCA_PT_REGS_OFFSET, regs |
822 | ;; | 826 | ;; |
823 | add temp1=IA64_SAL_OS_STATE_COMMON_OFFSET, regs | 827 | add temp1=SOS(SAL_RA), regs |
824 | add temp2=IA64_SAL_OS_STATE_COMMON_OFFSET+8, regs | 828 | add temp2=SOS(SAL_GP), regs |
825 | ;; | 829 | ;; |
826 | ld8 r12=[temp1],16 // sal_ra | 830 | ld8 r12=[temp1],16 // sal_ra |
827 | ld8 r9=[temp2],16 // sal_gp | 831 | ld8 r9=[temp2],16 // sal_gp |
@@ -842,8 +846,10 @@ ia64_state_restore: | |||
842 | ;; | 846 | ;; |
843 | mov cr.itir=temp3 | 847 | mov cr.itir=temp3 |
844 | mov cr.iipa=temp4 | 848 | mov cr.iipa=temp4 |
845 | ld8 temp3=[temp1],16 // cr.iim | 849 | ld8 temp3=[temp1] // cr.iim |
846 | ld8 temp4=[temp2],16 // cr.iha | 850 | ld8 temp4=[temp2] // cr.iha |
851 | add temp1=SOS(OS_STATUS), regs | ||
852 | add temp2=SOS(CONTEXT), regs | ||
847 | ;; | 853 | ;; |
848 | mov cr.iim=temp3 | 854 | mov cr.iim=temp3 |
849 | mov cr.iha=temp4 | 855 | mov cr.iha=temp4 |
@@ -916,7 +922,7 @@ ia64_state_restore: | |||
916 | 922 | ||
917 | ia64_new_stack: | 923 | ia64_new_stack: |
918 | add regs=MCA_PT_REGS_OFFSET, r3 | 924 | add regs=MCA_PT_REGS_OFFSET, r3 |
919 | add temp2=MCA_SOS_OFFSET+IA64_SAL_OS_STATE_PAL_MIN_STATE_OFFSET, r3 | 925 | add temp2=MCA_SOS_OFFSET+SOS(PAL_MIN_STATE), r3 |
920 | mov b0=r2 // save return address | 926 | mov b0=r2 // save return address |
921 | GET_IA64_MCA_DATA(temp1) | 927 | GET_IA64_MCA_DATA(temp1) |
922 | invala | 928 | invala |
@@ -1020,7 +1026,7 @@ ia64_old_stack: | |||
1020 | 1026 | ||
1021 | ia64_set_kernel_registers: | 1027 | ia64_set_kernel_registers: |
1022 | add temp3=MCA_SP_OFFSET, r3 | 1028 | add temp3=MCA_SP_OFFSET, r3 |
1023 | add temp4=MCA_SOS_OFFSET+IA64_SAL_OS_STATE_OS_GP_OFFSET, r3 | 1029 | add temp4=MCA_SOS_OFFSET+SOS(OS_GP), r3 |
1024 | mov b0=r2 // save return address | 1030 | mov b0=r2 // save return address |
1025 | GET_IA64_MCA_DATA(temp1) | 1031 | GET_IA64_MCA_DATA(temp1) |
1026 | ;; | 1032 | ;; |