forked from Minki/linux
ARM: 6269/1: Add 'code' parameter for hook_fault_code()
Add one more parameter to hook_fault_code() to be able to set 'code' field of struct fsr_info. Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
3dc91aff9c
commit
6338a6aa7c
@ -83,7 +83,7 @@ void arm_notify_die(const char *str, struct pt_regs *regs, struct siginfo *info,
|
||||
|
||||
void hook_fault_code(int nr, int (*fn)(unsigned long, unsigned int,
|
||||
struct pt_regs *),
|
||||
int sig, const char *name);
|
||||
int sig, int code, const char *name);
|
||||
|
||||
#define xchg(ptr,x) \
|
||||
((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))
|
||||
|
@ -505,10 +505,10 @@ void __init pci_v3_preinit(void)
|
||||
/*
|
||||
* Hook in our fault handler for PCI errors
|
||||
*/
|
||||
hook_fault_code(4, v3_pci_fault, SIGBUS, "external abort on linefetch");
|
||||
hook_fault_code(6, v3_pci_fault, SIGBUS, "external abort on linefetch");
|
||||
hook_fault_code(8, v3_pci_fault, SIGBUS, "external abort on non-linefetch");
|
||||
hook_fault_code(10, v3_pci_fault, SIGBUS, "external abort on non-linefetch");
|
||||
hook_fault_code(4, v3_pci_fault, SIGBUS, 0, "external abort on linefetch");
|
||||
hook_fault_code(6, v3_pci_fault, SIGBUS, 0, "external abort on linefetch");
|
||||
hook_fault_code(8, v3_pci_fault, SIGBUS, 0, "external abort on non-linefetch");
|
||||
hook_fault_code(10, v3_pci_fault, SIGBUS, 0, "external abort on non-linefetch");
|
||||
|
||||
spin_lock_irqsave(&v3_lock, flags);
|
||||
|
||||
|
@ -987,7 +987,7 @@ void __init iop13xx_pci_init(void)
|
||||
iop13xx_atux_setup();
|
||||
}
|
||||
|
||||
hook_fault_code(16+6, iop13xx_pci_abort, SIGBUS,
|
||||
hook_fault_code(16+6, iop13xx_pci_abort, SIGBUS, 0,
|
||||
"imprecise external abort");
|
||||
}
|
||||
|
||||
|
@ -209,7 +209,7 @@ ixp2000_pci_preinit(void)
|
||||
"the needed workaround has not been configured in");
|
||||
#endif
|
||||
|
||||
hook_fault_code(16+6, ixp2000_pci_abort_handler, SIGBUS,
|
||||
hook_fault_code(16+6, ixp2000_pci_abort_handler, SIGBUS, 0,
|
||||
"PCI config cycle to non-existent device");
|
||||
}
|
||||
|
||||
|
@ -229,7 +229,7 @@ void __init ixp23xx_pci_preinit(void)
|
||||
{
|
||||
ixp23xx_pci_common_init();
|
||||
|
||||
hook_fault_code(16+6, ixp23xx_pci_abort_handler, SIGBUS,
|
||||
hook_fault_code(16+6, ixp23xx_pci_abort_handler, SIGBUS, 0,
|
||||
"PCI config cycle to non-existent device");
|
||||
|
||||
*IXP23XX_PCI_ADDR_EXT = 0x0000e000;
|
||||
|
@ -382,7 +382,8 @@ void __init ixp4xx_pci_preinit(void)
|
||||
|
||||
|
||||
/* hook in our fault handler for PCI errors */
|
||||
hook_fault_code(16+6, abort_handler, SIGBUS, "imprecise external abort");
|
||||
hook_fault_code(16+6, abort_handler, SIGBUS, 0,
|
||||
"imprecise external abort");
|
||||
|
||||
pr_debug("setup PCI-AHB(inbound) and AHB-PCI(outbound) address mappings\n");
|
||||
|
||||
|
@ -268,8 +268,8 @@ static void __init ks8695_pci_preinit(void)
|
||||
__raw_writel(0, KS8695_PCI_VA + KS8695_PIOBAC);
|
||||
|
||||
/* hook in fault handlers */
|
||||
hook_fault_code(8, ks8695_pci_fault, SIGBUS, "external abort on non-linefetch");
|
||||
hook_fault_code(10, ks8695_pci_fault, SIGBUS, "external abort on non-linefetch");
|
||||
hook_fault_code(8, ks8695_pci_fault, SIGBUS, 0, "external abort on non-linefetch");
|
||||
hook_fault_code(10, ks8695_pci_fault, SIGBUS, 0, "external abort on non-linefetch");
|
||||
}
|
||||
|
||||
static void ks8695_show_pciregs(void)
|
||||
|
@ -924,8 +924,10 @@ static int __init alignment_init(void)
|
||||
ai_usermode = UM_FIXUP;
|
||||
}
|
||||
|
||||
hook_fault_code(1, do_alignment, SIGBUS, "alignment exception");
|
||||
hook_fault_code(3, do_alignment, SIGBUS, "alignment exception");
|
||||
hook_fault_code(1, do_alignment, SIGBUS, BUS_ADRALN,
|
||||
"alignment exception");
|
||||
hook_fault_code(3, do_alignment, SIGBUS, BUS_ADRALN,
|
||||
"alignment exception");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -508,13 +508,15 @@ static struct fsr_info {
|
||||
|
||||
void __init
|
||||
hook_fault_code(int nr, int (*fn)(unsigned long, unsigned int, struct pt_regs *),
|
||||
int sig, const char *name)
|
||||
int sig, int code, const char *name)
|
||||
{
|
||||
if (nr >= 0 && nr < ARRAY_SIZE(fsr_info)) {
|
||||
fsr_info[nr].fn = fn;
|
||||
fsr_info[nr].sig = sig;
|
||||
fsr_info[nr].name = name;
|
||||
}
|
||||
if (nr < 0 || nr >= ARRAY_SIZE(fsr_info))
|
||||
BUG();
|
||||
|
||||
fsr_info[nr].fn = fn;
|
||||
fsr_info[nr].sig = sig;
|
||||
fsr_info[nr].code = code;
|
||||
fsr_info[nr].name = name;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -359,7 +359,7 @@ static void __init iop3xx_atu_debug(void)
|
||||
DBG("ATU: IOP3XX_ATUCMD=0x%04x\n", *IOP3XX_ATUCMD);
|
||||
DBG("ATU: IOP3XX_ATUCR=0x%08x\n", *IOP3XX_ATUCR);
|
||||
|
||||
hook_fault_code(16+6, iop3xx_pci_abort, SIGBUS, "imprecise external abort");
|
||||
hook_fault_code(16+6, iop3xx_pci_abort, SIGBUS, 0, "imprecise external abort");
|
||||
}
|
||||
|
||||
/* for platforms that might be host-bus-adapters */
|
||||
|
Loading…
Reference in New Issue
Block a user