All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Radim Krčmář" <rkrcmar@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
	Joerg Roedel <jroedel@suse.de>,
	David Gilbert <dgilbert@redhat.com>
Subject: Re: [PATCH] kvm: x86: correctly reset dest_map->vector when restoring LAPIC state
Date: Thu, 15 Sep 2016 17:25:13 +0200	[thread overview]
Message-ID: <20160915152513.GD17296@potion> (raw)
In-Reply-To: <1473889712-13785-1-git-send-email-pbonzini@redhat.com>

2016-09-14 23:48+0200, Paolo Bonzini:
> When userspace sends KVM_SET_LAPIC, KVM schedules a check between
> the vCPU's IRR and ISR and the IOAPIC redirection table, in order
> to re-establish the IOAPIC's dest_map (the list of CPUs servicing
> the real-time clock interrupt with the corresponding vectors).
> 
> However, __rtc_irq_eoi_tracking_restore_one was forgetting to
> set dest_map->vectors.  Because of this, the IOAPIC did not process
> the real-time clock interrupt EOI, ioapic->rtc_status.pending_eoi
> got stuck at a non-zero value, and further RTC interrupts were
> reported to userspace as coalesced.
> 
> Fixes: 9e4aabe2bb3454c83dac8139cf9974503ee044db
> Fixes: 4d99ba898dd0c521ca6cdfdde55c9b58aea3cb3d
> Cc: Joerg Roedel <jroedel@suse.de>
> Cc: David Gilbert <dgilbert@redhat.com>
> Cc: Radim Krčmář <rkrcmar@redhat.com>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---

Nice catch,

Reviewed-by: Radim Krčmář <rkrcmar@redhat.com>

(It is sad that the RTC EOI tracking exists ...)

>  arch/x86/kvm/ioapic.c | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/x86/kvm/ioapic.c b/arch/x86/kvm/ioapic.c
> index 5f42d038fcb4..c7220ba94aa7 100644
> --- a/arch/x86/kvm/ioapic.c
> +++ b/arch/x86/kvm/ioapic.c
> @@ -109,6 +109,7 @@ static void __rtc_irq_eoi_tracking_restore_one(struct kvm_vcpu *vcpu)
>  {
>  	bool new_val, old_val;
>  	struct kvm_ioapic *ioapic = vcpu->kvm->arch.vioapic;
> +	struct dest_map *dest_map = &ioapic->rtc_status.dest_map;
>  	union kvm_ioapic_redirect_entry *e;
>  
>  	e = &ioapic->redirtbl[RTC_GSI];
> @@ -117,16 +118,17 @@ static void __rtc_irq_eoi_tracking_restore_one(struct kvm_vcpu *vcpu)
>  		return;
>  
>  	new_val = kvm_apic_pending_eoi(vcpu, e->fields.vector);
> -	old_val = test_bit(vcpu->vcpu_id, ioapic->rtc_status.dest_map.map);
> +	old_val = test_bit(vcpu->vcpu_id, dest_map->map);
>  
>  	if (new_val == old_val)
>  		return;
>  
>  	if (new_val) {
> -		__set_bit(vcpu->vcpu_id, ioapic->rtc_status.dest_map.map);
> +		__set_bit(vcpu->vcpu_id, dest_map->map);
> +		dest_map->vectors[vcpu->vcpu_id] = e->fields.vector;
>  		ioapic->rtc_status.pending_eoi++;
>  	} else {
> -		__clear_bit(vcpu->vcpu_id, ioapic->rtc_status.dest_map.map);
> +		__clear_bit(vcpu->vcpu_id, dest_map->map);
>  		ioapic->rtc_status.pending_eoi--;
>  		rtc_status_pending_eoi_check_valid(ioapic);
>  	}
> -- 
> 1.8.3.1
> 

  reply	other threads:[~2016-09-15 15:25 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-14 21:48 [PATCH] kvm: x86: correctly reset dest_map->vector when restoring LAPIC state Paolo Bonzini
2016-09-15 15:25 ` Radim Krčmář [this message]
2016-09-19 13:16 ` Joerg Roedel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160915152513.GD17296@potion \
    --to=rkrcmar@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=jroedel@suse.de \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.