Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/concurrency/kernel/private.hfa

    ra8667ab ra757ba1  
    1010// Created On       : Mon Feb 13 12:27:26 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Mar  2 16:04:46 2023
    13 // Update Count     : 11
     12// Last Modified On : Wed Aug 12 08:21:33 2020
     13// Update Count     : 9
    1414//
    1515
     
    2929
    3030extern "C" {
     31#if   defined(CFA_HAVE_LINUX_LIBRSEQ)
     32        #include <rseq/rseq.h>
     33#elif defined(CFA_HAVE_LINUX_RSEQ_H)
     34        #include <linux/rseq.h>
     35#else
     36        #ifndef _GNU_SOURCE
     37        #error kernel/private requires gnu_source
     38        #endif
    3139        #include <sched.h>
     40#endif
    3241}
    3342
     
    101110// Hardware
    102111
     112#if   defined(CFA_HAVE_LINUX_LIBRSEQ)
     113        // No data needed
     114#elif defined(CFA_HAVE_LINUX_RSEQ_H)
     115        extern "Cforall" {
     116                extern __attribute__((aligned(64))) __thread volatile struct rseq __cfaabi_rseq;
     117        }
     118#else
     119        // No data needed
     120#endif
     121
    103122static inline int __kernel_getcpu() {
    104123        /* paranoid */ verify( ! __preemption_enabled() );
     124#if   defined(CFA_HAVE_LINUX_LIBRSEQ)
     125        return rseq_current_cpu();
     126#elif defined(CFA_HAVE_LINUX_RSEQ_H)
     127        int r = __cfaabi_rseq.cpu_id;
     128        /* paranoid */ verify( r >= 0 );
     129        return r;
     130#else
    105131        return sched_getcpu();
     132#endif
    106133}
    107134
Note: See TracChangeset for help on using the changeset viewer.