Changeset 7328ff4 in mainline for kernel/arch/ia64


Ignore:
Timestamp:
2018-09-06T18:18:52Z (7 years ago)
Author:
Jiří Zárevúcky <jiri.zarevucky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ffa73c6
Parents:
d51cca8
git-author:
Jiří Zárevúcky <jiri.zarevucky@…> (2018-08-13 01:29:17)
git-committer:
Jiří Zárevúcky <jiri.zarevucky@…> (2018-09-06 18:18:52)
Message:

Use builtin memory fences for kernel barriers, and convert smp_coherence() into a regular function

Location:
kernel/arch/ia64
Files:
4 edited
1 moved

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia64/Makefile.inc

    rd51cca8 r7328ff4  
    5858        arch/$(KARCH)/src/proc/scheduler.c \
    5959        arch/$(KARCH)/src/ddi/ddi.c \
     60        arch/$(KARCH)/src/smc.c \
    6061        arch/$(KARCH)/src/smp/smp.c \
    6162        arch/$(KARCH)/src/smp/smp_call.c \
  • kernel/arch/ia64/include/arch/barrier.h

    rd51cca8 r7328ff4  
    3636#define KERN_ia64_BARRIER_H_
    3737
    38 /*
    39  * TODO: Implement true IA-64 memory barriers for macros below.
    40  */
    41 #define CS_ENTER_BARRIER()      memory_barrier()
    42 #define CS_LEAVE_BARRIER()      memory_barrier()
    43 
    44 #define memory_barrier()        asm volatile ("mf\n" ::: "memory")
    45 #define read_barrier()          memory_barrier()
    46 #define write_barrier()         memory_barrier()
     38#define mf()    asm volatile ("mf\n" ::: "memory")
    4739
    4840#define srlz_i()                \
     
    5648        asm volatile (";; sync.i\n" ::: "memory")
    5749
    58 #ifdef KERNEL
    59 
    60 #define FC_INVAL_MIN            32
    61 #define smc_coherence(a, l)             \
    62 {                                               \
    63         unsigned long i;                        \
    64         for (i = 0; i < (l); i += FC_INVAL_MIN) \
    65                 fc_i((void *)(a) + i);          \
    66         sync_i();                               \
    67         srlz_i();                               \
    68 }
    69 
    70 #endif  /* KERNEL */
    71 
    7250#endif
    7351
  • kernel/arch/ia64/include/arch/cpu.h

    rd51cca8 r7328ff4  
    3838#include <arch/register.h>
    3939#include <arch/asm.h>
     40#include <arch/barrier.h>
    4041#include <arch/bootinfo.h>
    4142#include <stdint.h>
  • kernel/arch/ia64/src/mm/vhpt.c

    rd51cca8 r7328ff4  
    3434
    3535#include <mem.h>
     36#include <arch/barrier.h>
    3637#include <arch/mm/vhpt.h>
    3738#include <mm/frame.h>
  • kernel/arch/ia64/src/smc.c

    rd51cca8 r7328ff4  
    2727 */
    2828
    29 /** @addtogroup abs32le
    30  * @{
    31  */
    32 /** @file
    33  */
     29#include <barrier.h>
     30#include <arch/barrier.h>
    3431
    35 #ifndef KERN_abs32le_BARRIER_H_
    36 #define KERN_abs32le_BARRIER_H_
     32#define FC_INVAL_MIN            32
    3733
    38 /*
    39  * Provisions are made to prevent compiler from reordering instructions itself.
    40  */
     34void smc_coherence(void *a, size_t l)
     35{
     36        unsigned long i;
     37        for (i = 0; i < (l); i += FC_INVAL_MIN)
     38                fc_i(a + i);
     39        sync_i();
     40        srlz_i();
     41}
    4142
    42 #define CS_ENTER_BARRIER()
    43 #define CS_LEAVE_BARRIER()
    44 
    45 #define memory_barrier()
    46 #define read_barrier()
    47 #define write_barrier()
    48 
    49 #ifdef KERNEL
    50 
    51 #define smc_coherence(addr, size)
    52 
    53 #endif  /* KERNEL*/
    54 
    55 #endif
    56 
    57 /** @}
    58  */
Note: See TracChangeset for help on using the changeset viewer.