diff options
author | Keir Fraser <keir@xensource.com> | 2007-10-01 14:11:15 +0100 |
---|---|---|
committer | Keir Fraser <keir@xensource.com> | 2007-10-01 14:11:15 +0100 |
commit | 0d5d622244c89e86a9046cb7cd99e7adecf8af53 (patch) | |
tree | 626812cab4c1fcc0fd44a8e4cc71b509704e8438 /xen/arch/x86/hvm/vpt.c | |
parent | 10dcd077d24fd3a63791549637e26f9284dfa94b (diff) | |
download | xen-0d5d622244c89e86a9046cb7cd99e7adecf8af53.tar.gz xen-0d5d622244c89e86a9046cb7cd99e7adecf8af53.tar.bz2 xen-0d5d622244c89e86a9046cb7cd99e7adecf8af53.zip |
hvm: Re-jig event delivery logic to better integrate TPR management.
Signed-off-by: Keir Fraser <keir@xensource.com>
Diffstat (limited to 'xen/arch/x86/hvm/vpt.c')
-rw-r--r-- | xen/arch/x86/hvm/vpt.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/xen/arch/x86/hvm/vpt.c b/xen/arch/x86/hvm/vpt.c index 13124f1750..5ca2968d3c 100644 --- a/xen/arch/x86/hvm/vpt.c +++ b/xen/arch/x86/hvm/vpt.c @@ -165,12 +165,12 @@ void pt_update_irq(struct vcpu *v) } static struct periodic_time *is_pt_irq( - struct vcpu *v, int vector, enum hvm_intack src) + struct vcpu *v, struct hvm_intack intack) { struct list_head *head = &v->arch.hvm_vcpu.tm_list; struct periodic_time *pt; struct RTCState *rtc = &v->domain->arch.hvm_domain.pl_time.vrtc; - int vec; + int vector; list_for_each_entry ( pt, head, list ) { @@ -179,15 +179,16 @@ static struct periodic_time *is_pt_irq( if ( is_lvtt(v, pt->irq) ) { - if ( pt->irq != vector ) + if ( pt->irq != intack.vector ) continue; return pt; } - vec = get_isa_irq_vector(v, pt->irq, src); + vector = get_isa_irq_vector(v, pt->irq, intack.source); /* RTC irq need special care */ - if ( (vector != vec) || (pt->irq == 8 && !is_rtc_periodic_irq(rtc)) ) + if ( (intack.vector != vector) || + ((pt->irq == 8) && !is_rtc_periodic_irq(rtc)) ) continue; return pt; @@ -196,7 +197,7 @@ static struct periodic_time *is_pt_irq( return NULL; } -void pt_intr_post(struct vcpu *v, int vector, enum hvm_intack src) +void pt_intr_post(struct vcpu *v, struct hvm_intack intack) { struct periodic_time *pt; time_cb *cb; @@ -204,7 +205,7 @@ void pt_intr_post(struct vcpu *v, int vector, enum hvm_intack src) spin_lock(&v->arch.hvm_vcpu.tm_lock); - pt = is_pt_irq(v, vector, src); + pt = is_pt_irq(v, intack); if ( pt == NULL ) { spin_unlock(&v->arch.hvm_vcpu.tm_lock); |