diff options
Diffstat (limited to 'arch/ppc/kernel/traps.c')
-rw-r--r-- | arch/ppc/kernel/traps.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/arch/ppc/kernel/traps.c b/arch/ppc/kernel/traps.c index 16adde6b429d..42d980e82bdc 100644 --- a/arch/ppc/kernel/traps.c +++ b/arch/ppc/kernel/traps.c | |||
@@ -159,7 +159,7 @@ void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr) | |||
159 | */ | 159 | */ |
160 | static inline int check_io_access(struct pt_regs *regs) | 160 | static inline int check_io_access(struct pt_regs *regs) |
161 | { | 161 | { |
162 | #ifdef CONFIG_PPC_PMAC | 162 | #if defined CONFIG_PPC_PMAC || defined CONFIG_8xx |
163 | unsigned long msr = regs->msr; | 163 | unsigned long msr = regs->msr; |
164 | const struct exception_table_entry *entry; | 164 | const struct exception_table_entry *entry; |
165 | unsigned int *nip = (unsigned int *)regs->nip; | 165 | unsigned int *nip = (unsigned int *)regs->nip; |
@@ -178,7 +178,11 @@ static inline int check_io_access(struct pt_regs *regs) | |||
178 | nip -= 2; | 178 | nip -= 2; |
179 | else if (*nip == 0x4c00012c) /* isync */ | 179 | else if (*nip == 0x4c00012c) /* isync */ |
180 | --nip; | 180 | --nip; |
181 | if (*nip == 0x7c0004ac || (*nip >> 26) == 3) { | 181 | /* eieio from I/O string functions */ |
182 | else if ((*nip) == 0x7c0006ac || *(nip+1) == 0x7c0006ac) | ||
183 | nip += 2; | ||
184 | if (*nip == 0x7c0004ac || (*nip >> 26) == 3 || | ||
185 | (*(nip+1) >> 26) == 3) { | ||
182 | /* sync or twi */ | 186 | /* sync or twi */ |
183 | unsigned int rb; | 187 | unsigned int rb; |
184 | 188 | ||