aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern B. Brandenburg <bbb@cs.unc.edu>2008-05-01 17:17:55 -0400
committerBjoern B. Brandenburg <bbb@cs.unc.edu>2008-05-01 17:17:55 -0400
commit8ab1c570cf529df981c7d8c27066bfa80f22fc0a (patch)
tree6daa8591dfd645ebc6e246ae6c60756807091e74
parent708b97b2900775f3651cdf9ab04b4f512b4705bd (diff)
isolate architecture dependent code
-rw-r--r--include/asm.h14
-rw-r--r--include/asm_i386.h8
-rw-r--r--include/asm_sparc.h21
-rw-r--r--src/kernel_iface.c6
4 files changed, 44 insertions, 5 deletions
diff --git a/include/asm.h b/include/asm.h
new file mode 100644
index 0000000..a58622e
--- /dev/null
+++ b/include/asm.h
@@ -0,0 +1,14 @@
1/* liblitmus platform dependent includes */
2
3#ifndef ASM_H
4#define ASM_H
5
6#ifdef __i386__
7#include "asm_i386.h"
8#endif
9
10#ifdef __sparc__
11#include "asm_sparc.h"
12#endif
13
14#endif
diff --git a/include/asm_i386.h b/include/asm_i386.h
new file mode 100644
index 0000000..51ba501
--- /dev/null
+++ b/include/asm_i386.h
@@ -0,0 +1,8 @@
1/* Intel ia32 assembly.
2 * Don't include directly, use asm.h instead.
3 */
4
5static inline void barrier(void)
6{
7 __asm__ __volatile__("sfence": : :"memory");
8}
diff --git a/include/asm_sparc.h b/include/asm_sparc.h
new file mode 100644
index 0000000..0e0ca78
--- /dev/null
+++ b/include/asm_sparc.h
@@ -0,0 +1,21 @@
1/* sparc64 assembly.
2 * Don't include directly, use asm.h instead.
3 */
4
5/* From Linux:
6 <<snip>>*/
7#define membar_safe(type) \
8do { __asm__ __volatile__("ba,pt %%xcc, 1f\n\t" \
9 " membar " type "\n" \
10 "1:\n" \
11 : : : "memory"); \
12} while (0)
13
14#define mb() \
15 membar_safe("#LoadLoad | #LoadStore | #StoreStore | #StoreLoad")
16/* <<snap>> */
17
18static inline void barrier(void)
19{
20 mb();
21}
diff --git a/src/kernel_iface.c b/src/kernel_iface.c
index 35c84b6..d29c652 100644
--- a/src/kernel_iface.c
+++ b/src/kernel_iface.c
@@ -2,6 +2,7 @@
2 2
3#include "litmus.h" 3#include "litmus.h"
4#include "internal.h" 4#include "internal.h"
5#include "asm.h"
5 6
6/* per real-time thread kernel <-> user space flags */ 7/* per real-time thread kernel <-> user space flags */
7 8
@@ -35,11 +36,6 @@ int init_kernel_iface(void)
35 return ret; 36 return ret;
36} 37}
37 38
38static inline void barrier(void)
39{
40 __asm__ __volatile__("sfence": : :"memory");
41}
42
43void enter_np(void) 39void enter_np(void)
44{ 40{
45 if (++np_flag.ctr == 1) 41 if (++np_flag.ctr == 1)