From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paolo Bonzini Subject: Re: [PATCH v6 6/6] KVM: Use eoi to track RTC interrupt delivery status Date: Tue, 26 Mar 2013 15:14:54 +0100 Message-ID: <5151AD5E.9050303@redhat.com> References: <1363929845-29005-1-git-send-email-yang.z.zhang@intel.com> <1363929845-29005-7-git-send-email-yang.z.zhang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org, gleb@redhat.com, mtosatti@redhat.com, xiantao.zhang@intel.com To: Yang Zhang Return-path: Received: from mail-ea0-f179.google.com ([209.85.215.179]:61674 "EHLO mail-ea0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757400Ab3CZOPA (ORCPT ); Tue, 26 Mar 2013 10:15:00 -0400 Received: by mail-ea0-f179.google.com with SMTP id f15so2857290eak.10 for ; Tue, 26 Mar 2013 07:14:58 -0700 (PDT) In-Reply-To: <1363929845-29005-7-git-send-email-yang.z.zhang@intel.com> Sender: kvm-owner@vger.kernel.org List-ID: Il 22/03/2013 06:24, Yang Zhang ha scritto: > +static void rtc_irq_ack_eoi(struct kvm_vcpu *vcpu, > + struct rtc_status *rtc_status, int irq) > +{ > + if (irq != RTC_GSI) > + return; > + > + if (test_and_clear_bit(vcpu->vcpu_id, rtc_status->dest_map)) > + --rtc_status->pending_eoi; > + > + WARN_ON(rtc_status->pending_eoi < 0); > +} This is the only case where you're passing the struct rtc_status instead of the struct kvm_ioapic. Please use the latter, and make it the first argument. > @@ -244,7 +268,14 @@ static int ioapic_deliver(struct kvm_ioapic *ioapic, int irq) > irqe.level = 1; > irqe.shorthand = 0; > > - return kvm_irq_delivery_to_apic(ioapic->kvm, NULL, &irqe, NULL); > + if (irq == RTC_GSI) { > + ret = kvm_irq_delivery_to_apic(ioapic->kvm, NULL, &irqe, > + ioapic->rtc_status.dest_map); > + ioapic->rtc_status.pending_eoi = ret; I think you should either add a BUG_ON(ioapic->rtc_status.pending_eoi != 0); or use "ioapic->rtc_status.pending_eoi += ret" (or both). > + } else > + ret = kvm_irq_delivery_to_apic(ioapic->kvm, NULL, &irqe, NULL); > + > + return ret; > } Paolo