From patchwork Tue Nov 7 10:47:41 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoffer Dall X-Patchwork-Id: 10046387 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id EE5BB60360 for ; Tue, 7 Nov 2017 10:50:04 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C6BF629DB6 for ; Tue, 7 Nov 2017 10:50:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B8BAF29DBD; Tue, 7 Nov 2017 10:50:04 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_MED autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 4417D287C3 for ; Tue, 7 Nov 2017 10:50:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=IwWi2kNk/AEtMZwj3D5SmsazzcAfcspp1FwQiCShvh0=; b=j7xe9xakSjQVJeCKCI6d5otvql NciiEet0ZUHjmXD3DWAyorV5XYx3qDA9V+ced/q7Zqnne1K4U8Hp5E9g/XORmNVIPvyEu3OU19rKV 46fXfUS4UN2Uifnp+7OvWfmnkTkqpVaUu4+41AC16ommWHM8tOLQ6sYGG1X85zBUhs0JUOE1Pmw/o wlTZd/H2/QoXhCIDwGDLJSTT1li9Rf663RrkfcQHjGmsh4Mob5EEgQrLsYqkhXSslXz4dNBcCeHYq Pm1pkFBHeNcYxwNRMLpEbLuDEinT9o3wehoOp1Wj/emOOBR5fqSumWA7RbsO5ICMFRBUdGDymFVv0 n8AVkzqA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1eC1SF-0002Je-37; Tue, 07 Nov 2017 10:50:03 +0000 Received: from mail-wm0-x243.google.com ([2a00:1450:400c:c09::243]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1eC1Qv-0000z3-7A for linux-arm-kernel@lists.infradead.org; Tue, 07 Nov 2017 10:48:49 +0000 Received: by mail-wm0-x243.google.com with SMTP id y80so2740716wmd.0 for ; Tue, 07 Nov 2017 02:48:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=u4ItikNZsLOCbUC5ApofQ39TyxXzQ7zBKps26Qop5fo=; b=idyPkehHigLqdbODhXBrKKhHbF5efq7UBbQXECnRtB+3e5ykbnMv77UlJ0oYwjLF5r aNUPEnYZF4syvrlXYk/wpQb5s1X3t9fsU+LCzM9i562qHHtw8rceTTSe1Fq5ZPylbtVa EUqMuLdEARFoLvPU3nPOPXNsSGGblSmKLQhfg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=u4ItikNZsLOCbUC5ApofQ39TyxXzQ7zBKps26Qop5fo=; b=dYN55zac7EXnuHeaoEjXf7F6qfXJBrgEVbg1m3yduQgXzm+GCjuAMRLZPoyI9sBlJl 5uHk2hPbKWv13kVXTsplXRZQrslA2MArWhYdskD9miEqZRF0QvsIiqgWGNq+AICIqFgv MA0Tfqvmgio0HxG3WU9zyOojtaBhWrDUKy1/GH8nr7Inb4rf/d/eeJXuYRAONoWswPdn DljiBxaAQIojJnyj7PDhtL6Da4PWErFcBFE63e6flLRvYvo1z8tVUnuLDzNpYZUPZ+Sh 2n0CxitWWy9MlkY83ig1i8Q5aHgnEh5BAS++ARzYFl/li5J5vTIgjs90UgF16/4usriA vl+g== X-Gm-Message-State: AMCzsaVziXbpO8TV0OygZk48G8z594FBjSzQRbbJZQ5rnpxMqKoRr+Zg U+s0ssYs749JCZwfWzy6jmRpJg== X-Google-Smtp-Source: ABhQp+QgHfTOy1bh6RkNRHy9MWk+F0UCgEB1A4ns0miO+Kx+inoqyqZTgLDubnBnw0MPsZZO6iVaaA== X-Received: by 10.80.169.78 with SMTP id m14mr24058870edc.118.1510051701513; Tue, 07 Nov 2017 02:48:21 -0800 (PST) Received: from localhost.localdomain (xd93dd96b.cust.hiper.dk. [217.61.217.107]) by smtp.gmail.com with ESMTPSA id q12sm1044958edj.29.2017.11.07.02.48.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 07 Nov 2017 02:48:20 -0800 (PST) From: Christoffer Dall To: Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= Subject: [PULL 08/26] KVM: arm/arm64: Move timer/vgic flush/sync under disabled irq Date: Tue, 7 Nov 2017 11:47:41 +0100 Message-Id: <20171107104800.30021-9-christoffer.dall@linaro.org> X-Mailer: git-send-email 2.14.2 In-Reply-To: <20171107104800.30021-1-christoffer.dall@linaro.org> References: <20171107104800.30021-1-christoffer.dall@linaro.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20171107_024841_592212_9BE3A75C X-CRM114-Status: GOOD ( 12.10 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Marc Zyngier , Christoffer Dall , kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP From: Christoffer Dall As we are about to play tricks with the timer to be more lazy in saving and restoring state, we need to move the timer sync and flush functions under a disabled irq section and since we have to flush the vgic state after the timer and PMU state, we do the whole flush/sync sequence with disabled irqs. The only downside is a slightly longer delay before being able to process hardware interrupts and run softirqs. Signed-off-by: Christoffer Dall Reviewed-by: Marc Zyngier --- virt/kvm/arm/arm.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/virt/kvm/arm/arm.c b/virt/kvm/arm/arm.c index b9f68e4add71..27db222a0c8d 100644 --- a/virt/kvm/arm/arm.c +++ b/virt/kvm/arm/arm.c @@ -654,11 +654,11 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run) kvm_pmu_flush_hwstate(vcpu); + local_irq_disable(); + kvm_timer_flush_hwstate(vcpu); kvm_vgic_flush_hwstate(vcpu); - local_irq_disable(); - /* * If we have a singal pending, or need to notify a userspace * irqchip about timer or PMU level changes, then we exit (and @@ -683,10 +683,10 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run) if (ret <= 0 || need_new_vmid_gen(vcpu->kvm) || kvm_request_pending(vcpu)) { vcpu->mode = OUTSIDE_GUEST_MODE; - local_irq_enable(); kvm_pmu_sync_hwstate(vcpu); kvm_timer_sync_hwstate(vcpu); kvm_vgic_sync_hwstate(vcpu); + local_irq_enable(); preempt_enable(); continue; } @@ -709,6 +709,16 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run) kvm_arm_clear_debug(vcpu); + /* + * We must sync the PMU and timer state before the vgic state so + * that the vgic can properly sample the updated state of the + * interrupt line. + */ + kvm_pmu_sync_hwstate(vcpu); + kvm_timer_sync_hwstate(vcpu); + + kvm_vgic_sync_hwstate(vcpu); + /* * We may have taken a host interrupt in HYP mode (ie * while executing the guest). This interrupt is still @@ -732,16 +742,6 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run) guest_exit(); trace_kvm_exit(ret, kvm_vcpu_trap_get_class(vcpu), *vcpu_pc(vcpu)); - /* - * We must sync the PMU and timer state before the vgic state so - * that the vgic can properly sample the updated state of the - * interrupt line. - */ - kvm_pmu_sync_hwstate(vcpu); - kvm_timer_sync_hwstate(vcpu); - - kvm_vgic_sync_hwstate(vcpu); - preempt_enable(); ret = handle_exit(vcpu, run, ret);