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:
Kirill A. Shutemov 2010-07-22 13:18:19 +01:00 committed by Russell King
parent 3dc91aff9c
commit 6338a6aa7c
10 changed files with 25 additions and 20 deletions

View File

@ -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, void hook_fault_code(int nr, int (*fn)(unsigned long, unsigned int,
struct pt_regs *), struct pt_regs *),
int sig, const char *name); int sig, int code, const char *name);
#define xchg(ptr,x) \ #define xchg(ptr,x) \
((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)))) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))

View File

@ -505,10 +505,10 @@ void __init pci_v3_preinit(void)
/* /*
* Hook in our fault handler for PCI errors * Hook in our fault handler for PCI errors
*/ */
hook_fault_code(4, v3_pci_fault, SIGBUS, "external abort on linefetch"); hook_fault_code(4, v3_pci_fault, SIGBUS, 0, "external abort on linefetch");
hook_fault_code(6, v3_pci_fault, SIGBUS, "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, "external abort on non-linefetch"); hook_fault_code(8, v3_pci_fault, SIGBUS, 0, "external abort on non-linefetch");
hook_fault_code(10, v3_pci_fault, SIGBUS, "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); spin_lock_irqsave(&v3_lock, flags);

View File

@ -987,7 +987,7 @@ void __init iop13xx_pci_init(void)
iop13xx_atux_setup(); 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"); "imprecise external abort");
} }

View File

@ -209,7 +209,7 @@ ixp2000_pci_preinit(void)
"the needed workaround has not been configured in"); "the needed workaround has not been configured in");
#endif #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"); "PCI config cycle to non-existent device");
} }

View File

@ -229,7 +229,7 @@ void __init ixp23xx_pci_preinit(void)
{ {
ixp23xx_pci_common_init(); 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"); "PCI config cycle to non-existent device");
*IXP23XX_PCI_ADDR_EXT = 0x0000e000; *IXP23XX_PCI_ADDR_EXT = 0x0000e000;

View File

@ -382,7 +382,8 @@ void __init ixp4xx_pci_preinit(void)
/* hook in our fault handler for PCI errors */ /* 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"); pr_debug("setup PCI-AHB(inbound) and AHB-PCI(outbound) address mappings\n");

View File

@ -268,8 +268,8 @@ static void __init ks8695_pci_preinit(void)
__raw_writel(0, KS8695_PCI_VA + KS8695_PIOBAC); __raw_writel(0, KS8695_PCI_VA + KS8695_PIOBAC);
/* hook in fault handlers */ /* hook in fault handlers */
hook_fault_code(8, 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, "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) static void ks8695_show_pciregs(void)

View File

@ -924,8 +924,10 @@ static int __init alignment_init(void)
ai_usermode = UM_FIXUP; ai_usermode = UM_FIXUP;
} }
hook_fault_code(1, do_alignment, SIGBUS, "alignment exception"); hook_fault_code(1, do_alignment, SIGBUS, BUS_ADRALN,
hook_fault_code(3, do_alignment, SIGBUS, "alignment exception"); "alignment exception");
hook_fault_code(3, do_alignment, SIGBUS, BUS_ADRALN,
"alignment exception");
return 0; return 0;
} }

View File

@ -508,13 +508,15 @@ static struct fsr_info {
void __init void __init
hook_fault_code(int nr, int (*fn)(unsigned long, unsigned int, struct pt_regs *), 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)) { if (nr < 0 || nr >= ARRAY_SIZE(fsr_info))
fsr_info[nr].fn = fn; BUG();
fsr_info[nr].sig = sig;
fsr_info[nr].name = name; fsr_info[nr].fn = fn;
} fsr_info[nr].sig = sig;
fsr_info[nr].code = code;
fsr_info[nr].name = name;
} }
/* /*

View File

@ -359,7 +359,7 @@ static void __init iop3xx_atu_debug(void)
DBG("ATU: IOP3XX_ATUCMD=0x%04x\n", *IOP3XX_ATUCMD); DBG("ATU: IOP3XX_ATUCMD=0x%04x\n", *IOP3XX_ATUCMD);
DBG("ATU: IOP3XX_ATUCR=0x%08x\n", *IOP3XX_ATUCR); 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 */ /* for platforms that might be host-bus-adapters */