Messages in this thread | | | Date | Tue, 09 May 2006 07:49:42 -0700 | From | "Martin J. Bligh" <> | Subject | Re: [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/
| |