Signed-off-by: Gregory Haskins <[EMAIL PROTECTED]>
---

 drivers/kvm/irqdevice.h |    3 +++
 drivers/kvm/kvm.h       |    1 +
 drivers/kvm/lapic.c     |   17 +++++++++++++++++
 3 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/drivers/kvm/irqdevice.h b/drivers/kvm/irqdevice.h
index 097d179..173313d 100644
--- a/drivers/kvm/irqdevice.h
+++ b/drivers/kvm/irqdevice.h
@@ -45,12 +45,14 @@ struct kvm_irqsink {
 
 #define KVM_IRQACKDATA_VECTOR_VALID   (1 << 0)
 #define KVM_IRQACKDATA_VECTOR_PENDING (1 << 1)
+#define KVM_IRQACKDATA_NEXT_VALID     (1 << 2)
 
 #define KVM_IRQACK_FLAG_PEEK          (1 << 0)
 
 struct kvm_irqack_data {
        int flags;
        int vector;
+       int next;
 };
 
 struct kvm_irqdevice {
@@ -92,6 +94,7 @@ static inline void kvm_irqdevice_init(struct kvm_irqdevice 
*dev)
  *               data.flags -
  *                  [KVM_IRQACKDATA_VECTOR_VALID - data.vector is valid]
  *                  [KVM_IRQACKDATA_VECTOR_PENDING - more vectors are pending]
+ *                  [KVM_IRQACKDATA_NEXT_VALID - next-vector is valid]
  *
  * Returns: (int)
  *   [-1 = failure]
diff --git a/drivers/kvm/kvm.h b/drivers/kvm/kvm.h
index 3065a1b..b417d80 100644
--- a/drivers/kvm/kvm.h
+++ b/drivers/kvm/kvm.h
@@ -180,6 +180,7 @@ void kvm_lapic_save(struct kvm_vcpu *vcpu, struct kvm_sregs 
*sregs);
 void kvm_lapic_restore(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs);
 void kvm_lapic_reset(struct kvm_vcpu *vcpu);
 int  kvm_lapic_enabled(struct kvm_vcpu *vcpu);
+void *kvm_lapic_get_regs(struct kvm_vcpu *vcpu);
 
 /*
  * x86 supports 3 paging modes (4-level 64-bit, 3-level 64-bit, and 2-level
diff --git a/drivers/kvm/lapic.c b/drivers/kvm/lapic.c
index 9f0ab7e..602e94c 100644
--- a/drivers/kvm/lapic.c
+++ b/drivers/kvm/lapic.c
@@ -1154,6 +1154,13 @@ int kvm_lapic_enabled(struct kvm_vcpu *vcpu)
        return ret;
 }
 
+void *kvm_lapic_get_regs(struct kvm_vcpu *vcpu)
+{
+       struct kvm_kern_apic *apic = (struct kvm_kern_apic*)vcpu->apic.dev;
+       return apic->regs;
+}
+EXPORT_SYMBOL_GPL(kvm_lapic_get_regs);
+
 /*
  *----------------------------------------------------------------------
  * timer interface
@@ -1286,6 +1293,16 @@ static int apic_irqdev_ack(struct kvm_irqdevice *this, 
int flags,
        if ((irq & 0xf0) > apic_get_reg(apic, APIC_PROCPRI))
                data->flags |= KVM_IRQACKDATA_VECTOR_PENDING;
 
+       if (irq) {
+               /*
+                * We report the next pending vector here so that the system
+                * can assess TPR thresholds for TPR-shadowing purposes
+                * (if applicable)
+                */
+               data->next   = irq;
+               data->flags |= KVM_IRQACKDATA_NEXT_VALID;
+       }
+
  out:
        spin_unlock_bh(&apic->lock);
 


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
kvm-devel mailing list
kvm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-devel

Reply via email to