From patchwork Sat Sep 23 00:41:57 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoffer Dall X-Patchwork-Id: 9967355 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 CA590600C5 for ; Sat, 23 Sep 2017 00:52:04 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BA6DB28ED3 for ; Sat, 23 Sep 2017 00:52:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AC84B296B3; Sat, 23 Sep 2017 00:52: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 3B3C628ED3 for ; Sat, 23 Sep 2017 00:52:03 +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=6ZZKZT01NM/i3rcBSkwmgsCsLWIej54gXx+zKheZ2/g=; b=EUslOo1r7kFSgQZTn3HP/4/43e vg5w8iMOU4zX1HoVRVg5iAFTgpGyR1mVQ8ElbXVgEo7s0ocRYACTZ+Mcuadfs8yOBdJv7StikGGwb GeSOssc3nk9qQ2Dv6xRi6n/UfR0lkd4hY/VJRcDdocvBPbFefMo1qgLoxfqsHFHG+9wjLt92Fs0it Wc03sqcn1FKthVnAxsOUWzXN1JawEMC4Qo9/nVtINZUwAQjjv89e+v4uz2lIImGzDV7qyBDXE8AKf IPxfEa02cB4j959FFeJjCqS8dcZLkJt7uzngIF8gN0EfyX0xlN9ZrSGXLmapjBGDZMhDOKQQBgijm IN5PD3aw==; 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 1dvYfm-0003VO-Dm; Sat, 23 Sep 2017 00:51:58 +0000 Received: from mail-wm0-x22a.google.com ([2a00:1450:400c:c09::22a]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1dvYWm-0003ni-Rz for linux-arm-kernel@lists.infradead.org; Sat, 23 Sep 2017 00:42:52 +0000 Received: by mail-wm0-x22a.google.com with SMTP id b195so7636607wmb.5 for ; Fri, 22 Sep 2017 17:42:20 -0700 (PDT) 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=b+MOmu9l3d1K7lv60hq3fcI5xixscwtRQ9BTEYuV5hY=; b=j2yZnedH/9Qf2je2AcOqF3q14lA+kCohSLWyn+q2Pj6l/pscr0KCPE37pWTI3ZdWb7 xDHlk/+Mi4Ki6p4kawfkoh3Mkg0AIGnH7wYmsiWw2KgUTvBv1frOHokmf5YbMrjgs44R PzJKU8FownTTmDbsF1RhFbBhrs1BawMhvCoqI= 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=b+MOmu9l3d1K7lv60hq3fcI5xixscwtRQ9BTEYuV5hY=; b=lxOl11WVvTKJLmV8ceJqs1gYRoicgvwPvgmdEliyTLRJAtjorVZlxietqA9mvDqYpU LMrvq4AzFDw9HTn58uv2P09WGUg+g3CV2AtKLI61D1H9lZincKilqR4xD1DlkVBDsu9o uekBfrjc/M8stPh9Cmbu7C5uJswvXUG/WHByXukhBdc5PnBtZRfFrTQ3BeJk13faJlOc XsMeEi400P0ZVeJvmLoFmXc45tA90X3ZJ116buX9hZ0TKBqZte8VfxJCiPumQoNK0NCf 6sO/FY+GV7jqks0G8b30PPbC4qkA0KhtzdPmsxIAuhBN1z+n3B096iTJeIYtWccKJlSk J5Eg== X-Gm-Message-State: AHPjjUi3VS9EbUWas60M9LYNr9Qti/+M0jbs/WUA7Kk3OgouPAS9ultb mFzyDZFuHrBFJAAgvLbTM4cxNw== X-Google-Smtp-Source: AOwi7QAzNk8h5CelY7q+yzSiHW46ao1FMIuXCGf7ZDijndYxw3e5x8e/4scSUzJd5CAWRdGjow1YMA== X-Received: by 10.80.136.165 with SMTP id d34mr1009244edd.296.1506127339066; Fri, 22 Sep 2017 17:42:19 -0700 (PDT) Received: from localhost.localdomain (xd93dd96b.cust.hiper.dk. [217.61.217.107]) by smtp.gmail.com with ESMTPSA id c25sm646085edb.57.2017.09.22.17.42.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 22 Sep 2017 17:42:17 -0700 (PDT) From: Christoffer Dall To: kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 10/20] KVM: arm/arm64: Move timer/vgic flush/sync under disabled irq Date: Sat, 23 Sep 2017 02:41:57 +0200 Message-Id: <20170923004207.22356-11-cdall@linaro.org> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20170923004207.22356-1-cdall@linaro.org> References: <20170923004207.22356-1-cdall@linaro.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170922_174241_939736_4ED6C12D X-CRM114-Status: GOOD ( 12.30 ) 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 , Catalin Marinas , Will Deacon , kvm@vger.kernel.org, Christoffer Dall 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 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 b9f68e4..27db222 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; } @@ -710,6 +710,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 * pending, as we haven't serviced it yet! @@ -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);