Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 7008097 in mainline


Ignore:
Timestamp:
2010-06-28T21:42:28Z (11 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
master
Children:
22a28a69
Parents:
5b8016d
Message:

Switch sparc64 to use the unified panic architecture.

Location:
kernel/arch/sparc64
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/sparc64/include/interrupt.h

    r5b8016d r7008097  
    7676}
    7777
     78extern void decode_istate(istate_t *);
     79
    7880#endif
    7981
  • kernel/arch/sparc64/src/mm/sun4u/tlb.c

    r5b8016d r7008097  
    2727 */
    2828
    29 /** @addtogroup sparc64mm       
     29/** @addtogroup sparc64mm
    3030 * @{
    3131 */
     
    5858static void dtlb_pte_copy(pte_t *, size_t, bool);
    5959static void itlb_pte_copy(pte_t *, size_t);
    60 static void do_fast_instruction_access_mmu_miss_fault(istate_t *, const char *);
     60static void do_fast_instruction_access_mmu_miss_fault(istate_t *, uintptr_t,
     61    const char *);
    6162static void do_fast_data_access_mmu_miss_fault(istate_t *, tlb_tag_access_reg_t,
    6263    const char *);
     
    222223                 * Forward the page fault to the address space page fault
    223224                 * handler.
    224                  */             
     225                 */
    225226                page_table_unlock(AS, true);
    226227                if (as_page_fault(page_16k, PF_ACCESS_EXEC, istate) ==
    227228                    AS_PF_FAULT) {
    228229                        do_fast_instruction_access_mmu_miss_fault(istate,
    229                             __func__);
     230                            istate->tpc, __func__);
    230231                }
    231232        }
     
    258259                        /* NULL access in kernel */
    259260                        do_fast_data_access_mmu_miss_fault(istate, tag,
    260                             __func__);
     261                            "Dereferencing NULL pointer");
    261262                } else if (page_8k >= end_of_identity) {
    262263                        /*
     
    438439
    439440void do_fast_instruction_access_mmu_miss_fault(istate_t *istate,
    440     const char *str)
    441 {
    442         fault_if_from_uspace(istate, "%s.", str);
    443         dump_istate(istate);
    444         panic("%s.", str);
     441    uintptr_t va, const char *str)
     442{
     443        fault_if_from_uspace(istate, "%s, Address=%p.", str, va);
     444        panic_memtrap(istate, PF_ACCESS_EXEC, va, "%s.", str);
    445445}
    446446
     
    451451
    452452        va = tag.vpn << MMU_PAGE_WIDTH;
    453         if (tag.context) {
    454                 fault_if_from_uspace(istate, "%s, Page=%p (ASID=%d).", str, va,
    455                     tag.context);
    456         }
    457         dump_istate(istate);
    458         printf("Faulting page: %p, ASID=%d.\n", va, tag.context);
    459         panic("%s.", str);
     453        fault_if_from_uspace(istate, "%s, Page=%p (ASID=%d).", str, va,
     454            tag.context);
     455        panic_memtrap(istate, PF_ACCESS_READ, va, "%s.", str);
    460456}
    461457
     
    466462
    467463        va = tag.vpn << MMU_PAGE_WIDTH;
    468 
    469         if (tag.context) {
    470                 fault_if_from_uspace(istate, "%s, Page=%p (ASID=%d).", str, va,
    471                     tag.context);
    472         }
    473         printf("Faulting page: %p, ASID=%d\n", va, tag.context);
    474         dump_istate(istate);
    475         panic("%s.", str);
     464        fault_if_from_uspace(istate, "%s, Page=%p (ASID=%d).", str, va,
     465            tag.context);
     466        panic_memtrap(istate, PF_ACCESS_WRITE, va, "%s.", str);
    476467}
    477468
  • kernel/arch/sparc64/src/mm/sun4v/tlb.c

    r5b8016d r7008097  
    2828 */
    2929
    30 /** @addtogroup sparc64mm       
     30/** @addtogroup sparc64mm
    3131 * @{
    3232 */
     
    6262static void itlb_pte_copy(pte_t *);
    6363static void dtlb_pte_copy(pte_t *, bool);
    64 static void do_fast_instruction_access_mmu_miss_fault(istate_t *, const char *);
     64static void do_fast_instruction_access_mmu_miss_fault(istate_t *, uintptr_t,
     65    const char *);
    6566static void do_fast_data_access_mmu_miss_fault(istate_t *, uint64_t,
    6667    const char *);
     
    235236                 * Forward the page fault to the address space page fault
    236237                 * handler.
    237                  */             
     238                 */
    238239                page_table_unlock(AS, true);
    239240                if (as_page_fault(va, PF_ACCESS_EXEC, istate) == AS_PF_FAULT) {
    240241                        do_fast_instruction_access_mmu_miss_fault(istate,
    241                             __func__);
     242                            istate->tpc, __func__);
    242243                }
    243244        }
     
    354355}
    355356
    356 void do_fast_instruction_access_mmu_miss_fault(istate_t *istate,
     357void do_fast_instruction_access_mmu_miss_fault(istate_t *istate, uintptr_t va,
    357358    const char *str)
    358359{
    359         fault_if_from_uspace(istate, "%s.", str);
    360         dump_istate(istate);
    361         panic("%s.", str);
     360        fault_if_from_uspace(istate, "%s, Address=%p.", str, va);
     361        panic_memtrap(istate, PF_ACCESS_EXEC, va, "%s.", str);
    362362}
    363363
     
    365365    uint64_t page_and_ctx, const char *str)
    366366{
    367         if (DMISS_CONTEXT(page_and_ctx)) {
    368                 fault_if_from_uspace(istate, "%s, Page=%p (ASID=%d)\n", str, DMISS_ADDRESS(page_and_ctx),
    369                     DMISS_CONTEXT(page_and_ctx));
    370         }
    371         dump_istate(istate);
    372         printf("Faulting page: %p, ASID=%d\n", DMISS_ADDRESS(page_and_ctx), DMISS_CONTEXT(page_and_ctx));
    373         panic("%s\n", str);
     367        fault_if_from_uspace(istate, "%s, Page=%p (ASID=%d).", str,
     368            DMISS_ADDRESS(page_and_ctx), DMISS_CONTEXT(page_and_ctx));
     369        panic_memtrap(istate, PF_ACCESS_READ, DMISS_ADDRESS(page_and_ctx),
     370            "%s.");
    374371}
    375372
     
    377374    uint64_t page_and_ctx, const char *str)
    378375{
    379         if (DMISS_CONTEXT(page_and_ctx)) {
    380                 fault_if_from_uspace(istate, "%s, Page=%p (ASID=%d)\n", str, DMISS_ADDRESS(page_and_ctx),
    381                     DMISS_CONTEXT(page_and_ctx));
    382         }
    383         printf("Faulting page: %p, ASID=%d\n", DMISS_ADDRESS(page_and_ctx), DMISS_CONTEXT(page_and_ctx));
    384         dump_istate(istate);
    385         panic("%s\n", str);
     376        fault_if_from_uspace(istate, "%s, Page=%p (ASID=%d).", str,
     377            DMISS_ADDRESS(page_and_ctx), DMISS_CONTEXT(page_and_ctx));
     378        panic_memtrap(istate, PF_ACCESS_WRITE, DMISS_ADDRESS(page_and_ctx),
     379            "%s.");
    386380}
    387381
  • kernel/arch/sparc64/src/trap/exception.c

    r5b8016d r7008097  
    4444#include <symtab.h>
    4545
    46 void dump_istate(istate_t *istate)
     46void decode_istate(istate_t *istate)
    4747{
    4848        const char *tpcs = symtab_fmt_name_lookup(istate->tpc);
     
    5858{
    5959        fault_if_from_uspace(istate, "%s.", __func__);
    60         dump_istate(istate);
    61         panic("%s.", __func__);
     60        panic_badtrap(istate, n, "%s.", __func__);
    6261}
    6362
     
    6665{
    6766        fault_if_from_uspace(istate, "%s.", __func__);
    68         dump_istate(istate);
    69         panic("%s.", __func__);
     67        panic_badtrap(istate, n, "%s.", __func__);
    7068}
    7169
     
    7472{
    7573        fault_if_from_uspace(istate, "%s.", __func__);
    76         dump_istate(istate);
    77         panic("%s.", __func__);
     74        panic_badtrap(istate, n, "%s.", __func__);
    7875}
    7976
     
    8279{
    8380        fault_if_from_uspace(istate, "%s.", __func__);
    84         dump_istate(istate);
    85         panic("%s.", __func__);
     81        panic_badtrap(istate, n, "%s.", __func__);
    8682}
    8783
     
    9086{
    9187        fault_if_from_uspace(istate, "%s.", __func__);
    92         dump_istate(istate);
    93         panic("%s.", __func__);
     88        panic_badtrap(istate, n, "%s.", __func__);
    9489}
    9590
     
    9893{
    9994        fault_if_from_uspace(istate, "%s.", __func__);
    100         dump_istate(istate);
    101         panic("%s.", __func__);
     95        panic_badtrap(istate, n, "%s.", __func__);
    10296}
    10397
     
    118112#else
    119113        fault_if_from_uspace(istate, "%s.", __func__);
    120         dump_istate(istate);
    121         panic("%s.", __func__);
     114        panic_badtrap(istate, n, "%s.", __func__);
    122115#endif
    123116}
     
    127120{
    128121        fault_if_from_uspace(istate, "%s.", __func__);
    129         dump_istate(istate);
    130         panic("%s.", __func__);
     122        panic_badtrap(istate, n, "%s.", __func__);
    131123}
    132124
     
    135127{
    136128        fault_if_from_uspace(istate, "%s.", __func__);
    137         dump_istate(istate);
    138         panic("%s.", __func__);
     129        panic_badtrap(istate, n, "%s.", __func__);
    139130}
    140131
     
    143134{
    144135        fault_if_from_uspace(istate, "%s.", __func__);
    145         dump_istate(istate);
    146         panic("%s.", __func__);
     136        panic_badtrap(istate, n, "%s.", __func__);
    147137}
    148138
     
    151141{
    152142        fault_if_from_uspace(istate, "%s.", __func__);
    153         dump_istate(istate);
    154         panic("%s.", __func__);
     143        panic_badtrap(istate, n, "%s.", __func__);
    155144}
    156145
     
    159148{
    160149        fault_if_from_uspace(istate, "%s.", __func__);
    161         dump_istate(istate);
    162         describe_dmmu_fault();
    163         panic("%s.", __func__);
     150        panic_badtrap(istate, n, "%s.", __func__);
    164151}
    165152
     
    168155{
    169156        fault_if_from_uspace(istate, "%s.", __func__);
    170         dump_istate(istate);
    171         panic("%s.", __func__);
     157        panic_badtrap(istate, n, "%s.", __func__);
    172158}
    173159
     
    176162{
    177163        fault_if_from_uspace(istate, "%s.", __func__);
    178         dump_istate(istate);
    179         panic("%s.", __func__);
     164        panic_badtrap(istate, n, "%s.", __func__);
    180165}
    181166
     
    184169{
    185170        fault_if_from_uspace(istate, "%s.", __func__);
    186         dump_istate(istate);
    187         panic("%s.", __func__);
     171        panic_badtrap(istate, n, "%s.", __func__);
    188172}
    189173
     
    192176{
    193177        fault_if_from_uspace(istate, "%s.", __func__);
    194         dump_istate(istate);
    195         panic("%s.", __func__);
     178        panic_badtrap(istate, n, "%s.", __func__);
    196179}
    197180
     
    200183{
    201184        fault_if_from_uspace(istate, "%s.", __func__);
    202         dump_istate(istate);
    203         panic("%s.", __func__);
     185        panic_badtrap(istate, n, "%s.", __func__);
    204186}
    205187
     
    208190{
    209191        fault_if_from_uspace(istate, "%s.", __func__);
    210         dump_istate(istate);
    211         panic("%s.", __func__);
     192        panic_badtrap(istate, n, "%s.", __func__);
    212193}
    213194
     
    216197{
    217198        fault_if_from_uspace(istate, "%s.", __func__);
    218         dump_istate(istate);
    219         panic("%s.", __func__);
     199        panic_badtrap(istate, n, "%s.", __func__);
    220200}
    221201
Note: See TracChangeset for help on using the changeset viewer.