Changeset 826c203 in mainline


Ignore:
Timestamp:
2009-01-30T16:58:35Z (15 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ee79df74
Parents:
12bf33a
Message:

avoid nasty race condition during page fault handling

Files:
5 edited

Legend:

Unmodified
Added
Removed
  • boot/arch/ppc32/loader/Makefile

    r12bf33a r826c203  
    8484        $(USPACEDIR)/srv/devmap/devmap \
    8585        $(USPACEDIR)/srv/rd/rd \
    86         $(USPACEDIR)/srv/vfs/vfs 
     86        $(USPACEDIR)/srv/vfs/vfs
    8787ifeq ($(RDFMT),tmpfs)
    8888        COMPONENTS += $(USPACEDIR)/srv/fs/tmpfs/tmpfs
  • kernel/arch/ppc32/include/exception.h

    r12bf33a r826c203  
    7676        uint32_t ctr;
    7777        uint32_t xer;
     78        uint32_t dar;
    7879        uint32_t r12;
    7980        uint32_t sp;
  • kernel/arch/ppc32/src/asm.S

    r12bf33a r826c203  
    132132        mtxer r12
    133133       
    134         lwz r12, 152(sp)
    135         lwz sp, 156(sp)
     134        lwz r12, 156(sp)
     135        lwz sp, 160(sp)
    136136       
    137137        rfi
     
    198198        mtxer r12
    199199       
    200         lwz r12, 152(sp)
    201         lwz sp, 156(sp)
     200        lwz r12, 156(sp)
     201        lwz sp, 160(sp)
    202202
    203203        rfi
  • kernel/arch/ppc32/src/exception.S

    r12bf33a r826c203  
    6161        2:
    6262       
    63         subi sp, sp, 160
     63        subi sp, sp, 164
    6464        stw r0, 8(sp)
    6565        stw r2, 12(sp)
     
    110110        stw r12, 148(sp)
    111111       
     112        mfdar r12
     113        stw r12, 152(sp)
     114       
    112115        mfsprg1 r12
    113         stw r12, 152(sp)
     116        stw r12, 156(sp)
    114117       
    115118        mfsprg2 r12
    116         stw r12, 156(sp)
     119        stw r12, 160(sp)
    117120.endm
    118121
     
    138141        CONTEXT_STORE
    139142       
     143        b data_storage
     144
     145.org 0x400
     146.global exc_instruction_storage
     147exc_instruction_storage:
     148        CONTEXT_STORE
     149       
     150        b instruction_storage
     151
     152.org 0x500
     153.global exc_external
     154exc_external:
     155        CONTEXT_STORE
     156       
     157        li r3, 4
     158        b jump_to_kernel
     159
     160.org 0x600
     161.global exc_alignment
     162exc_alignment:
     163        CONTEXT_STORE
     164       
     165        li r3, 5
     166        b jump_to_kernel
     167
     168.org 0x700
     169.global exc_program
     170exc_program:
     171        CONTEXT_STORE
     172       
     173        li r3, 6
     174        b jump_to_kernel
     175
     176.org 0x800
     177.global exc_fp_unavailable
     178exc_fp_unavailable:
     179        CONTEXT_STORE
     180       
     181        li r3, 7
     182        b jump_to_kernel
     183
     184.org 0x900
     185.global exc_decrementer
     186exc_decrementer:
     187        CONTEXT_STORE
     188       
     189        li r3, 8
     190        b jump_to_kernel
     191
     192.org 0xa00
     193.global exc_reserved0
     194exc_reserved0:
     195        CONTEXT_STORE
     196       
     197        li r3, 9
     198        b jump_to_kernel
     199
     200.org 0xb00
     201.global exc_reserved1
     202exc_reserved1:
     203        CONTEXT_STORE
     204       
     205        li r3, 10
     206        b jump_to_kernel
     207
     208.org 0xc00
     209.global exc_syscall
     210exc_syscall:
     211        CONTEXT_STORE   
     212       
     213        b jump_to_kernel_syscall
     214
     215.org 0xd00
     216.global exc_trace
     217exc_trace:
     218        CONTEXT_STORE
     219       
     220        li r3, 12
     221        b jump_to_kernel
     222
     223.org 0x4000
     224data_storage:
    140225        li r3, 2
    141226        mr r4, sp
     
    149234        b jump_to_kernel
    150235
    151 .org 0x400
    152 .global exc_instruction_storage
    153 exc_instruction_storage:
    154         CONTEXT_STORE
    155        
     236instruction_storage:
    156237        li r3, 3
    157238        mr r4, sp
     
    161242        cmpwi r3, 0
    162243        bne iret_real
    163 
     244       
    164245        li r3, 3
    165246        b jump_to_kernel
    166247
    167 .org 0x500
    168 .global exc_external
    169 exc_external:
    170         CONTEXT_STORE
    171        
    172         li r3, 4
    173         b jump_to_kernel
    174 
    175 .org 0x600
    176 .global exc_alignment
    177 exc_alignment:
    178         CONTEXT_STORE
    179        
    180         li r3, 5
    181         b jump_to_kernel
    182 
    183 .org 0x700
    184 .global exc_program
    185 exc_program:
    186         CONTEXT_STORE
    187        
    188         li r3, 6
    189         b jump_to_kernel
    190 
    191 .org 0x800
    192 .global exc_fp_unavailable
    193 exc_fp_unavailable:
    194         CONTEXT_STORE
    195        
    196         li r3, 7
    197         b jump_to_kernel
    198 
    199 .org 0x900
    200 .global exc_decrementer
    201 exc_decrementer:
    202         CONTEXT_STORE
    203        
    204         li r3, 8
    205         b jump_to_kernel
    206 
    207 .org 0xa00
    208 .global exc_reserved0
    209 exc_reserved0:
    210         CONTEXT_STORE
    211        
    212         li r3, 9
    213         b jump_to_kernel
    214 
    215 .org 0xb00
    216 .global exc_reserved1
    217 exc_reserved1:
    218         CONTEXT_STORE
    219        
    220         li r3, 10
    221         b jump_to_kernel
    222 
    223 .org 0xc00
    224 .global exc_syscall
    225 exc_syscall:
    226         CONTEXT_STORE   
    227        
    228         b jump_to_kernel_syscall
    229 
    230 .org 0xd00
    231 .global exc_trace
    232 exc_trace:
    233         CONTEXT_STORE
    234        
    235         li r3, 12
    236         b jump_to_kernel
    237 
    238 .org 0x4000
    239248jump_to_kernel:
    240249        lis r12, iret@ha
     
    323332        mtxer r12
    324333       
    325         lwz r12, 152(sp)
    326         lwz sp, 156(sp)
     334        lwz r12, 156(sp)
     335        lwz sp, 160(sp)
    327336       
    328337        rfi
  • kernel/arch/ppc32/src/mm/tlb.c

    r12bf33a r826c203  
    112112        char *sym2 = "";
    113113
    114         char *s = get_symtab_entry(istate->pc);
    115         if (s)
    116                 symbol = s;
    117         s = get_symtab_entry(istate->lr);
    118         if (s)
    119                 sym2 = s;
     114        char *str = get_symtab_entry(istate->pc);
     115        if (str)
     116                symbol = str;
     117        str = get_symtab_entry(istate->lr);
     118        if (str)
     119                sym2 = str;
    120120
    121121        fault_if_from_uspace(istate,
    122             "%p: PHT Refill Exception at %p (%s<-%s).", badvaddr,
    123             istate->pc, symbol, sym2);
     122            "PHT Refill Exception on %p.", badvaddr);
    124123        panic("%p: PHT Refill Exception at %p (%s<-%s).", badvaddr,
    125124            istate->pc, symbol, sym2);
     
    292291        }
    293292       
    294         if (n == VECTOR_DATA_STORAGE) {
    295                 asm volatile (
    296                         "mfdar %0\n"
    297                         : "=r" (badvaddr)
    298                 );
    299         } else
     293        if (n == VECTOR_DATA_STORAGE)
     294                badvaddr = istate->dar;
     295        else
    300296                badvaddr = istate->pc;
    301297               
     
    343339        uintptr_t badvaddr;
    344340       
    345         if (n == VECTOR_DATA_STORAGE) {
    346                 asm volatile (
    347                         "mfdar %0\n"
    348                         : "=r" (badvaddr)
    349                 );
    350         } else
     341        if (n == VECTOR_DATA_STORAGE)
     342                badvaddr = istate->dar;
     343        else
    351344                badvaddr = istate->pc;
    352345       
Note: See TracChangeset for help on using the changeset viewer.