From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2151EC433F5 for ; Tue, 8 Feb 2022 12:39:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=91o+B/4e9hyUMBgXCHt9JxVGYjBTGyZRA8J7slnOwpY=; b=YRQ1QuxwgWZa9C YAj2wwafqS3pdTAnPwqyrMTxljk18XKocvOKSTiCzFNPRSQRJEr+aTgvKDaQEYaA9e2Nx6N8U6R7n DqOrKwwtBHFDS+nG2K+7Rl9XRyLOsB0qgV7BRRq2R9oXrsI5wQ6dSD3kBi+mfIOCUYedeLXj4VmCz PHHYUiYuh0Qx6unqPCqfhzrWc9pJ9P1IZv9zo4U/CSU9UD5pDnBbtVGG5qyUCJ8e0qt7Sgs1LyC2t j0swEQ5gnsnkkvWdDAJt6zj9hmGxYj0v3zL6VDXuPstTQABuQoHX0fEGY8GrzELm7IlJcOyUnDGkC k+yyh7OEUmmYIoYp8zSg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nHPko-00DmPn-Rj; Tue, 08 Feb 2022 12:37:55 +0000 Received: from ams.source.kernel.org ([2604:1380:4601:e00::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nHPkk-00DmOL-Pj for linux-arm-kernel@lists.infradead.org; Tue, 08 Feb 2022 12:37:52 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 82A39B81AEE; Tue, 8 Feb 2022 12:37:49 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 52EC3C004E1; Tue, 8 Feb 2022 12:37:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1644323868; bh=Vdzv6/VbCUfmB9ltCSpCmrJCAknBa748GpfXsqv7SuY=; h=From:To:Cc:Subject:Date:From; b=qmuMJ8idnULy1JeLdMTOgVlGQSy4iea+9UUHi3D6DoiEFoAwTCsKJarkGnh9C8wo7 gcj0hZDWqxCqcCNqL7X0jPIs2CSHx70b28Pl7WjXfQPXKpx3QYWWHDFRGZjv/WnhXn yb05l0jB8K01IncTERH7mbpugILidG2rkvR+MtOBfw5dloXjf/j7DT1qIRmGvdE6w3 t7xVPTQRwgb/w+1CbKnl6OW9W3MowN94jibzF+H6rt8y1vcpLZ9RFA0gsLc4KGOPt0 pgKp9oKyidHeDeU5Jt98QpteNPQu+R9TsYFC2x83S2aablvzLPxIk09kYWByQWrzLU t9b1sUe5dcFYw== Received: from sofa.misterjones.org ([185.219.108.64] helo=hot-poop.lan) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1nHPkg-006FuE-2W; Tue, 08 Feb 2022 12:37:46 +0000 From: Marc Zyngier To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org Cc: James Morse , Suzuki K Poulose , Alexandru Elisei , kernel-team@android.com, Ricardo Koller Subject: [PATCH] KVM: arm64: vgic: Read HW interrupt pending state from the HW Date: Tue, 8 Feb 2022 12:37:26 +0000 Message-Id: <20220208123726.3604198-1-maz@kernel.org> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, james.morse@arm.com, suzuki.poulose@arm.com, alexandru.elisei@arm.com, kernel-team@android.com, ricarkol@google.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220208_043751_000020_B0B445A2 X-CRM114-Status: GOOD ( 15.35 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org It appears that a read access to GIC[DR]_I[CS]PENDRn doesn't always result in the pending interrupts being accurately reported if they are mapped to a HW interrupt. This is particularily visible when acking the timer interrupt and reading the GICR_ISPENDR1 register immediately after, for example (the interrupt appears as not-pending while it really is...). This is because a HW interrupt has its 'active and pending state' kept in the *physical* distributor, and not in the virtual one, as mandated by the spec (this is what allows the direct deactivation). The virtual distributor only caries the pending and active *states* (note the plural, as these are two independent and non-overlapping states). Fix it by reading the HW state back, either from the timer itself or from the distributor if necessary. Reported-by: Ricardo Koller Signed-off-by: Marc Zyngier --- arch/arm64/kvm/vgic/vgic-mmio.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/arm64/kvm/vgic/vgic-mmio.c b/arch/arm64/kvm/vgic/vgic-mmio.c index 7068da080799..49837d3a3ef5 100644 --- a/arch/arm64/kvm/vgic/vgic-mmio.c +++ b/arch/arm64/kvm/vgic/vgic-mmio.c @@ -248,6 +248,8 @@ unsigned long vgic_mmio_read_pending(struct kvm_vcpu *vcpu, IRQCHIP_STATE_PENDING, &val); WARN_RATELIMIT(err, "IRQ %d", irq->host_irq); + } else if (vgic_irq_is_mapped_level(irq)) { + val = vgic_get_phys_line_level(irq); } else { val = irq_is_pending(irq); } -- 2.34.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel