|
@@ -232,6 +232,7 @@ setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs,
|
|
struct rt_sigframe __user *frame;
|
|
struct rt_sigframe __user *frame;
|
|
unsigned long rp, usp;
|
|
unsigned long rp, usp;
|
|
unsigned long haddr, sigframe_size;
|
|
unsigned long haddr, sigframe_size;
|
|
|
|
+ unsigned long start, end;
|
|
int err = 0;
|
|
int err = 0;
|
|
#ifdef CONFIG_64BIT
|
|
#ifdef CONFIG_64BIT
|
|
struct compat_rt_sigframe __user * compat_frame;
|
|
struct compat_rt_sigframe __user * compat_frame;
|
|
@@ -299,10 +300,10 @@ setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs,
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
|
|
- flush_user_dcache_range((unsigned long) &frame->tramp[0],
|
|
|
|
- (unsigned long) &frame->tramp[TRAMP_SIZE]);
|
|
|
|
- flush_user_icache_range((unsigned long) &frame->tramp[0],
|
|
|
|
- (unsigned long) &frame->tramp[TRAMP_SIZE]);
|
|
|
|
|
|
+ start = (unsigned long) &frame->tramp[0];
|
|
|
|
+ end = (unsigned long) &frame->tramp[TRAMP_SIZE];
|
|
|
|
+ flush_user_dcache_range_asm(start, end);
|
|
|
|
+ flush_user_icache_range_asm(start, end);
|
|
|
|
|
|
/* TRAMP Words 0-4, Length 5 = SIGRESTARTBLOCK_TRAMP
|
|
/* TRAMP Words 0-4, Length 5 = SIGRESTARTBLOCK_TRAMP
|
|
* TRAMP Words 5-9, Length 4 = SIGRETURN_TRAMP
|
|
* TRAMP Words 5-9, Length 4 = SIGRETURN_TRAMP
|
|
@@ -548,8 +549,8 @@ insert_restart_trampoline(struct pt_regs *regs)
|
|
WARN_ON(err);
|
|
WARN_ON(err);
|
|
|
|
|
|
/* flush data/instruction cache for new insns */
|
|
/* flush data/instruction cache for new insns */
|
|
- flush_user_dcache_range(start, end);
|
|
|
|
- flush_user_icache_range(start, end);
|
|
|
|
|
|
+ flush_user_dcache_range_asm(start, end);
|
|
|
|
+ flush_user_icache_range_asm(start, end);
|
|
|
|
|
|
regs->gr[31] = regs->gr[30] + 8;
|
|
regs->gr[31] = regs->gr[30] + 8;
|
|
return;
|
|
return;
|