From patchwork Mon May 9 09:54:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 12843275 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 DC42AC433EF for ; Mon, 9 May 2022 09:56:54 +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:Cc:To:From:Subject:References: Mime-Version:Message-Id:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=lm057iw/Fm9lkiT/T3sfDYG6hSyc0lZO6E9oKs9NbPI=; b=k8eBa+gzfIlnTiHDGqSQracgj5 0PsQFWiIx7DNyChdfE5tpxECUm9HkeMvHLYJmFE6s3QkH3kx3w/1hJIBICVsxNKnogzNOTG+UI0va s+xyddfrUOiPxnPmjWXTL+T+0/C9H8/FgI4G+9r2yg16G/sRR6tiumrqc76vba5M4Zj+JNkbQplWJ NPome0kZAVTjVhOdNyEdajJc/73oI/t6/MQvpip5D7eWbLWkH/yS9m5Q3GmVO+gO6GVTiwjx/kQZn HtCD/QS2gNpmLiCsp4HgWBoaCGblY7/ziR5Y4z+QoYHjz4clzE4AFYwiC1xg7c1PZb0DYVDCt7VgT NIE417dQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1no07F-00Dbew-1W; Mon, 09 May 2022 09:55:45 +0000 Received: from mail-wm1-x34a.google.com ([2a00:1450:4864:20::34a]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1no06d-00DbJ5-3O for linux-arm-kernel@lists.infradead.org; Mon, 09 May 2022 09:55:09 +0000 Received: by mail-wm1-x34a.google.com with SMTP id g3-20020a7bc4c3000000b0039409519611so4045593wmk.9 for ; Mon, 09 May 2022 02:55:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=PEsOycq/BqUbO+joqsC0k3/vBLTkPzLqQtgkv0/3GNY=; b=g+c+j7bSPEpCCZWJ0yc4bDlMeBuvKdOYSdoiinO/IP2PCsLySXUFR9IAdRQs1S3tvu PgLelUeE6kn8ZAGqxtbMk1YS+txI61vJkl2yOo5l08EGPAqXYXL9OqlhTUxIcidp9P8z 8ufEBABduWfAeM35eMBwGg7LiRpbESdvrQr8EMslXoQf8Fc/5y5mCPAg1aTLCpuAU3/x MvYNCvh6ohHRKwPFkSOBYdz+PQltzP3+xMSTb9J2Oo8KrkRiiSwaB71oTSjUqrHkFTiJ Xq/kxtHzkmPNttJ2KDJ3qCYCH+BG2GU4xdC8JvCD3VC8owBEPj+/ir2Uu4erigZ2waIl zgMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=PEsOycq/BqUbO+joqsC0k3/vBLTkPzLqQtgkv0/3GNY=; b=aIr/IzZa4dR0vuIMqsdJ5Ve0afdTxWjMwSR1mV+n9bN0UyYBgXwpcRALX5/AGN0/MS svCAgJS1O8GNwwfuS1RU6GOvnnTEhR9Vkjj0DRE0kdjvkQsq2lZQnpx0S8XjbgR0qVGQ f/T89jNAbytQ0szSyD4YsCL81hl4Yc+4TYY0gDgyWFH9sjfYQvgyDi9I5QRqrZDp2D89 Pe3axhNPcVz6Qp5TS9f8F3vJsbG//QcPt7RS/wpmQcrMHAmeSrmTqysYPJd5B04/g1eY 2KGfGSE6CjYrc/GYutSW8KXyyfUegkWo+XBZ1o1KqcPYVStpT8zbM76+/FGqKyaW6V+d lLLg== X-Gm-Message-State: AOAM531mk2q7s18W//QqfEs/w8i50qjgwf0ApjkfEf10FpCxinB81CTJ 75xtDdkpDecvfgcPHoVU7y6Bg4xhfg== X-Google-Smtp-Source: ABdhPJxhIl2GDHdXdY+j+1yX7XXlnMRyoArPiWnJ3Wu4rUcVSpHT51MLikxuqb9gd5v+xhTwR4aNmcQfAw== X-Received: from fuad.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:1613]) (user=tabba job=sendgmr) by 2002:a1c:35c7:0:b0:38e:4c59:6788 with SMTP id c190-20020a1c35c7000000b0038e4c596788mr941361wma.1.1652090104665; Mon, 09 May 2022 02:55:04 -0700 (PDT) Date: Mon, 9 May 2022 09:54:57 +0000 In-Reply-To: <20220509095500.2408785-1-tabba@google.com> Message-Id: <20220509095500.2408785-2-tabba@google.com> Mime-Version: 1.0 References: <20220509095500.2408785-1-tabba@google.com> X-Mailer: git-send-email 2.36.0.512.ge40c2bad7a-goog Subject: [PATCH v2 1/4] KVM: arm64: Wrapper for getting pmu_events From: Fuad Tabba To: kvmarm@lists.cs.columbia.edu Cc: maz@kernel.org, will@kernel.org, qperret@google.com, james.morse@arm.com, alexandru.elisei@arm.com, suzuki.poulose@arm.com, catalin.marinas@arm.com, drjones@redhat.com, linux-arm-kernel@lists.infradead.org, tabba@google.com, kernel-team@android.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220509_025507_171549_FE208BDA X-CRM114-Status: GOOD ( 13.73 ) 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: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Eases migrating away from using hyp data and simplifies the code. No functional change intended. Signed-off-by: Fuad Tabba --- arch/arm64/kvm/pmu.c | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/arch/arm64/kvm/pmu.c b/arch/arm64/kvm/pmu.c index 03a6c1f4a09a..4bd38ff34221 100644 --- a/arch/arm64/kvm/pmu.c +++ b/arch/arm64/kvm/pmu.c @@ -25,21 +25,31 @@ static bool kvm_pmu_switch_needed(struct perf_event_attr *attr) return (attr->exclude_host != attr->exclude_guest); } +static struct kvm_pmu_events *kvm_get_pmu_events(void) +{ + struct kvm_host_data *ctx = this_cpu_ptr_hyp_sym(kvm_host_data); + + if (!ctx) + return NULL; + + return &ctx->pmu_events; +} + /* * Add events to track that we may want to switch at guest entry/exit * time. */ void kvm_set_pmu_events(u32 set, struct perf_event_attr *attr) { - struct kvm_host_data *ctx = this_cpu_ptr_hyp_sym(kvm_host_data); + struct kvm_pmu_events *pmu = kvm_get_pmu_events(); - if (!kvm_arm_support_pmu_v3() || !ctx || !kvm_pmu_switch_needed(attr)) + if (!kvm_arm_support_pmu_v3() || !pmu || !kvm_pmu_switch_needed(attr)) return; if (!attr->exclude_host) - ctx->pmu_events.events_host |= set; + pmu->events_host |= set; if (!attr->exclude_guest) - ctx->pmu_events.events_guest |= set; + pmu->events_guest |= set; } /* @@ -47,13 +57,13 @@ void kvm_set_pmu_events(u32 set, struct perf_event_attr *attr) */ void kvm_clr_pmu_events(u32 clr) { - struct kvm_host_data *ctx = this_cpu_ptr_hyp_sym(kvm_host_data); + struct kvm_pmu_events *pmu = kvm_get_pmu_events(); - if (!kvm_arm_support_pmu_v3() || !ctx) + if (!kvm_arm_support_pmu_v3() || !pmu) return; - ctx->pmu_events.events_host &= ~clr; - ctx->pmu_events.events_guest &= ~clr; + pmu->events_host &= ~clr; + pmu->events_guest &= ~clr; } #define PMEVTYPER_READ_CASE(idx) \ @@ -169,16 +179,16 @@ static void kvm_vcpu_pmu_disable_el0(unsigned long events) */ void kvm_vcpu_pmu_restore_guest(struct kvm_vcpu *vcpu) { - struct kvm_host_data *host; + struct kvm_pmu_events *pmu; u32 events_guest, events_host; if (!kvm_arm_support_pmu_v3() || !has_vhe()) return; preempt_disable(); - host = this_cpu_ptr_hyp_sym(kvm_host_data); - events_guest = host->pmu_events.events_guest; - events_host = host->pmu_events.events_host; + pmu = kvm_get_pmu_events(); + events_guest = pmu->events_guest; + events_host = pmu->events_host; kvm_vcpu_pmu_enable_el0(events_guest); kvm_vcpu_pmu_disable_el0(events_host); @@ -190,15 +200,15 @@ void kvm_vcpu_pmu_restore_guest(struct kvm_vcpu *vcpu) */ void kvm_vcpu_pmu_restore_host(struct kvm_vcpu *vcpu) { - struct kvm_host_data *host; + struct kvm_pmu_events *pmu; u32 events_guest, events_host; if (!kvm_arm_support_pmu_v3() || !has_vhe()) return; - host = this_cpu_ptr_hyp_sym(kvm_host_data); - events_guest = host->pmu_events.events_guest; - events_host = host->pmu_events.events_host; + pmu = kvm_get_pmu_events(); + events_guest = pmu->events_guest; + events_host = pmu->events_host; kvm_vcpu_pmu_enable_el0(events_host); kvm_vcpu_pmu_disable_el0(events_guest); From patchwork Mon May 9 09:54:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 12843276 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 8BF5FC433F5 for ; Mon, 9 May 2022 09:57:02 +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:Cc:To:From:Subject:References: Mime-Version:Message-Id:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=Tuxsqqq8rOOnHPwrDLokmk//ZTM1kZ9CPUBY889uFaE=; b=XSWJS4MS/fMb9KqK7D7F7+P8GB O/oYcXDiZtxKpCo9y5CPKICZ+l1ts2elwLQk3KPhc9eXwwnobybqSqKWFkQvFzJE8+NNUHcVIXRUg 2bYR8hm+l9K9W4HwZMguP4VSrgcmsGiat3IZP+dFuKMkslcrP2khf3BysC4DT1uURZar/9QLeBWrx yvv7DGyE5kuHMcmMCYd/h8knN7jP7TzeU1LT++kSvGvjuZjm3IhckpeD2XPr2LnkSL2XlOzuI3C6D 8x2F2CbjEpmWPhYYVzwtybZjMtfsEUR7VACadLuAVtL4X5J6Gw1OIAfLVs24RpsNMoPh+6zw04Iqh rcXvYgRA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1no07T-00Dbl0-IP; Mon, 09 May 2022 09:55:59 +0000 Received: from mail-wm1-x34a.google.com ([2a00:1450:4864:20::34a]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1no06f-00DbKN-0A for linux-arm-kernel@lists.infradead.org; Mon, 09 May 2022 09:55:10 +0000 Received: by mail-wm1-x34a.google.com with SMTP id i131-20020a1c3b89000000b00393fbb0718bso9684876wma.0 for ; Mon, 09 May 2022 02:55:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=2IAt5dQwtvAG3RiQIn69aK8zHEfSjm99svJSdYnazxI=; b=lpH/+8as281hqZUxcSof0AoV/+svBOb/BCwMDi41vDXH9SwuutgTMB5yi3bUlWwbLJ b39iTziQbmuFtZH6DVCTx3bNMhcx1cmP7ZwYo0jDyx3yR8OKrE51S7ZhQLPx7wLCPezD qw9UBItkGlt2s3mJ2zdwyB0c8RxfS4YgVbrq4sHM3EO9ZRqwDW5MW8T9HgBK+sMUwRe6 RKpjxAJ3ROb9lFSZI1FeIO16FudM8JP1T7t5O1fuWTBlIgNkIPK74yUsCnWdPinSB08k GZJ6SQOV8++xqGdrxAOAP/nozCrVdIt02DO/U8kReiP0oCwqiKxWdvTeq+Zgzi3ku0Fq VZXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=2IAt5dQwtvAG3RiQIn69aK8zHEfSjm99svJSdYnazxI=; b=ZcP0bHjb60ToqxxK043dJ91OJD3M104ms8q6SNz5SMPz+iMphHYVWYuaKnaAfLWVlS A73mK3bJINMK8Gb2VhVLxW7WlkeppjD1ND0JyrsSKiAFM8h+MoSyI8lCYpNIU238S/AV hW1LrVQXSx+jhJEDdqtsqbn7V4vy7axIBNqtozH3isFc92n7Ppvx/N7Nl9twYIKRuJQ2 QBP11RDWFLuRzLAp8TTZsKmEseLYA6jfV12qR5x2tVmZyzyv2L1EucduZDdRLRHuYnS+ dopFmKPSqe0LZxcW+WX+UX8Nq359JJEeJZ5QaJQC9xKS832w2ciRxtIOsCzacfOwza5L be7w== X-Gm-Message-State: AOAM5314bshLAz7fkFgfZhphy5MaQ3vmJXt9I+9EUnJrT0qXcv93r5PC wy2x7FCVGdUnuMVFuJ4DbxL+Y1aJYg== X-Google-Smtp-Source: ABdhPJyC1Cd7Hn9V24FAKY2cwQpn+sYGG7AiMinZ6qOXBOKNN+drqBQy8/nob6iXaFvhd8gd8GjJzPgaqQ== X-Received: from fuad.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:1613]) (user=tabba job=sendgmr) by 2002:a05:600c:501e:b0:394:8b0a:3ec9 with SMTP id n30-20020a05600c501e00b003948b0a3ec9mr6214776wmr.0.1652090107148; Mon, 09 May 2022 02:55:07 -0700 (PDT) Date: Mon, 9 May 2022 09:54:58 +0000 In-Reply-To: <20220509095500.2408785-1-tabba@google.com> Message-Id: <20220509095500.2408785-3-tabba@google.com> Mime-Version: 1.0 References: <20220509095500.2408785-1-tabba@google.com> X-Mailer: git-send-email 2.36.0.512.ge40c2bad7a-goog Subject: [PATCH v2 2/4] KVM: arm64: Repack struct kvm_pmu to reduce size From: Fuad Tabba To: kvmarm@lists.cs.columbia.edu Cc: maz@kernel.org, will@kernel.org, qperret@google.com, james.morse@arm.com, alexandru.elisei@arm.com, suzuki.poulose@arm.com, catalin.marinas@arm.com, drjones@redhat.com, linux-arm-kernel@lists.infradead.org, tabba@google.com, kernel-team@android.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220509_025509_074655_11396047 X-CRM114-Status: GOOD ( 11.76 ) 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: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org struct kvm_pmu has 2 holes using 10 bytes. This is instantiated in all vcpus, so it adds up. This repacking removes all holes. No functional change intended. Signed-off-by: Fuad Tabba --- include/kvm/arm_pmu.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/kvm/arm_pmu.h b/include/kvm/arm_pmu.h index 20193416d214..eaa8290b116f 100644 --- a/include/kvm/arm_pmu.h +++ b/include/kvm/arm_pmu.h @@ -21,12 +21,12 @@ struct kvm_pmc { }; struct kvm_pmu { - int irq_num; + struct irq_work overflow_work; struct kvm_pmc pmc[ARMV8_PMU_MAX_COUNTERS]; DECLARE_BITMAP(chained, ARMV8_PMU_MAX_COUNTER_PAIRS); + int irq_num; bool created; bool irq_level; - struct irq_work overflow_work; }; struct arm_pmu_entry { From patchwork Mon May 9 09:54:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 12843278 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 A5555C433F5 for ; Mon, 9 May 2022 09:58:10 +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:Cc:To:From:Subject:References: Mime-Version:Message-Id:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=+A18eBCfDdIODmb1EUnWJrpCWTuqr+B8fi+iImrSu5g=; b=Md3i1Tu7qRkUmjWABjFjBmBLBj rM2xxJaSgwWUmngFGAXfbEizvhnsZJuMSnTBSivhEZLxhMoWhPM+LN7s8GIcZdG4FrYu4NOQcRDuA 9y/lt6y9nRRzGjK14Ytj+38k/uCObe0KamaTd//SVzSfSyKDLg7SdZtloiH1DAu1Luekfvho/rvzT 31MPl7Fovn7gFR3vWGc2EGg/Nggb15LcgJRNY+M+cNMwjWrPQRP8+4uPPw7MbgHY3gxVUu/yXIU2q o5Ecq04Bhf3TK0Dp51hyRMhQQX6uqaY+NWWZTI7LuDGOswI1TUtypbny3D+QCu1X7RJCaco/24Ush tUcl5/Ag==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1no08Q-00DcCf-KS; Mon, 09 May 2022 09:56:59 +0000 Received: from mail-wm1-x349.google.com ([2a00:1450:4864:20::349]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1no06j-00DbLd-LJ for linux-arm-kernel@lists.infradead.org; Mon, 09 May 2022 09:55:15 +0000 Received: by mail-wm1-x349.google.com with SMTP id r9-20020a1c4409000000b0039468585269so3009848wma.3 for ; Mon, 09 May 2022 02:55:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=2rvTcY9BIidUHBzUA7XA8Q6RA0v9exR5wW0SzS1W6F4=; b=Eu10ysdebvTsP+EnWopeahOnUjwyJ+1XlqpgzFvpqYoMuxqBcRYtM9MsZf9z97wOx8 gjqXjscFJuWywUVv78VDUwtpcTQAfNqVUcS24PhrHM3Cj4+x3IiRg6b0FpHLRV+7Pq3o LI/iafDStMJ6z9O5zsvnsmSzBzpiHFMzDdu8huJweJRCXuWJdGYeBNq1B4/slrB47k3r qchh1z9t3RzkKdVGB1ObsNhyOlE0C/fjeCajktoFl8Ydraf/1JIO56rCn/9U5BEHPiPi eXDfnBop4YIQnxDy9+kH2bbf40OdA4IPid/e4xEX8wovXm4hyComdVt1APcyENrzYEaP /QpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=2rvTcY9BIidUHBzUA7XA8Q6RA0v9exR5wW0SzS1W6F4=; b=ZjtrL2RP3jcnl9eSqlSL9v8TaB+UCos4FzFbrnsN7mlYVqQBmOkvaq3s0omKtLruWQ WVD06HpF84Z3DYajIteswbCml+o39VWHib+08z47oyNbexu05GUJwkapHlRLXNQXoWi6 pkizl1sDeiL3so9IRVCN+UGKq1ovbW0SZ3nAxF04BsC/wBxWSLokBk4VgdZ5Oj635ZpW xqGylCYCIZzNE0dOujujS70QFi52CmqXjYE2yoJGxLManG9aHavQwKIRJ8zA7Xo911WM Py/1hvmzy3SRVJebQ/S1LJT4lqCs8UQ6p2Thlr+DTSfAVZG5E3drkaTc5ytngVcs+hDK RHJg== X-Gm-Message-State: AOAM531RXSMMCM0oo1ho0LVFUhvO3UGj9rXmSCfdfKk//jAvRDYn6t3T gJkVkYajSp3krPRn4Fj31ZjvdC7a+Q== X-Google-Smtp-Source: ABdhPJzjTAgXr2h2XYZ99cUNQCnmXnvSrT1v3AP89aVNWj1oExbUdjEjmTGtaH0roBRZm47fkEAAbVhX8g== X-Received: from fuad.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:1613]) (user=tabba job=sendgmr) by 2002:a7b:cb47:0:b0:393:dd9f:e64a with SMTP id v7-20020a7bcb47000000b00393dd9fe64amr21391076wmj.170.1652090109396; Mon, 09 May 2022 02:55:09 -0700 (PDT) Date: Mon, 9 May 2022 09:54:59 +0000 In-Reply-To: <20220509095500.2408785-1-tabba@google.com> Message-Id: <20220509095500.2408785-4-tabba@google.com> Mime-Version: 1.0 References: <20220509095500.2408785-1-tabba@google.com> X-Mailer: git-send-email 2.36.0.512.ge40c2bad7a-goog Subject: [PATCH v2 3/4] KVM: arm64: Pass pmu events to hyp via vcpu From: Fuad Tabba To: kvmarm@lists.cs.columbia.edu Cc: maz@kernel.org, will@kernel.org, qperret@google.com, james.morse@arm.com, alexandru.elisei@arm.com, suzuki.poulose@arm.com, catalin.marinas@arm.com, drjones@redhat.com, linux-arm-kernel@lists.infradead.org, tabba@google.com, kernel-team@android.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220509_025513_788095_2F6D266C X-CRM114-Status: GOOD ( 18.15 ) 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: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Instead of the host accessing hyp data directly, pass the pmu events of the current cpu to hyp via the vcpu. This adds 64 bits (in two fields) to the vcpu that need to be synced before every vcpu run in nvhe and protected modes. However, it isolates the hypervisor from the host, which allows us to use pmu in protected mode in a subsequent patch. No functional change intended. Signed-off-by: Fuad Tabba --- arch/arm64/include/asm/kvm_host.h | 8 ++------ arch/arm64/kvm/hyp/nvhe/switch.c | 20 ++++++-------------- arch/arm64/kvm/pmu-emul.c | 3 +++ arch/arm64/kvm/pmu.c | 12 ++++-------- include/kvm/arm_pmu.h | 6 ++++++ 5 files changed, 21 insertions(+), 28 deletions(-) diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h index dfd360404dd8..90476e713643 100644 --- a/arch/arm64/include/asm/kvm_host.h +++ b/arch/arm64/include/asm/kvm_host.h @@ -273,14 +273,8 @@ struct kvm_cpu_context { struct kvm_vcpu *__hyp_running_vcpu; }; -struct kvm_pmu_events { - u32 events_host; - u32 events_guest; -}; - struct kvm_host_data { struct kvm_cpu_context host_ctxt; - struct kvm_pmu_events pmu_events; }; struct kvm_host_psci_config { @@ -763,6 +757,7 @@ void kvm_set_sei_esr(struct kvm_vcpu *vcpu, u64 syndrome); struct kvm_vcpu *kvm_mpidr_to_vcpu(struct kvm *kvm, unsigned long mpidr); DECLARE_KVM_HYP_PER_CPU(struct kvm_host_data, kvm_host_data); +DECLARE_PER_CPU(struct kvm_pmu_events, kvm_pmu_events); static inline void kvm_init_host_cpu_context(struct kvm_cpu_context *cpu_ctxt) { @@ -821,6 +816,7 @@ void kvm_arch_vcpu_put_debug_state_flags(struct kvm_vcpu *vcpu); void kvm_set_pmu_events(u32 set, struct perf_event_attr *attr); void kvm_clr_pmu_events(u32 clr); +struct kvm_pmu_events *kvm_get_pmu_events(void); void kvm_vcpu_pmu_restore_guest(struct kvm_vcpu *vcpu); void kvm_vcpu_pmu_restore_host(struct kvm_vcpu *vcpu); #else diff --git a/arch/arm64/kvm/hyp/nvhe/switch.c b/arch/arm64/kvm/hyp/nvhe/switch.c index 0716163313d6..c61120ec8d1a 100644 --- a/arch/arm64/kvm/hyp/nvhe/switch.c +++ b/arch/arm64/kvm/hyp/nvhe/switch.c @@ -153,13 +153,9 @@ static void __hyp_vgic_restore_state(struct kvm_vcpu *vcpu) /* * Disable host events, enable guest events */ -static bool __pmu_switch_to_guest(struct kvm_cpu_context *host_ctxt) +static bool __pmu_switch_to_guest(struct kvm_vcpu *vcpu) { - struct kvm_host_data *host; - struct kvm_pmu_events *pmu; - - host = container_of(host_ctxt, struct kvm_host_data, host_ctxt); - pmu = &host->pmu_events; + struct kvm_pmu_events *pmu = &vcpu->arch.pmu.events; if (pmu->events_host) write_sysreg(pmu->events_host, pmcntenclr_el0); @@ -173,13 +169,9 @@ static bool __pmu_switch_to_guest(struct kvm_cpu_context *host_ctxt) /* * Disable guest events, enable host events */ -static void __pmu_switch_to_host(struct kvm_cpu_context *host_ctxt) +static void __pmu_switch_to_host(struct kvm_vcpu *vcpu) { - struct kvm_host_data *host; - struct kvm_pmu_events *pmu; - - host = container_of(host_ctxt, struct kvm_host_data, host_ctxt); - pmu = &host->pmu_events; + struct kvm_pmu_events *pmu = &vcpu->arch.pmu.events; if (pmu->events_guest) write_sysreg(pmu->events_guest, pmcntenclr_el0); @@ -304,7 +296,7 @@ int __kvm_vcpu_run(struct kvm_vcpu *vcpu) host_ctxt->__hyp_running_vcpu = vcpu; guest_ctxt = &vcpu->arch.ctxt; - pmu_switch_needed = __pmu_switch_to_guest(host_ctxt); + pmu_switch_needed = __pmu_switch_to_guest(vcpu); __sysreg_save_state_nvhe(host_ctxt); /* @@ -366,7 +358,7 @@ int __kvm_vcpu_run(struct kvm_vcpu *vcpu) __debug_restore_host_buffers_nvhe(vcpu); if (pmu_switch_needed) - __pmu_switch_to_host(host_ctxt); + __pmu_switch_to_host(vcpu); /* Returning to host will clear PSR.I, remask PMR if needed */ if (system_uses_irq_prio_masking()) diff --git a/arch/arm64/kvm/pmu-emul.c b/arch/arm64/kvm/pmu-emul.c index 3dc990ac4f44..08d0551a4e43 100644 --- a/arch/arm64/kvm/pmu-emul.c +++ b/arch/arm64/kvm/pmu-emul.c @@ -406,6 +406,9 @@ static void kvm_pmu_update_state(struct kvm_vcpu *vcpu) if (!kvm_vcpu_has_pmu(vcpu)) return; + if (!has_vhe()) + pmu->events = *kvm_get_pmu_events(); + overflow = !!kvm_pmu_overflow_status(vcpu); if (pmu->irq_level == overflow) return; diff --git a/arch/arm64/kvm/pmu.c b/arch/arm64/kvm/pmu.c index 4bd38ff34221..c19bf6e4969e 100644 --- a/arch/arm64/kvm/pmu.c +++ b/arch/arm64/kvm/pmu.c @@ -5,7 +5,8 @@ */ #include #include -#include + +DEFINE_PER_CPU(struct kvm_pmu_events, kvm_pmu_events); /* * Given the perf event attributes and system type, determine @@ -25,14 +26,9 @@ static bool kvm_pmu_switch_needed(struct perf_event_attr *attr) return (attr->exclude_host != attr->exclude_guest); } -static struct kvm_pmu_events *kvm_get_pmu_events(void) +struct kvm_pmu_events *kvm_get_pmu_events(void) { - struct kvm_host_data *ctx = this_cpu_ptr_hyp_sym(kvm_host_data); - - if (!ctx) - return NULL; - - return &ctx->pmu_events; + return this_cpu_ptr(&kvm_pmu_events); } /* diff --git a/include/kvm/arm_pmu.h b/include/kvm/arm_pmu.h index eaa8290b116f..35a0903cae32 100644 --- a/include/kvm/arm_pmu.h +++ b/include/kvm/arm_pmu.h @@ -20,8 +20,14 @@ struct kvm_pmc { struct perf_event *perf_event; }; +struct kvm_pmu_events { + u32 events_host; + u32 events_guest; +}; + struct kvm_pmu { struct irq_work overflow_work; + struct kvm_pmu_events events; struct kvm_pmc pmc[ARMV8_PMU_MAX_COUNTERS]; DECLARE_BITMAP(chained, ARMV8_PMU_MAX_COUNTER_PAIRS); int irq_num; From patchwork Mon May 9 09:55:00 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 12843277 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 37AF1C433EF for ; Mon, 9 May 2022 09:57:34 +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:Cc:To:From:Subject:References: Mime-Version:Message-Id:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=5OcCK5Fc4GtKsDsOtpoYwDkYqHjtC1oJjo+Y5Ji46WE=; b=VOersVwDmB8UZSKsJmcH0h5XcY tbAJQGo02FsZl69+PfWodS34+qL+ngCAbgZCz9TLmwABEGCix9LQA9MOYD75fVm8vqQqwiIuiCauq 7saHUB/Zgk/tXLNhXnnY1jlDt7mZYjeqZghwNpu9FvNyCKMtNXcUH23xSTb1Dh/KOqQdPX1NZ+TjZ HT2cRH7caUHuL9ZtAw+cOXCW0HcJhtaB15AFge8Y7zhOrBUQJvXTvjfHQn0j/mcmdsqIRxaeYvdO4 GPG08RX+mn6VNi+tCqFmZIIgoLs6AeMsvnYytc1TJLL2QzL1QwCVAo6XhJZYihUhON4O5S+b1HN0k tOPnQufQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1no07y-00Dbys-Ay; Mon, 09 May 2022 09:56:30 +0000 Received: from mail-wm1-x349.google.com ([2a00:1450:4864:20::349]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1no06j-00DbMZ-IG for linux-arm-kernel@lists.infradead.org; Mon, 09 May 2022 09:55:15 +0000 Received: by mail-wm1-x349.google.com with SMTP id z23-20020a05600c221700b003942fd37764so9653004wml.8 for ; Mon, 09 May 2022 02:55:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=PhvZKBoe39U/3XMHmUVWsW2UFiJi51cRGJG2oMiPjk0=; b=gy9Pr03wH/mN/XB3LzRNi4hBUvdoPadX+6gSpKuCnO8uMZaRwee/T/cXmhwHPp7jOf UXJsDe4l5e5cWjkkXmPZ2VygdY5RrxCx4vLOlHuU4uWoxadyDvAiVPXbzEGX8PfF/I49 8X0EwOD9sETBcgUs4v+jKjuwUVo0OLMz5UQcbAL4VgtjqJQAXSjKbdh932vy1h7GQhDw k2dsFcS6jW843fUNI9r74FSxB569wCmInL4kHIoaA7FUMoSVmU5bMkfmKXNQtyjaw6vh OeRDNDDn3tM3aT8iyen4UTmwruuADa7fq9JoG5BbmOdevUKa/P1TlUVOXgAErFdIx0ZU gLSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=PhvZKBoe39U/3XMHmUVWsW2UFiJi51cRGJG2oMiPjk0=; b=GeYG5l9oLnyc/oKj7d2b1TQMmArEjcESboTrsByN+MzydiUMYQWXu93vtIM3z7Z4Sp cSAqM7e5d9LgRPfK4rFa8Bu8sqgWhaWh8oKkhO8q4NfYWZ6YrGBOwdZ99x0jyMJnLUuF dqbIUEuOMxBzobeR9xbkVxVeeZOUp9sgMcedPoVq4wunIPhQ2Dk4c9olYNlRRH1TEBYj MgW02Blng2O5nOKKO2q3/8iY/ca0PSPodtmIM99UpT008oKHBi8horHVXGdeNjcqfs5Q 2tVVZYTC3LUKIYmur3sbQUULjZ6dUrhh5gZF+LnbjijRNdS5FS0xtWqEp+ncR38gGSTG RN9A== X-Gm-Message-State: AOAM530WrdvJPhr5aHGxbkpZijM7mNf0lVmRisGj0xX7ZOIOO/eJAVkc bZuOHKy077sBV3/kRyS4PIQc0Ry5yA== X-Google-Smtp-Source: ABdhPJyQpUMf+PyLIdfmlviF5r7R4hnQrrGQnxivrS16KdcOz4sztzVanuIea+fT+sX8qxj68vsB+2uq4Q== X-Received: from fuad.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:1613]) (user=tabba job=sendgmr) by 2002:a05:600c:2102:b0:394:2765:580c with SMTP id u2-20020a05600c210200b003942765580cmr15172324wml.150.1652090111772; Mon, 09 May 2022 02:55:11 -0700 (PDT) Date: Mon, 9 May 2022 09:55:00 +0000 In-Reply-To: <20220509095500.2408785-1-tabba@google.com> Message-Id: <20220509095500.2408785-5-tabba@google.com> Mime-Version: 1.0 References: <20220509095500.2408785-1-tabba@google.com> X-Mailer: git-send-email 2.36.0.512.ge40c2bad7a-goog Subject: [PATCH v2 4/4] KVM: arm64: Reenable pmu in Protected Mode From: Fuad Tabba To: kvmarm@lists.cs.columbia.edu Cc: maz@kernel.org, will@kernel.org, qperret@google.com, james.morse@arm.com, alexandru.elisei@arm.com, suzuki.poulose@arm.com, catalin.marinas@arm.com, drjones@redhat.com, linux-arm-kernel@lists.infradead.org, tabba@google.com, kernel-team@android.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220509_025513_692283_E7ECE009 X-CRM114-Status: GOOD ( 11.26 ) 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: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Now that the pmu code does not access hyp data, reenable it in protected mode. No functional change intended outside of protected mode. Signed-off-by: Fuad Tabba --- arch/arm64/kvm/pmu-emul.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/arch/arm64/kvm/pmu-emul.c b/arch/arm64/kvm/pmu-emul.c index 08d0551a4e43..cf15d510c06d 100644 --- a/arch/arm64/kvm/pmu-emul.c +++ b/arch/arm64/kvm/pmu-emul.c @@ -777,8 +777,7 @@ void kvm_host_pmu_init(struct arm_pmu *pmu) { struct arm_pmu_entry *entry; - if (pmu->pmuver == 0 || pmu->pmuver == ID_AA64DFR0_PMUVER_IMP_DEF || - is_protected_kvm_enabled()) + if (pmu->pmuver == 0 || pmu->pmuver == ID_AA64DFR0_PMUVER_IMP_DEF) return; mutex_lock(&arm_pmus_lock);