Signed-off-by: Gregory Haskins <[EMAIL PROTECTED]> --- drivers/kvm/irqdevice.h | 3 +++ drivers/kvm/kvm.h | 1 + drivers/kvm/lapic.c | 15 +++++++++++++++ 3 files changed, 19 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 60710d8..4ae616f 100644 --- a/drivers/kvm/kvm.h +++ b/drivers/kvm/kvm.h @@ -178,6 +178,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 f7b04f9..da51710 100644 --- a/drivers/kvm/lapic.c +++ b/drivers/kvm/lapic.c @@ -1140,6 +1140,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 @@ -1278,6 +1285,14 @@ static int apic_irqdev_ack(struct kvm_irqdevice *this, int flags, */ if (irq > apic_get_reg(apic, APIC_TASKPRI)) data->flags |= KVM_IRQACKDATA_VECTOR_PENDING; + + /* + * We report the next pending vector here so that the system + * can asses TPR thresholds for TPR-shadowing purposes + * (if applicable) + */ + data->next = irq; + data->flags |= KVM_IRQACKDATA_NEXT_VALID; } out: ------------------------------------------------------------------------- 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