- File:
-
- 1 edited
-
libcfa/src/concurrency/kernel_private.hfa (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/kernel_private.hfa
rf558b5f rb808625 16 16 #pragma once 17 17 18 #if !defined(__cforall_thread__)19 #error kernel_private.hfa should only be included in libcfathread source20 #endif21 22 18 #include "kernel.hfa" 23 19 #include "thread.hfa" … … 26 22 #include "stats.hfa" 27 23 28 extern "C" {29 #if defined(CFA_HAVE_LINUX_LIBRSEQ)30 #include <rseq/rseq.h>31 #elif defined(CFA_HAVE_LINUX_RSEQ_H)32 #include <linux/rseq.h>33 #else34 #ifndef _GNU_SOURCE35 #error kernel_private requires gnu_source36 #endif37 #include <sched.h>38 #endif39 }40 41 24 //----------------------------------------------------------------------------- 42 25 // Scheduler 26 27 43 28 extern "C" { 44 29 void disable_interrupts() OPTIONAL_THREAD; … … 54 39 55 40 //----------------------------------------------------------------------------- 56 // Hardware57 58 #if defined(CFA_HAVE_LINUX_LIBRSEQ)59 // No data needed60 #elif defined(CFA_HAVE_LINUX_RSEQ_H)61 extern "Cforall" {62 extern __attribute__((aligned(128))) thread_local volatile struct rseq __cfaabi_rseq;63 }64 #else65 // No data needed66 #endif67 68 static inline int __kernel_getcpu() {69 /* paranoid */ verify( ! __preemption_enabled() );70 #if defined(CFA_HAVE_LINUX_LIBRSEQ)71 return rseq_current_cpu();72 #elif defined(CFA_HAVE_LINUX_RSEQ_H)73 int r = __cfaabi_rseq.cpu_id;74 /* paranoid */ verify( r >= 0 );75 return r;76 #else77 return sched_getcpu();78 #endif79 }80 81 //-----------------------------------------------------------------------------82 41 // Processor 83 42 void main(processorCtx_t *); … … 85 44 void * __create_pthread( pthread_t *, void * (*)(void *), void * ); 86 45 void __destroy_pthread( pthread_t pthread, void * stack, void ** retval ); 46 47 87 48 88 49 extern cluster * mainCluster;
Note:
See TracChangeset
for help on using the changeset viewer.