Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ppc32/include/barrier.h

    rd92bf462 r7b187ef  
    2727 */
    2828
    29 /** @addtogroup ppc32
     29/** @addtogroup ppc32   
    3030 * @{
    3131 */
     
    3636#define KERN_ppc32_BARRIER_H_
    3737
    38 #define CS_ENTER_BARRIER()  asm volatile ("" ::: "memory")
    39 #define CS_LEAVE_BARRIER()  asm volatile ("" ::: "memory")
     38#define CS_ENTER_BARRIER()      asm volatile ("" ::: "memory")
     39#define CS_LEAVE_BARRIER()      asm volatile ("" ::: "memory")
    4040
    41 #define memory_barrier()  asm volatile ("sync" ::: "memory")
    42 #define read_barrier()    asm volatile ("sync" ::: "memory")
    43 #define write_barrier()   asm volatile ("eieio" ::: "memory")
    44 
    45 #define instruction_barrier() \
    46         asm volatile ( \
    47                 "sync\n" \
    48                 "isync\n" \
    49         )
    50 
    51 #define COHERENCE_INVAL_MIN  4
     41#define memory_barrier() asm volatile ("sync" ::: "memory")
     42#define read_barrier() asm volatile ("sync" ::: "memory")
     43#define write_barrier() asm volatile ("eieio" ::: "memory")
    5244
    5345/*
     
    6153{
    6254        asm volatile (
    63                 "dcbst 0, %[addr]\n"
     55                "dcbst 0, %0\n"
    6456                "sync\n"
    65                 "icbi 0, %[addr]\n"
     57                "icbi 0, %0\n"
    6658                "sync\n"
    6759                "isync\n"
    68                 :: [addr] "r" (addr)
     60                :: "r" (addr)
    6961        );
    7062}
    7163
    72 static inline void smc_coherence_block(void *addr, unsigned int len)
     64#define COHERENCE_INVAL_MIN     4
     65
     66static inline void smc_coherence_block(void *addr, unsigned long len)
    7367{
    74         unsigned int i;
    75        
    76         for (i = 0; i < len; i += COHERENCE_INVAL_MIN)
    77                 asm volatile (
    78                         "dcbst 0, %[addr]\n"
    79                         :: [addr] "r" (addr + i)
    80                 );
    81        
    82         memory_barrier();
    83        
    84         for (i = 0; i < len; i += COHERENCE_INVAL_MIN)
    85                 asm volatile (
    86                         "icbi 0, %[addr]\n"
    87                         :: [addr] "r" (addr + i)
    88                 );
    89        
    90         instruction_barrier();
     68        unsigned long i;
     69
     70        for (i = 0; i < len; i += COHERENCE_INVAL_MIN) {
     71                asm volatile ("dcbst 0, %0\n" :: "r" (addr + i));
     72        }
     73
     74        asm volatile ("sync");
     75
     76        for (i = 0; i < len; i += COHERENCE_INVAL_MIN) {
     77                asm volatile ("icbi 0, %0\n" :: "r" (addr + i));
     78        }
     79
     80        asm volatile (
     81                "sync\n"
     82                "isync\n"
     83        );
    9184}
    9285
Note: See TracChangeset for help on using the changeset viewer.