[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [patch] make hypercall_preempt_check() a little more sensitive
Since PowerPC has a hypervisor mode in the processor, Linux is able to disable interrupts directly using the EE bit in the MSR (Machine State Register), just like on hardware. This bit acts like the evtchn_upcall_mask bit. It would be an invasive patch to PowerPC Linux to modify the code that disables the EE bit and additionally have it modify vcpu_info->evtchn_upcall_mask, especially when that code is in assembly. Instead, we can have hypercall_preempt_check() also check MSR:EE directly. IA64 may be able to use this facility as well, so I've CC'ed that list. This patch fixes a problem where an event occurs, Linux calls back into Xen for e.g. console output, Xen sees that an event is pending and creates a continuation and returns... loop forever. Compile-tested on x86. Please apply. -- Hollis Blanchard IBM Linux Technology Center Signed-off-by: Jimi Xenidis <jimix@xxxxxxxxxx> Signed-off-by: Hollis Blanchard <hollisb@xxxxxxxxxx> --- a/xen/include/asm-ia64/domain.h Wed Mar 29 16:42:19 2006 -0600 +++ b/xen/include/asm-ia64/domain.h Thu Mar 30 11:02:47 2006 -0600 @@ -143,6 +143,8 @@ extern struct mm_struct init_mm; #include <asm/uaccess.h> /* for KERNEL_DS */ #include <asm/pgtable.h> +#define arch_event_deliverable(v) (1) + #endif /* __ASM_DOMAIN_H__ */ /* diff -r d258c2f68943 xen/include/asm-x86/domain.h --- a/xen/include/asm-x86/domain.h Wed Mar 29 16:42:19 2006 -0600 +++ b/xen/include/asm-x86/domain.h Thu Mar 30 11:02:47 2006 -0600 @@ -173,6 +173,8 @@ struct arch_vcpu #define hvm_vmx hvm_vcpu.u.vmx #define hvm_svm hvm_vcpu.u.svm +#define arch_event_deliverable(v) (1) + #endif /* __ASM_DOMAIN_H__ */ /* diff -r d258c2f68943 xen/include/xen/sched.h --- a/xen/include/xen/sched.h Wed Mar 29 16:42:19 2006 -0600 +++ b/xen/include/xen/sched.h Thu Mar 30 11:02:47 2006 -0600 @@ -319,7 +319,8 @@ unsigned long hypercall_create_continuat #define hypercall_preempt_check() (unlikely( \ softirq_pending(smp_processor_id()) | \ - event_pending(current) \ + (event_pending(current) & \ + arch_event_deliverable(current)) \ )) /* This domain_hash and domain_list are protected by the domlist_lock. */ _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |