diff options
author | Keir Fraser <keir@xen.org> | 2010-11-18 11:45:33 +0000 |
---|---|---|
committer | Keir Fraser <keir@xen.org> | 2010-11-18 11:45:33 +0000 |
commit | 652ec2d1ec8c2c79dce01dc9136c0dfefeabc13e (patch) | |
tree | 5c31a11a97e5c3143712dd2c4dfc2e3da5a38505 /xen/include/xen/preempt.h | |
parent | c03ec255cdfe2ee762e27be80132ee240be50314 (diff) | |
download | xen-652ec2d1ec8c2c79dce01dc9136c0dfefeabc13e.tar.gz xen-652ec2d1ec8c2c79dce01dc9136c0dfefeabc13e.tar.bz2 xen-652ec2d1ec8c2c79dce01dc9136c0dfefeabc13e.zip |
Define Linux-style <preempt.h> interface.
Use it to disable sleeping in spinlock and rcu-read regions.
Signed-off-by: Keir Fraser <keir@xen.org>
Diffstat (limited to 'xen/include/xen/preempt.h')
-rw-r--r-- | xen/include/xen/preempt.h | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/xen/include/xen/preempt.h b/xen/include/xen/preempt.h new file mode 100644 index 0000000000..749bc589cb --- /dev/null +++ b/xen/include/xen/preempt.h @@ -0,0 +1,33 @@ +/****************************************************************************** + * preempt.h + * + * Track atomic regions in the hypervisor which disallow sleeping. + * + * Copyright (c) 2010, Keir Fraser <keir@xen.org> + */ + +#ifndef __XEN_PREEMPT_H__ +#define __XEN_PREEMPT_H__ + +#include <xen/config.h> +#include <xen/percpu.h> +#include <xen/irq.h> /* in_irq() */ +#include <asm/system.h> /* local_irq_is_enabled() */ + +DECLARE_PER_CPU(unsigned int, __preempt_count); + +#define preempt_count() (this_cpu(__preempt_count)) + +#define preempt_disable() do { \ + preempt_count()++; \ + barrier(); \ +} while (0) + +#define preempt_enable() do { \ + barrier(); \ + preempt_count()--; \ +} while (0) + +#define in_atomic() (preempt_count() || in_irq() || !local_irq_is_enabled()) + +#endif /* __XEN_PREEMPT_H__ */ |