specifically for atomic test-and-modify operations on bool_t.
Signed-off-by: Keir Fraser <keir@xensource.com>
domain_pause(d);
/* Already dying? Then bail. */
- if ( xchg(&d->is_dying, 1) )
+ if ( test_and_set_bool(d->is_dying) )
{
domain_unpause(d);
return;
struct vcpu *v;
atomic_inc(&d->pause_count);
- if ( xchg(&d->is_paused_by_controller, 1) )
+ if ( test_and_set_bool(d->is_paused_by_controller) )
domain_unpause(d); /* race-free atomic_dec(&d->pause_count) */
for_each_vcpu ( d, v )
void domain_pause_by_systemcontroller(struct domain *d)
{
domain_pause(d);
- if ( xchg(&d->is_paused_by_controller, 1) )
+ if ( test_and_set_bool(d->is_paused_by_controller) )
domain_unpause(d);
}
void domain_unpause_by_systemcontroller(struct domain *d)
{
- if ( xchg(&d->is_paused_by_controller, 0) )
+ if ( test_and_clear_bool(d->is_paused_by_controller) )
domain_unpause(d);
}
typedef unsigned long ssize_t;
typedef unsigned long size_t;
typedef long long loff_t;
+
+typedef char bool_t;
+#define test_and_set_bool(b) xchg(&(b), 1)
+#define test_and_clear_bool(b) xchg(&(b), 0)
+
#endif /* !__ASSEMBLY__ */
#endif /* _ASM_IA64_XENTYPES_H */
typedef unsigned short xmem_bufctl_t;
+typedef int bool_t;
+#define test_and_set_bool(b) xchg(&(b), 1)
+#define test_and_clear_bool(b) xchg(&(b), 0)
+
#endif /* __ASSEMBLY__ */
#endif
typedef unsigned long size_t;
+typedef char bool_t;
+#define test_and_set_bool(b) xchg(&(b), 1)
+#define test_and_clear_bool(b) xchg(&(b), 0)
+
#endif /* __ASSEMBLY__ */
#if defined(__i386__)
#define LONG_MIN (-LONG_MAX - 1)
#define ULONG_MAX (~0UL)
-typedef char bool_t;
-
/* bsd */
typedef unsigned char u_char;
typedef unsigned short u_short;