Skip to content

Commit

Permalink
ARM: 6269/1: Add 'code' parameter for hook_fault_code()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Kirill A. Shutemov authored and Russell King committed Jul 27, 2010
1 parent 3dc91af commit 6338a6a
Show file tree
Hide file tree
Showing 10 changed files with 25 additions and 20 deletions.
2 changes: 1 addition & 1 deletion arch/arm/include/asm/system.h
Original file line number Diff line number Diff line change
Expand Up @@ -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))))
Expand Down
8 changes: 4 additions & 4 deletions arch/arm/mach-integrator/pci_v3.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
2 changes: 1 addition & 1 deletion arch/arm/mach-iop13xx/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -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");
}

Expand Down
2 changes: 1 addition & 1 deletion arch/arm/mach-ixp2000/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -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");
}

Expand Down
2 changes: 1 addition & 1 deletion arch/arm/mach-ixp23xx/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
3 changes: 2 additions & 1 deletion arch/arm/mach-ixp4xx/common-pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -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");

Expand Down
4 changes: 2 additions & 2 deletions arch/arm/mach-ks8695/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
6 changes: 4 additions & 2 deletions arch/arm/mm/alignment.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
14 changes: 8 additions & 6 deletions arch/arm/mm/fault.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

/*
Expand Down
2 changes: 1 addition & 1 deletion arch/arm/plat-iop/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down

0 comments on commit 6338a6a

Please sign in to comment.