Commit c12fb188 authored by Bjorn Helgaas's avatar Bjorn Helgaas Committed by Tony Luck

[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: default avatarBjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
parent accaddb2
...@@ -50,12 +50,10 @@ END(ia64_pal_default_handler) ...@@ -50,12 +50,10 @@ END(ia64_pal_default_handler)
* *
* in0 Index of PAL service * in0 Index of PAL service
* in1 - in3 Remaining PAL arguments * in1 - in3 Remaining PAL arguments
* in4 1 ==> clear psr.ic, 0 ==> don't clear psr.ic
*
*/ */
GLOBAL_ENTRY(ia64_pal_call_static) GLOBAL_ENTRY(ia64_pal_call_static)
.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(5) .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(4)
alloc loc1 = ar.pfs,5,5,0,0 alloc loc1 = ar.pfs,4,5,0,0
movl loc2 = pal_entry_point movl loc2 = pal_entry_point
1: { 1: {
mov r28 = in0 mov r28 = in0
...@@ -64,7 +62,6 @@ GLOBAL_ENTRY(ia64_pal_call_static) ...@@ -64,7 +62,6 @@ GLOBAL_ENTRY(ia64_pal_call_static)
} }
;; ;;
ld8 loc2 = [loc2] // loc2 <- entry point ld8 loc2 = [loc2] // loc2 <- entry point
tbit.nz p6,p7 = in4, 0
adds r8 = 1f-1b,r8 adds r8 = 1f-1b,r8
mov loc4=ar.rsc // save RSE configuration mov loc4=ar.rsc // save RSE configuration
;; ;;
...@@ -74,13 +71,11 @@ GLOBAL_ENTRY(ia64_pal_call_static) ...@@ -74,13 +71,11 @@ GLOBAL_ENTRY(ia64_pal_call_static)
.body .body
mov r30 = in2 mov r30 = in2
(p6) rsm psr.i | psr.ic
mov r31 = in3 mov r31 = in3
mov b7 = loc2 mov b7 = loc2
(p7) rsm psr.i rsm psr.i
;; ;;
(p6) srlz.i
mov rp = r8 mov rp = r8
br.cond.sptk.many b7 br.cond.sptk.many b7
1: mov psr.l = loc3 1: mov psr.l = loc3
......
...@@ -764,7 +764,7 @@ struct ia64_pal_retval { ...@@ -764,7 +764,7 @@ struct ia64_pal_retval {
* (generally 0) MUST be passed. Reserved parameters are not optional * (generally 0) MUST be passed. Reserved parameters are not optional
* parameters. * parameters.
*/ */
extern struct ia64_pal_retval ia64_pal_call_static (u64, u64, u64, u64, u64); extern struct ia64_pal_retval ia64_pal_call_static (u64, u64, u64, u64);
extern struct ia64_pal_retval ia64_pal_call_stacked (u64, u64, u64, u64); extern struct ia64_pal_retval ia64_pal_call_stacked (u64, u64, u64, u64);
extern struct ia64_pal_retval ia64_pal_call_phys_static (u64, u64, u64, u64); extern struct ia64_pal_retval ia64_pal_call_phys_static (u64, u64, u64, u64);
extern struct ia64_pal_retval ia64_pal_call_phys_stacked (u64, u64, u64, u64); extern struct ia64_pal_retval ia64_pal_call_phys_stacked (u64, u64, u64, u64);
...@@ -774,14 +774,7 @@ extern void ia64_load_scratch_fpregs (struct ia64_fpreg *); ...@@ -774,14 +774,7 @@ extern void ia64_load_scratch_fpregs (struct ia64_fpreg *);
#define PAL_CALL(iprv,a0,a1,a2,a3) do { \ #define PAL_CALL(iprv,a0,a1,a2,a3) do { \
struct ia64_fpreg fr[6]; \ struct ia64_fpreg fr[6]; \
ia64_save_scratch_fpregs(fr); \ ia64_save_scratch_fpregs(fr); \
iprv = ia64_pal_call_static(a0, a1, a2, a3, 0); \ iprv = ia64_pal_call_static(a0, a1, a2, a3); \
ia64_load_scratch_fpregs(fr); \
} while (0)
#define PAL_CALL_IC_OFF(iprv,a0,a1,a2,a3) do { \
struct ia64_fpreg fr[6]; \
ia64_save_scratch_fpregs(fr); \
iprv = ia64_pal_call_static(a0, a1, a2, a3, 1); \
ia64_load_scratch_fpregs(fr); \ ia64_load_scratch_fpregs(fr); \
} while (0) } while (0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment