[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>
This commit is contained in:
@@ -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)
|
|||||||
}
|
}
|
||||||
;;
|
;;
|
||||||
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)
|
|||||||
.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 {
|
|||||||
* (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 *);
|
|||||||
#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)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user