lkml.org 
[lkml]   [2006]   [May]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [RFC PATCH 15/35] subarch support for controlling interrupt delivery
> +/*
> + * The use of 'barrier' in the following reflects their use as local-lock
> + * operations. Reentrancy must be prevented (e.g., __cli()) /before/ following
> + * critical operations are executed. All critical operations must complete
> + * /before/ reentrancy is permitted (e.g., __sti()). Alpha architecture also
> + * includes these barriers, for example.
> + */

Seems like an odd comment to have in an i386 header file.

> +#define __cli() \
> +do { \
> + struct vcpu_info *_vcpu; \
> + preempt_disable(); \
> + _vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id]; \
> + _vcpu->evtchn_upcall_mask = 1; \
> + preempt_enable_no_resched(); \
> + barrier(); \
> +} while (0)

Should be a real function

> +#define __sti() \
> +do { \
> + struct vcpu_info *_vcpu; \
> + barrier(); \
> + preempt_disable(); \
> + _vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id]; \
> + _vcpu->evtchn_upcall_mask = 0; \
> + barrier(); /* unmask then check (avoid races) */ \
> + if (unlikely(_vcpu->evtchn_upcall_pending)) \
> + force_evtchn_callback(); \
> + preempt_enable(); \
> +} while (0)

Should be a real function

> +#define __save_flags(x) \
> +do { \
> + struct vcpu_info *_vcpu; \
> + preempt_disable(); \
> + _vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id]; \
> + (x) = _vcpu->evtchn_upcall_mask; \
> + preempt_enable(); \
> +} while (0)

Should be a real function

> +#define __restore_flags(x) \
> +do { \
> + struct vcpu_info *_vcpu; \
> + barrier(); \
> + preempt_disable(); \
> + _vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id]; \
> + if ((_vcpu->evtchn_upcall_mask = (x)) == 0) { \
> + barrier(); /* unmask then check (avoid races) */ \
> + if (unlikely(_vcpu->evtchn_upcall_pending)) \
> + force_evtchn_callback(); \
> + preempt_enable(); \
> + } else \
> + preempt_enable_no_resched(); \
> +} while (0)

Should be a real function

> +#define safe_halt() ((void)0)
> +#define halt() ((void)0)
> +
> +#define __save_and_cli(x) \
> +do { \
> + struct vcpu_info *_vcpu; \
> + preempt_disable(); \
> + _vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id]; \
> + (x) = _vcpu->evtchn_upcall_mask; \
> + _vcpu->evtchn_upcall_mask = 1; \
> + preempt_enable_no_resched(); \
> + barrier(); \
> +} while (0)

Should be a real function

> +#define local_irq_save(x) __save_and_cli(x)
> +#define local_irq_restore(x) __restore_flags(x)
> +#define local_save_flags(x) __save_flags(x)
> +#define local_irq_disable() __cli()
> +#define local_irq_enable() __sti()
> +
> +/* Cannot use preempt_enable() here as we would recurse in preempt_sched(). */
> +#define irqs_disabled() \
> +({ int ___x; \
> + struct vcpu_info *_vcpu; \
> + preempt_disable(); \
> + _vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id]; \
> + ___x = (_vcpu->evtchn_upcall_mask != 0); \
> + preempt_enable_no_resched(); \
> + ___x; })
> +
> +#endif /* __KERNEL__ */

Should be a real function
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2006-05-09 16:52    [W:0.573 / U:1.584 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site