Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
xenomai
ipipe-arm
Commits
be281e30
Commit
be281e30
authored
Jul 05, 2018
by
Philippe Gerum
Browse files
ARM/atomic: ipipe: protect against domain preemption
parent
45352fbf
Changes
3
Hide whitespace changes
Inline
Side-by-side
arch/arm/include/asm/atomic.h
View file @
be281e30
...
...
@@ -169,9 +169,9 @@ static inline void atomic_##op(int i, atomic_t *v) \
{ \
unsigned long flags; \
\
raw
_local_irq_save(
flags
); \
flags = hard
_local_irq_save(); \
v->counter c_op i; \
raw
_local_irq_restore(flags); \
hard
_local_irq_restore(flags); \
} \
#define ATOMIC_OP_RETURN(op, c_op, asm_op) \
...
...
@@ -180,10 +180,10 @@ static inline int atomic_##op##_return(int i, atomic_t *v) \
unsigned long flags; \
int val; \
\
raw
_local_irq_save(
flags
); \
flags = hard
_local_irq_save(); \
v->counter c_op i; \
val = v->counter; \
raw
_local_irq_restore(flags); \
hard
_local_irq_restore(flags); \
\
return val; \
}
...
...
@@ -194,10 +194,10 @@ static inline int atomic_fetch_##op(int i, atomic_t *v) \
unsigned long flags; \
int val; \
\
raw
_local_irq_save(
flags
); \
flags = hard
_local_irq_save(); \
val = v->counter; \
v->counter c_op i; \
raw
_local_irq_restore(flags); \
hard
_local_irq_restore(flags); \
\
return val; \
}
...
...
@@ -207,11 +207,11 @@ static inline int atomic_cmpxchg(atomic_t *v, int old, int new)
int
ret
;
unsigned
long
flags
;
raw
_local_irq_save
(
flags
);
flags
=
hard
_local_irq_save
();
ret
=
v
->
counter
;
if
(
likely
(
ret
==
old
))
v
->
counter
=
new
;
raw
_local_irq_restore
(
flags
);
hard
_local_irq_restore
(
flags
);
return
ret
;
}
...
...
arch/arm/include/asm/bitops.h
View file @
be281e30
...
...
@@ -40,9 +40,9 @@ static inline void ____atomic_set_bit(unsigned int bit, volatile unsigned long *
p
+=
BIT_WORD
(
bit
);
raw
_local_irq_save
(
flags
);
flags
=
hard
_local_irq_save
();
*
p
|=
mask
;
raw
_local_irq_restore
(
flags
);
hard
_local_irq_restore
(
flags
);
}
static
inline
void
____atomic_clear_bit
(
unsigned
int
bit
,
volatile
unsigned
long
*
p
)
...
...
@@ -52,9 +52,9 @@ static inline void ____atomic_clear_bit(unsigned int bit, volatile unsigned long
p
+=
BIT_WORD
(
bit
);
raw
_local_irq_save
(
flags
);
flags
=
hard
_local_irq_save
();
*
p
&=
~
mask
;
raw
_local_irq_restore
(
flags
);
hard
_local_irq_restore
(
flags
);
}
static
inline
void
____atomic_change_bit
(
unsigned
int
bit
,
volatile
unsigned
long
*
p
)
...
...
@@ -64,9 +64,9 @@ static inline void ____atomic_change_bit(unsigned int bit, volatile unsigned lon
p
+=
BIT_WORD
(
bit
);
raw
_local_irq_save
(
flags
);
flags
=
hard
_local_irq_save
();
*
p
^=
mask
;
raw
_local_irq_restore
(
flags
);
hard
_local_irq_restore
(
flags
);
}
static
inline
int
...
...
@@ -78,10 +78,10 @@ ____atomic_test_and_set_bit(unsigned int bit, volatile unsigned long *p)
p
+=
BIT_WORD
(
bit
);
raw
_local_irq_save
(
flags
);
flags
=
hard
_local_irq_save
();
res
=
*
p
;
*
p
=
res
|
mask
;
raw
_local_irq_restore
(
flags
);
hard
_local_irq_restore
(
flags
);
return
(
res
&
mask
)
!=
0
;
}
...
...
@@ -95,10 +95,10 @@ ____atomic_test_and_clear_bit(unsigned int bit, volatile unsigned long *p)
p
+=
BIT_WORD
(
bit
);
raw
_local_irq_save
(
flags
);
flags
=
hard
_local_irq_save
();
res
=
*
p
;
*
p
=
res
&
~
mask
;
raw
_local_irq_restore
(
flags
);
hard
_local_irq_restore
(
flags
);
return
(
res
&
mask
)
!=
0
;
}
...
...
@@ -112,10 +112,10 @@ ____atomic_test_and_change_bit(unsigned int bit, volatile unsigned long *p)
p
+=
BIT_WORD
(
bit
);
raw
_local_irq_save
(
flags
);
flags
=
hard
_local_irq_save
();
res
=
*
p
;
*
p
=
res
^
mask
;
raw
_local_irq_restore
(
flags
);
hard
_local_irq_restore
(
flags
);
return
(
res
&
mask
)
!=
0
;
}
...
...
arch/arm/include/asm/cmpxchg.h
View file @
be281e30
...
...
@@ -77,17 +77,17 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size
#error SMP is not supported on this platform
#endif
case
1
:
raw
_local_irq_save
(
flags
);
flags
=
hard
_local_irq_save
();
ret
=
*
(
volatile
unsigned
char
*
)
ptr
;
*
(
volatile
unsigned
char
*
)
ptr
=
x
;
raw
_local_irq_restore
(
flags
);
hard
_local_irq_restore
(
flags
);
break
;
case
4
:
raw
_local_irq_save
(
flags
);
flags
=
hard
_local_irq_save
();
ret
=
*
(
volatile
unsigned
long
*
)
ptr
;
*
(
volatile
unsigned
long
*
)
ptr
=
x
;
raw
_local_irq_restore
(
flags
);
hard
_local_irq_restore
(
flags
);
break
;
#else
case
1
:
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment