aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/hvm/vpt.c
diff options
context:
space:
mode:
authorKeir Fraser <keir@xensource.com>2007-10-01 14:11:15 +0100
committerKeir Fraser <keir@xensource.com>2007-10-01 14:11:15 +0100
commit0d5d622244c89e86a9046cb7cd99e7adecf8af53 (patch)
tree626812cab4c1fcc0fd44a8e4cc71b509704e8438 /xen/arch/x86/hvm/vpt.c
parent10dcd077d24fd3a63791549637e26f9284dfa94b (diff)
downloadxen-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.c15
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);