|
@@ -359,13 +359,6 @@ static inline int handle_delayslot(struct pt_regs *regs,
|
|
#define SH_PC_8BIT_OFFSET(instr) ((((signed char)(instr))*2) + 4)
|
|
#define SH_PC_8BIT_OFFSET(instr) ((((signed char)(instr))*2) + 4)
|
|
#define SH_PC_12BIT_OFFSET(instr) ((((signed short)(instr<<4))>>3) + 4)
|
|
#define SH_PC_12BIT_OFFSET(instr) ((((signed short)(instr<<4))>>3) + 4)
|
|
|
|
|
|
-/*
|
|
|
|
- * XXX: SH-2A needs this too, but it needs an overhaul thanks to mixed 32-bit
|
|
|
|
- * opcodes..
|
|
|
|
- */
|
|
|
|
-
|
|
|
|
-static int handle_unaligned_notify_count = 10;
|
|
|
|
-
|
|
|
|
int handle_unaligned_access(insn_size_t instruction, struct pt_regs *regs,
|
|
int handle_unaligned_access(insn_size_t instruction, struct pt_regs *regs,
|
|
struct mem_access *ma)
|
|
struct mem_access *ma)
|
|
{
|
|
{
|
|
@@ -375,15 +368,13 @@ int handle_unaligned_access(insn_size_t instruction, struct pt_regs *regs,
|
|
index = (instruction>>8)&15; /* 0x0F00 */
|
|
index = (instruction>>8)&15; /* 0x0F00 */
|
|
rm = regs->regs[index];
|
|
rm = regs->regs[index];
|
|
|
|
|
|
- /* shout about the first ten userspace fixups */
|
|
|
|
- if (user_mode(regs) && handle_unaligned_notify_count>0) {
|
|
|
|
- handle_unaligned_notify_count--;
|
|
|
|
-
|
|
|
|
- printk(KERN_NOTICE "Fixing up unaligned userspace access "
|
|
|
|
|
|
+ /* shout about fixups */
|
|
|
|
+ if (printk_ratelimit())
|
|
|
|
+ printk(KERN_NOTICE "Fixing up unaligned %s access "
|
|
"in \"%s\" pid=%d pc=0x%p ins=0x%04hx\n",
|
|
"in \"%s\" pid=%d pc=0x%p ins=0x%04hx\n",
|
|
|
|
+ user_mode(regs) ? "userspace" : "kernel",
|
|
current->comm, task_pid_nr(current),
|
|
current->comm, task_pid_nr(current),
|
|
(void *)regs->pc, instruction);
|
|
(void *)regs->pc, instruction);
|
|
- }
|
|
|
|
|
|
|
|
ret = -EFAULT;
|
|
ret = -EFAULT;
|
|
switch (instruction&0xF000) {
|
|
switch (instruction&0xF000) {
|