Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[IA64] remove unused PAL_CALL_IC_OFF

Linux maps PAL instructions with an ITR, but uses a DTC for PAL data.
Section 11.10.2.1.3, "Making PAL Procedures Calls in Physical or Virtual
Mode," of the SDM (rev 2.2), says we must therefore make all PAL calls
with PSR.ic = 1 so that Linux can handle any TLB faults.

PAL_CALL_IC_OFF is currently unused, and as long as we use the ITR + DTC
strategy, we can't use it. So remove it. I also removed the code in
ia64_pal_call_static() that conditionally cleared PSR.ic.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>

authored by

Bjorn Helgaas and committed by
Tony Luck
c12fb188 accaddb2

+5 -17
+3 -8
arch/ia64/kernel/pal.S
··· 50 50 * 51 51 * in0 Index of PAL service 52 52 * in1 - in3 Remaining PAL arguments 53 - * in4 1 ==> clear psr.ic, 0 ==> don't clear psr.ic 54 - * 55 53 */ 56 54 GLOBAL_ENTRY(ia64_pal_call_static) 57 - .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(5) 58 - alloc loc1 = ar.pfs,5,5,0,0 55 + .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(4) 56 + alloc loc1 = ar.pfs,4,5,0,0 59 57 movl loc2 = pal_entry_point 60 58 1: { 61 59 mov r28 = in0 ··· 62 64 } 63 65 ;; 64 66 ld8 loc2 = [loc2] // loc2 <- entry point 65 - tbit.nz p6,p7 = in4, 0 66 67 adds r8 = 1f-1b,r8 67 68 mov loc4=ar.rsc // save RSE configuration 68 69 ;; ··· 71 74 .body 72 75 mov r30 = in2 73 76 74 - (p6) rsm psr.i | psr.ic 75 77 mov r31 = in3 76 78 mov b7 = loc2 77 79 78 - (p7) rsm psr.i 80 + rsm psr.i 79 81 ;; 80 - (p6) srlz.i 81 82 mov rp = r8 82 83 br.cond.sptk.many b7 83 84 1: mov psr.l = loc3
+2 -9
include/asm-ia64/pal.h
··· 764 764 * (generally 0) MUST be passed. Reserved parameters are not optional 765 765 * parameters. 766 766 */ 767 - extern struct ia64_pal_retval ia64_pal_call_static (u64, u64, u64, u64, u64); 767 + extern struct ia64_pal_retval ia64_pal_call_static (u64, u64, u64, u64); 768 768 extern struct ia64_pal_retval ia64_pal_call_stacked (u64, u64, u64, u64); 769 769 extern struct ia64_pal_retval ia64_pal_call_phys_static (u64, u64, u64, u64); 770 770 extern struct ia64_pal_retval ia64_pal_call_phys_stacked (u64, u64, u64, u64); ··· 774 774 #define PAL_CALL(iprv,a0,a1,a2,a3) do { \ 775 775 struct ia64_fpreg fr[6]; \ 776 776 ia64_save_scratch_fpregs(fr); \ 777 - iprv = ia64_pal_call_static(a0, a1, a2, a3, 0); \ 778 - ia64_load_scratch_fpregs(fr); \ 779 - } while (0) 780 - 781 - #define PAL_CALL_IC_OFF(iprv,a0,a1,a2,a3) do { \ 782 - struct ia64_fpreg fr[6]; \ 783 - ia64_save_scratch_fpregs(fr); \ 784 - iprv = ia64_pal_call_static(a0, a1, a2, a3, 1); \ 777 + iprv = ia64_pal_call_static(a0, a1, a2, a3); \ 785 778 ia64_load_scratch_fpregs(fr); \ 786 779 } while (0) 787 780