When handling a defered event, unmasking it isn't enouth, we also need to check
if the corresponding bit needs to be set in evtchn_pending_sel, and eventually force an upcall (if we got a second event when this one what being handled). For now to this by calling hypervisor_enable_irq(), this could be rewritten in inline assembly by someone knowing enouth about i386 assembly :)
This commit is contained in:
parent
02e969d512
commit
3307398997
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: vector.S,v 1.6 2005/03/11 15:45:54 bouyer Exp $ */
|
||||
/* $NetBSD: vector.S,v 1.7 2005/03/17 15:30:45 bouyer Exp $ */
|
||||
/* NetBSD: 1.13 2004/03/11 11:39:26 yamt Exp */
|
||||
|
||||
/*
|
||||
|
@ -334,6 +334,7 @@ IDTVEC(intr_/**/name/**/num) ;\
|
|||
unmask(num) ;\
|
||||
jmp 6b
|
||||
|
||||
#if 0
|
||||
#ifdef DOM0OPS
|
||||
#define hypervisor_asm_unmask(num) \
|
||||
movl irq_to_evtchn + (num) * 4,%ecx ;\
|
||||
|
@ -352,6 +353,15 @@ IDTVEC(intr_/**/name/**/num) ;\
|
|||
lock ;\
|
||||
btrl %ecx,EVENTS_MASK(%eax)
|
||||
#endif
|
||||
#else
|
||||
# Just unmasking the event isn't enouth, we also need to
|
||||
# reassert the event pending bit if needed. For now just call
|
||||
# the C function doing it, maybe rewrite in inline assembly ?
|
||||
#define hypervisor_asm_unmask(num) \
|
||||
pushl $num ;\
|
||||
call _C_LABEL(hypervisor_enable_irq) ;\
|
||||
addl $4,%esp
|
||||
#endif
|
||||
|
||||
XENINTRSTUB(xenev,0,voidop,voidop,voidop,hypervisor_asm_unmask,voidop)
|
||||
XENINTRSTUB(xenev,1,voidop,voidop,voidop,hypervisor_asm_unmask,voidop)
|
||||
|
|
Loading…
Reference in New Issue