fault.c (e23c34bb41da65f354fb7eee04300c56ee48f60c) | fault.c (4ed89f2228061422ce5f62545fd0b6f6648bd2cc) |
---|---|
1/* 2 * linux/arch/arm/mm/fault.c 3 * 4 * Copyright (C) 1995 Linus Torvalds 5 * Modifications for ARM processor (c) 1995-2004 Russell King 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as --- 49 unchanged lines hidden (view full) --- 58 */ 59void show_pte(struct mm_struct *mm, unsigned long addr) 60{ 61 pgd_t *pgd; 62 63 if (!mm) 64 mm = &init_mm; 65 | 1/* 2 * linux/arch/arm/mm/fault.c 3 * 4 * Copyright (C) 1995 Linus Torvalds 5 * Modifications for ARM processor (c) 1995-2004 Russell King 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as --- 49 unchanged lines hidden (view full) --- 58 */ 59void show_pte(struct mm_struct *mm, unsigned long addr) 60{ 61 pgd_t *pgd; 62 63 if (!mm) 64 mm = &init_mm; 65 |
66 printk(KERN_ALERT "pgd = %p\n", mm->pgd); | 66 pr_alert("pgd = %p\n", mm->pgd); |
67 pgd = pgd_offset(mm, addr); | 67 pgd = pgd_offset(mm, addr); |
68 printk(KERN_ALERT "[%08lx] *pgd=%08llx", | 68 pr_alert("[%08lx] *pgd=%08llx", |
69 addr, (long long)pgd_val(*pgd)); 70 71 do { 72 pud_t *pud; 73 pmd_t *pmd; 74 pte_t *pte; 75 76 if (pgd_none(*pgd)) 77 break; 78 79 if (pgd_bad(*pgd)) { | 69 addr, (long long)pgd_val(*pgd)); 70 71 do { 72 pud_t *pud; 73 pmd_t *pmd; 74 pte_t *pte; 75 76 if (pgd_none(*pgd)) 77 break; 78 79 if (pgd_bad(*pgd)) { |
80 printk("(bad)"); | 80 pr_cont("(bad)"); |
81 break; 82 } 83 84 pud = pud_offset(pgd, addr); 85 if (PTRS_PER_PUD != 1) | 81 break; 82 } 83 84 pud = pud_offset(pgd, addr); 85 if (PTRS_PER_PUD != 1) |
86 printk(", *pud=%08llx", (long long)pud_val(*pud)); | 86 pr_cont(", *pud=%08llx", (long long)pud_val(*pud)); |
87 88 if (pud_none(*pud)) 89 break; 90 91 if (pud_bad(*pud)) { | 87 88 if (pud_none(*pud)) 89 break; 90 91 if (pud_bad(*pud)) { |
92 printk("(bad)"); | 92 pr_cont("(bad)"); |
93 break; 94 } 95 96 pmd = pmd_offset(pud, addr); 97 if (PTRS_PER_PMD != 1) | 93 break; 94 } 95 96 pmd = pmd_offset(pud, addr); 97 if (PTRS_PER_PMD != 1) |
98 printk(", *pmd=%08llx", (long long)pmd_val(*pmd)); | 98 pr_cont(", *pmd=%08llx", (long long)pmd_val(*pmd)); |
99 100 if (pmd_none(*pmd)) 101 break; 102 103 if (pmd_bad(*pmd)) { | 99 100 if (pmd_none(*pmd)) 101 break; 102 103 if (pmd_bad(*pmd)) { |
104 printk("(bad)"); | 104 pr_cont("(bad)"); |
105 break; 106 } 107 108 /* We must not map this if we have highmem enabled */ 109 if (PageHighMem(pfn_to_page(pmd_val(*pmd) >> PAGE_SHIFT))) 110 break; 111 112 pte = pte_offset_map(pmd, addr); | 105 break; 106 } 107 108 /* We must not map this if we have highmem enabled */ 109 if (PageHighMem(pfn_to_page(pmd_val(*pmd) >> PAGE_SHIFT))) 110 break; 111 112 pte = pte_offset_map(pmd, addr); |
113 printk(", *pte=%08llx", (long long)pte_val(*pte)); | 113 pr_cont(", *pte=%08llx", (long long)pte_val(*pte)); |
114#ifndef CONFIG_ARM_LPAE | 114#ifndef CONFIG_ARM_LPAE |
115 printk(", *ppte=%08llx", | 115 pr_cont(", *ppte=%08llx", |
116 (long long)pte_val(pte[PTE_HWTABLE_PTRS])); 117#endif 118 pte_unmap(pte); 119 } while(0); 120 | 116 (long long)pte_val(pte[PTE_HWTABLE_PTRS])); 117#endif 118 pte_unmap(pte); 119 } while(0); 120 |
121 printk("\n"); | 121 pr_cont("\n"); |
122} 123#else /* CONFIG_MMU */ 124void show_pte(struct mm_struct *mm, unsigned long addr) 125{ } 126#endif /* CONFIG_MMU */ 127 128/* 129 * Oops. The kernel tried to access some page that wasn't present. --- 7 unchanged lines hidden (view full) --- 137 */ 138 if (fixup_exception(regs)) 139 return; 140 141 /* 142 * No handler, we'll have to terminate things with extreme prejudice. 143 */ 144 bust_spinlocks(1); | 122} 123#else /* CONFIG_MMU */ 124void show_pte(struct mm_struct *mm, unsigned long addr) 125{ } 126#endif /* CONFIG_MMU */ 127 128/* 129 * Oops. The kernel tried to access some page that wasn't present. --- 7 unchanged lines hidden (view full) --- 137 */ 138 if (fixup_exception(regs)) 139 return; 140 141 /* 142 * No handler, we'll have to terminate things with extreme prejudice. 143 */ 144 bust_spinlocks(1); |
145 printk(KERN_ALERT 146 "Unable to handle kernel %s at virtual address %08lx\n", 147 (addr < PAGE_SIZE) ? "NULL pointer dereference" : 148 "paging request", addr); | 145 pr_alert("Unable to handle kernel %s at virtual address %08lx\n", 146 (addr < PAGE_SIZE) ? "NULL pointer dereference" : 147 "paging request", addr); |
149 150 show_pte(mm, addr); 151 die("Oops", regs, fsr); 152 bust_spinlocks(0); 153 do_exit(SIGKILL); 154} 155 156/* --- 389 unchanged lines hidden (view full) --- 546do_DataAbort(unsigned long addr, unsigned int fsr, struct pt_regs *regs) 547{ 548 const struct fsr_info *inf = fsr_info + fsr_fs(fsr); 549 struct siginfo info; 550 551 if (!inf->fn(addr, fsr & ~FSR_LNX_PF, regs)) 552 return; 553 | 148 149 show_pte(mm, addr); 150 die("Oops", regs, fsr); 151 bust_spinlocks(0); 152 do_exit(SIGKILL); 153} 154 155/* --- 389 unchanged lines hidden (view full) --- 545do_DataAbort(unsigned long addr, unsigned int fsr, struct pt_regs *regs) 546{ 547 const struct fsr_info *inf = fsr_info + fsr_fs(fsr); 548 struct siginfo info; 549 550 if (!inf->fn(addr, fsr & ~FSR_LNX_PF, regs)) 551 return; 552 |
554 printk(KERN_ALERT "Unhandled fault: %s (0x%03x) at 0x%08lx\n", | 553 pr_alert("Unhandled fault: %s (0x%03x) at 0x%08lx\n", |
555 inf->name, fsr, addr); 556 557 info.si_signo = inf->sig; 558 info.si_errno = 0; 559 info.si_code = inf->code; 560 info.si_addr = (void __user *)addr; 561 arm_notify_die("", regs, &info, fsr, 0); 562} --- 15 unchanged lines hidden (view full) --- 578do_PrefetchAbort(unsigned long addr, unsigned int ifsr, struct pt_regs *regs) 579{ 580 const struct fsr_info *inf = ifsr_info + fsr_fs(ifsr); 581 struct siginfo info; 582 583 if (!inf->fn(addr, ifsr | FSR_LNX_PF, regs)) 584 return; 585 | 554 inf->name, fsr, addr); 555 556 info.si_signo = inf->sig; 557 info.si_errno = 0; 558 info.si_code = inf->code; 559 info.si_addr = (void __user *)addr; 560 arm_notify_die("", regs, &info, fsr, 0); 561} --- 15 unchanged lines hidden (view full) --- 577do_PrefetchAbort(unsigned long addr, unsigned int ifsr, struct pt_regs *regs) 578{ 579 const struct fsr_info *inf = ifsr_info + fsr_fs(ifsr); 580 struct siginfo info; 581 582 if (!inf->fn(addr, ifsr | FSR_LNX_PF, regs)) 583 return; 584 |
586 printk(KERN_ALERT "Unhandled prefetch abort: %s (0x%03x) at 0x%08lx\n", | 585 pr_alert("Unhandled prefetch abort: %s (0x%03x) at 0x%08lx\n", |
587 inf->name, ifsr, addr); 588 589 info.si_signo = inf->sig; 590 info.si_errno = 0; 591 info.si_code = inf->code; 592 info.si_addr = (void __user *)addr; 593 arm_notify_die("", regs, &info, ifsr, 0); 594} --- 25 unchanged lines hidden --- | 586 inf->name, ifsr, addr); 587 588 info.si_signo = inf->sig; 589 info.si_errno = 0; 590 info.si_code = inf->code; 591 info.si_addr = (void __user *)addr; 592 arm_notify_die("", regs, &info, ifsr, 0); 593} --- 25 unchanged lines hidden --- |