aboutsummaryrefslogtreecommitdiffstats
path: root/xenolinux-2.4.21-pre4-sparse/include/asm-xeno/system.h
diff options
context:
space:
mode:
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2003-04-16 12:44:16 +0000
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2003-04-16 12:44:16 +0000
commitdcc63e79155b1df7793b3fecccf1e395298c8ee7 (patch)
treece727b6d106f393a41f58253575ac4799a6aa4bb /xenolinux-2.4.21-pre4-sparse/include/asm-xeno/system.h
parent73f339d4f3aa7023b29e3c4d335b796fd20e2b26 (diff)
downloadxen-dcc63e79155b1df7793b3fecccf1e395298c8ee7.tar.gz
xen-dcc63e79155b1df7793b3fecccf1e395298c8ee7.tar.bz2
xen-dcc63e79155b1df7793b3fecccf1e395298c8ee7.zip
bitkeeper revision 1.172 (3e9d5020hc5RUkx3ArM71EjZ_UUbgw)
Many files: Fixed event masking so that events can be individually masked. Fixed Xenolinux config/build system.
Diffstat (limited to 'xenolinux-2.4.21-pre4-sparse/include/asm-xeno/system.h')
-rw-r--r--xenolinux-2.4.21-pre4-sparse/include/asm-xeno/system.h52
1 files changed, 34 insertions, 18 deletions
diff --git a/xenolinux-2.4.21-pre4-sparse/include/asm-xeno/system.h b/xenolinux-2.4.21-pre4-sparse/include/asm-xeno/system.h
index e318716a66..387ac0fdad 100644
--- a/xenolinux-2.4.21-pre4-sparse/include/asm-xeno/system.h
+++ b/xenolinux-2.4.21-pre4-sparse/include/asm-xeno/system.h
@@ -312,31 +312,47 @@ static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
#define set_mb(var, value) do { xchg(&var, value); } while (0)
#define set_wmb(var, value) do { var = value; wmb(); } while (0)
-/* interrupt control.. */
-#define __save_flags(x) ((x) = HYPERVISOR_shared_info->events_enable); barrier()
-#define __restore_flags(x) \
-do { \
- shared_info_t *_shared = HYPERVISOR_shared_info; \
- _shared->events_enable = (x); \
- barrier(); \
- if ( unlikely(_shared->events) && (x) ) do_hypervisor_callback(NULL); \
+
+#define __save_flags(x) \
+do { \
+ (x) = test_bit(EVENTS_MASTER_ENABLE_BIT, \
+ &HYPERVISOR_shared_info->events_mask); \
+ barrier(); \
+} while (0)
+
+#define __restore_flags(x) \
+do { \
+ shared_info_t *_shared = HYPERVISOR_shared_info; \
+ if (x) set_bit(EVENTS_MASTER_ENABLE_BIT, &_shared->events_mask); \
+ barrier(); \
+ if ( unlikely(_shared->events) && (x) ) do_hypervisor_callback(NULL); \
+} while (0)
+
+#define __cli() \
+do { \
+ clear_bit(EVENTS_MASTER_ENABLE_BIT, &HYPERVISOR_shared_info->events_mask);\
+ barrier(); \
} while (0)
-#define __cli() (HYPERVISOR_shared_info->events_enable = 0); barrier()
-#define __sti() \
-do { \
- shared_info_t *_shared = HYPERVISOR_shared_info; \
- _shared->events_enable = 1; \
- barrier(); \
- if ( unlikely(_shared->events) ) do_hypervisor_callback(NULL); \
+
+#define __sti() \
+do { \
+ shared_info_t *_shared = HYPERVISOR_shared_info; \
+ set_bit(EVENTS_MASTER_ENABLE_BIT, &_shared->events_mask); \
+ barrier(); \
+ if ( unlikely(_shared->events) ) do_hypervisor_callback(NULL); \
} while (0)
+
#define safe_halt() ((void)0)
#define __save_and_cli(x) do { __save_flags(x); __cli(); } while(0);
#define __save_and_sti(x) do { __save_flags(x); __sti(); } while(0);
-/* For spinlocks etc */
-//XXX#define local_irq_set(x) __save_and_sti(x)
-#define local_irq_save(x) ((x) = HYPERVISOR_shared_info->events_enable); (HYPERVISOR_shared_info->events_enable = 0); barrier()
+#define local_irq_save(x) \
+do { \
+ (x) = test_and_clear_bit(EVENTS_MASTER_ENABLE_BIT, \
+ &HYPERVISOR_shared_info->events_mask); \
+ barrier(); \
+} while (0)
#define local_irq_restore(x) __restore_flags(x)
#define local_irq_disable() __cli()
#define local_irq_enable() __sti()