lkml.org 
[lkml]   [2014]   [Mar]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 4/4] KVM: ioapic: reinject pending interrupts on KVM_SET_IRQCHIP
    On 2014-03-18 15:54, Paolo Bonzini wrote:
    > After the previous patches, an interrupt whose bit is set in the IRR
    > register will never be in the LAPIC's IRR and has never been injected
    > on the migration source. So inject it on the destination.
    >
    > This fixes migration of Windows guests without HPET (they use the RTC
    > to trigger the scheduler tick, and lose it after migration).
    >
    > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    > ---
    > virt/kvm/ioapic.c | 16 +++++++++++++++-
    > 1 file changed, 15 insertions(+), 1 deletion(-)
    >
    > diff --git a/virt/kvm/ioapic.c b/virt/kvm/ioapic.c
    > index 7a573f1bb79e..63fb432ab502 100644
    > --- a/virt/kvm/ioapic.c
    > +++ b/virt/kvm/ioapic.c
    > @@ -201,6 +201,19 @@ out:
    > return ret;
    > }
    >
    > +void kvm_ioapic_inject_all(struct kvm_ioapic *ioapic, unsigned long irr)

    static? (Didn't the compiler bark at you?)

    Jan

    > +{
    > + u32 idx;
    > +
    > + rtc_irq_eoi_tracking_reset(ioapic);
    > + for_each_set_bit(idx, &irr, 32) {
    > + printk("ioapic_service for GSI %d\n", idx);
    > + ioapic_set_irq(ioapic, idx, 1, true);
    > + }
    > + kvm_rtc_eoi_tracking_restore_all(ioapic);
    > +}
    > +
    > +
    > static void update_handled_vectors(struct kvm_ioapic *ioapic)
    > {
    > DECLARE_BITMAP(handled_vectors, 256);
    > @@ -601,9 +614,10 @@ int kvm_set_ioapic(struct kvm *kvm, struct kvm_ioapic_state *state)
    >
    > spin_lock(&ioapic->lock);
    > memcpy(ioapic, state, sizeof(struct kvm_ioapic_state));
    > + ioapic->irr = 0;
    > update_handled_vectors(ioapic);
    > kvm_vcpu_request_scan_ioapic(kvm);
    > - kvm_rtc_eoi_tracking_restore_all(ioapic);
    > + kvm_ioapic_inject_all(ioapic, state->irr);
    > spin_unlock(&ioapic->lock);
    > return 0;
    > }
    >
    --
    Siemens AG, Corporate Technology, CT RTC ITP SES-DE
    Corporate Competence Center Embedded Linux



    \
     
     \ /
      Last update: 2014-03-18 16:41    [W:2.173 / U:0.108 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site