diff options
author | Kirill A. Shutemov <kirill@shutemov.name> | 2010-07-22 08:18:19 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-07-27 05:48:34 -0400 |
commit | 6338a6aa7c082f11d55712251e14178c68bf5869 (patch) | |
tree | 4d85f1401efd41757741388e4b6a3801fa8d4d8b /arch/arm | |
parent | 3dc91aff9c3ef54b15cdaf32f61f973489fe69eb (diff) |
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>
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/include/asm/system.h | 2 | ||||
-rw-r--r-- | arch/arm/mach-integrator/pci_v3.c | 8 | ||||
-rw-r--r-- | arch/arm/mach-iop13xx/pci.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-ixp2000/pci.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-ixp23xx/pci.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-ixp4xx/common-pci.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-ks8695/pci.c | 4 | ||||
-rw-r--r-- | arch/arm/mm/alignment.c | 6 | ||||
-rw-r--r-- | arch/arm/mm/fault.c | 14 | ||||
-rw-r--r-- | arch/arm/plat-iop/pci.c | 2 |
10 files changed, 25 insertions, 20 deletions
diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h index 5f4f48002734..8ba1ccf82a02 100644 --- a/arch/arm/include/asm/system.h +++ b/arch/arm/include/asm/system.h | |||
@@ -83,7 +83,7 @@ void arm_notify_die(const char *str, struct pt_regs *regs, struct siginfo *info, | |||
83 | 83 | ||
84 | void hook_fault_code(int nr, int (*fn)(unsigned long, unsigned int, | 84 | void hook_fault_code(int nr, int (*fn)(unsigned long, unsigned int, |
85 | struct pt_regs *), | 85 | struct pt_regs *), |
86 | int sig, const char *name); | 86 | int sig, int code, const char *name); |
87 | 87 | ||
88 | #define xchg(ptr,x) \ | 88 | #define xchg(ptr,x) \ |
89 | ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)))) | 89 | ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)))) |
diff --git a/arch/arm/mach-integrator/pci_v3.c b/arch/arm/mach-integrator/pci_v3.c index 9cef0590d5aa..6467d99fa2ee 100644 --- a/arch/arm/mach-integrator/pci_v3.c +++ b/arch/arm/mach-integrator/pci_v3.c | |||
@@ -505,10 +505,10 @@ void __init pci_v3_preinit(void) | |||
505 | /* | 505 | /* |
506 | * Hook in our fault handler for PCI errors | 506 | * Hook in our fault handler for PCI errors |
507 | */ | 507 | */ |
508 | hook_fault_code(4, v3_pci_fault, SIGBUS, "external abort on linefetch"); | 508 | hook_fault_code(4, v3_pci_fault, SIGBUS, 0, "external abort on linefetch"); |
509 | hook_fault_code(6, v3_pci_fault, SIGBUS, "external abort on linefetch"); | 509 | hook_fault_code(6, v3_pci_fault, SIGBUS, 0, "external abort on linefetch"); |
510 | hook_fault_code(8, v3_pci_fault, SIGBUS, "external abort on non-linefetch"); | 510 | hook_fault_code(8, v3_pci_fault, SIGBUS, 0, "external abort on non-linefetch"); |
511 | hook_fault_code(10, v3_pci_fault, SIGBUS, "external abort on non-linefetch"); | 511 | hook_fault_code(10, v3_pci_fault, SIGBUS, 0, "external abort on non-linefetch"); |
512 | 512 | ||
513 | spin_lock_irqsave(&v3_lock, flags); | 513 | spin_lock_irqsave(&v3_lock, flags); |
514 | 514 | ||
diff --git a/arch/arm/mach-iop13xx/pci.c b/arch/arm/mach-iop13xx/pci.c index 6d5a90813d31..773ea0c95b9f 100644 --- a/arch/arm/mach-iop13xx/pci.c +++ b/arch/arm/mach-iop13xx/pci.c | |||
@@ -987,7 +987,7 @@ void __init iop13xx_pci_init(void) | |||
987 | iop13xx_atux_setup(); | 987 | iop13xx_atux_setup(); |
988 | } | 988 | } |
989 | 989 | ||
990 | hook_fault_code(16+6, iop13xx_pci_abort, SIGBUS, | 990 | hook_fault_code(16+6, iop13xx_pci_abort, SIGBUS, 0, |
991 | "imprecise external abort"); | 991 | "imprecise external abort"); |
992 | } | 992 | } |
993 | 993 | ||
diff --git a/arch/arm/mach-ixp2000/pci.c b/arch/arm/mach-ixp2000/pci.c index 90771cad06f8..f797c5f538b0 100644 --- a/arch/arm/mach-ixp2000/pci.c +++ b/arch/arm/mach-ixp2000/pci.c | |||
@@ -209,7 +209,7 @@ ixp2000_pci_preinit(void) | |||
209 | "the needed workaround has not been configured in"); | 209 | "the needed workaround has not been configured in"); |
210 | #endif | 210 | #endif |
211 | 211 | ||
212 | hook_fault_code(16+6, ixp2000_pci_abort_handler, SIGBUS, | 212 | hook_fault_code(16+6, ixp2000_pci_abort_handler, SIGBUS, 0, |
213 | "PCI config cycle to non-existent device"); | 213 | "PCI config cycle to non-existent device"); |
214 | } | 214 | } |
215 | 215 | ||
diff --git a/arch/arm/mach-ixp23xx/pci.c b/arch/arm/mach-ixp23xx/pci.c index 4b0e598a91c9..563819a83292 100644 --- a/arch/arm/mach-ixp23xx/pci.c +++ b/arch/arm/mach-ixp23xx/pci.c | |||
@@ -229,7 +229,7 @@ void __init ixp23xx_pci_preinit(void) | |||
229 | { | 229 | { |
230 | ixp23xx_pci_common_init(); | 230 | ixp23xx_pci_common_init(); |
231 | 231 | ||
232 | hook_fault_code(16+6, ixp23xx_pci_abort_handler, SIGBUS, | 232 | hook_fault_code(16+6, ixp23xx_pci_abort_handler, SIGBUS, 0, |
233 | "PCI config cycle to non-existent device"); | 233 | "PCI config cycle to non-existent device"); |
234 | 234 | ||
235 | *IXP23XX_PCI_ADDR_EXT = 0x0000e000; | 235 | *IXP23XX_PCI_ADDR_EXT = 0x0000e000; |
diff --git a/arch/arm/mach-ixp4xx/common-pci.c b/arch/arm/mach-ixp4xx/common-pci.c index e3181534c7f9..f4fbb5ec645b 100644 --- a/arch/arm/mach-ixp4xx/common-pci.c +++ b/arch/arm/mach-ixp4xx/common-pci.c | |||
@@ -382,7 +382,8 @@ void __init ixp4xx_pci_preinit(void) | |||
382 | 382 | ||
383 | 383 | ||
384 | /* hook in our fault handler for PCI errors */ | 384 | /* hook in our fault handler for PCI errors */ |
385 | hook_fault_code(16+6, abort_handler, SIGBUS, "imprecise external abort"); | 385 | hook_fault_code(16+6, abort_handler, SIGBUS, 0, |
386 | "imprecise external abort"); | ||
386 | 387 | ||
387 | pr_debug("setup PCI-AHB(inbound) and AHB-PCI(outbound) address mappings\n"); | 388 | pr_debug("setup PCI-AHB(inbound) and AHB-PCI(outbound) address mappings\n"); |
388 | 389 | ||
diff --git a/arch/arm/mach-ks8695/pci.c b/arch/arm/mach-ks8695/pci.c index 78499667eb7b..5fcd082a17f9 100644 --- a/arch/arm/mach-ks8695/pci.c +++ b/arch/arm/mach-ks8695/pci.c | |||
@@ -268,8 +268,8 @@ static void __init ks8695_pci_preinit(void) | |||
268 | __raw_writel(0, KS8695_PCI_VA + KS8695_PIOBAC); | 268 | __raw_writel(0, KS8695_PCI_VA + KS8695_PIOBAC); |
269 | 269 | ||
270 | /* hook in fault handlers */ | 270 | /* hook in fault handlers */ |
271 | hook_fault_code(8, ks8695_pci_fault, SIGBUS, "external abort on non-linefetch"); | 271 | hook_fault_code(8, ks8695_pci_fault, SIGBUS, 0, "external abort on non-linefetch"); |
272 | hook_fault_code(10, ks8695_pci_fault, SIGBUS, "external abort on non-linefetch"); | 272 | hook_fault_code(10, ks8695_pci_fault, SIGBUS, 0, "external abort on non-linefetch"); |
273 | } | 273 | } |
274 | 274 | ||
275 | static void ks8695_show_pciregs(void) | 275 | static void ks8695_show_pciregs(void) |
diff --git a/arch/arm/mm/alignment.c b/arch/arm/mm/alignment.c index 53a609680c10..77cfdbed9501 100644 --- a/arch/arm/mm/alignment.c +++ b/arch/arm/mm/alignment.c | |||
@@ -924,8 +924,10 @@ static int __init alignment_init(void) | |||
924 | ai_usermode = UM_FIXUP; | 924 | ai_usermode = UM_FIXUP; |
925 | } | 925 | } |
926 | 926 | ||
927 | hook_fault_code(1, do_alignment, SIGBUS, "alignment exception"); | 927 | hook_fault_code(1, do_alignment, SIGBUS, BUS_ADRALN, |
928 | hook_fault_code(3, do_alignment, SIGBUS, "alignment exception"); | 928 | "alignment exception"); |
929 | hook_fault_code(3, do_alignment, SIGBUS, BUS_ADRALN, | ||
930 | "alignment exception"); | ||
929 | 931 | ||
930 | return 0; | 932 | return 0; |
931 | } | 933 | } |
diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c index ce6f3a422c81..84131c832430 100644 --- a/arch/arm/mm/fault.c +++ b/arch/arm/mm/fault.c | |||
@@ -508,13 +508,15 @@ static struct fsr_info { | |||
508 | 508 | ||
509 | void __init | 509 | void __init |
510 | hook_fault_code(int nr, int (*fn)(unsigned long, unsigned int, struct pt_regs *), | 510 | hook_fault_code(int nr, int (*fn)(unsigned long, unsigned int, struct pt_regs *), |
511 | int sig, const char *name) | 511 | int sig, int code, const char *name) |
512 | { | 512 | { |
513 | if (nr >= 0 && nr < ARRAY_SIZE(fsr_info)) { | 513 | if (nr < 0 || nr >= ARRAY_SIZE(fsr_info)) |
514 | fsr_info[nr].fn = fn; | 514 | BUG(); |
515 | fsr_info[nr].sig = sig; | 515 | |
516 | fsr_info[nr].name = name; | 516 | fsr_info[nr].fn = fn; |
517 | } | 517 | fsr_info[nr].sig = sig; |
518 | fsr_info[nr].code = code; | ||
519 | fsr_info[nr].name = name; | ||
518 | } | 520 | } |
519 | 521 | ||
520 | /* | 522 | /* |
diff --git a/arch/arm/plat-iop/pci.c b/arch/arm/plat-iop/pci.c index ce31f316ac75..43f2b158237c 100644 --- a/arch/arm/plat-iop/pci.c +++ b/arch/arm/plat-iop/pci.c | |||
@@ -359,7 +359,7 @@ static void __init iop3xx_atu_debug(void) | |||
359 | DBG("ATU: IOP3XX_ATUCMD=0x%04x\n", *IOP3XX_ATUCMD); | 359 | DBG("ATU: IOP3XX_ATUCMD=0x%04x\n", *IOP3XX_ATUCMD); |
360 | DBG("ATU: IOP3XX_ATUCR=0x%08x\n", *IOP3XX_ATUCR); | 360 | DBG("ATU: IOP3XX_ATUCR=0x%08x\n", *IOP3XX_ATUCR); |
361 | 361 | ||
362 | hook_fault_code(16+6, iop3xx_pci_abort, SIGBUS, "imprecise external abort"); | 362 | hook_fault_code(16+6, iop3xx_pci_abort, SIGBUS, 0, "imprecise external abort"); |
363 | } | 363 | } |
364 | 364 | ||
365 | /* for platforms that might be host-bus-adapters */ | 365 | /* for platforms that might be host-bus-adapters */ |