Changeset eeaf667 in mainline


Ignore:
Timestamp:
2008-06-14T11:45:40Z (16 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c7511ec
Parents:
d5087aa
Message:

Maintain cache coherence after arm32 installs exception handlers.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/arm32/src/exception.c

    rd5087aa reeaf667  
    4141#include <arch/machine.h>
    4242#include <arch/mm/page_fault.h>
     43#include <arch/barrier.h>
    4344#include <print.h>
    4445#include <syscall/syscall.h>
     
    210211 *  Addresses of handlers are stored in memory following exception vectors.
    211212 */
    212 static void install_handler (unsigned handler_addr, unsigned* vector)
     213static void install_handler(unsigned handler_addr, unsigned *vector)
    213214{
    214215        /* relative address (related to exc. vector) of the word
     
    220221        /* make it LDR instruction and store at exception vector */
    221222        *vector = handler_address_ptr | LDR_OPCODE;
     223        smc_coherence(*vector);
    222224       
    223225        /* store handler's address */
     
    227229
    228230/** Low-level Reset Exception handler. */
    229 static void reset_exception_entry()
     231static void reset_exception_entry(void)
    230232{
    231233        PROCESS_EXCEPTION(EXC_RESET);
     
    233235
    234236/** Low-level Software Interrupt Exception handler. */
    235 static void swi_exception_entry()
     237static void swi_exception_entry(void)
    236238{
    237239        PROCESS_EXCEPTION(EXC_SWI);
     
    239241
    240242/** Low-level Undefined Instruction Exception handler. */
    241 static void undef_instr_exception_entry()
     243static void undef_instr_exception_entry(void)
    242244{
    243245        PROCESS_EXCEPTION(EXC_UNDEF_INSTR);
     
    245247
    246248/** Low-level Fast Interrupt Exception handler. */
    247 static void fiq_exception_entry()
     249static void fiq_exception_entry(void)
    248250{
    249251        PROCESS_EXCEPTION(EXC_FIQ);
     
    251253
    252254/** Low-level Prefetch Abort Exception handler. */
    253 static void prefetch_abort_exception_entry()
     255static void prefetch_abort_exception_entry(void)
    254256{
    255257        asm("sub lr, lr, #4");
     
    258260
    259261/** Low-level Data Abort Exception handler. */
    260 static void data_abort_exception_entry()
     262static void data_abort_exception_entry(void)
    261263{
    262264        asm("sub lr, lr, #8");
     
    270272 * would overwrite (and thus spoil) stack pointer.
    271273 */
    272 static void irq_exception_entry()
     274static void irq_exception_entry(void)
    273275{
    274276        asm("sub lr, lr, #4");
Note: See TracChangeset for help on using the changeset viewer.