|
@@ -33,12 +33,17 @@
|
|
events, then enter the hypervisor to get them handled.
|
|
events, then enter the hypervisor to get them handled.
|
|
*/
|
|
*/
|
|
ENTRY(xen_irq_enable_direct)
|
|
ENTRY(xen_irq_enable_direct)
|
|
- /* Clear mask and test pending */
|
|
|
|
- andw $0x00ff, PER_CPU_VAR(xen_vcpu_info)+XEN_vcpu_info_pending
|
|
|
|
|
|
+ /* Unmask events */
|
|
|
|
+ movb $0, PER_CPU_VAR(xen_vcpu_info)+XEN_vcpu_info_mask
|
|
|
|
+
|
|
/* Preempt here doesn't matter because that will deal with
|
|
/* Preempt here doesn't matter because that will deal with
|
|
any pending interrupts. The pending check may end up being
|
|
any pending interrupts. The pending check may end up being
|
|
run on the wrong CPU, but that doesn't hurt. */
|
|
run on the wrong CPU, but that doesn't hurt. */
|
|
|
|
+
|
|
|
|
+ /* Test for pending */
|
|
|
|
+ testb $0xff, PER_CPU_VAR(xen_vcpu_info)+XEN_vcpu_info_pending
|
|
jz 1f
|
|
jz 1f
|
|
|
|
+
|
|
2: call check_events
|
|
2: call check_events
|
|
1:
|
|
1:
|
|
ENDPATCH(xen_irq_enable_direct)
|
|
ENDPATCH(xen_irq_enable_direct)
|