Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp5953930rdb; Thu, 14 Dec 2023 04:42:21 -0800 (PST) X-Google-Smtp-Source: AGHT+IHpXTSGmgEB+Rmhzv1aPR4doC2hYUijEIO9Sxsuj665psTrCnT0sKlmYKpctcWKposxxG5F X-Received: by 2002:a05:6a20:969b:b0:186:2389:a73e with SMTP id hp27-20020a056a20969b00b001862389a73emr9955594pzc.55.1702557741175; Thu, 14 Dec 2023 04:42:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702557741; cv=none; d=google.com; s=arc-20160816; b=OoEZ6eQJyq0gB5KJfW1PhlUmbTihzMCPU8fL9AtMErCQf5Ttugnh+Vljsr1QnX1mKC M9zoctsdPgRKz/c6UBZCWKC8PXqr4DicyaEOQljcQpWGyvaUbVcMG0mdWXp1UO+CtgSF A8qNfSOJhHJlvxsKknM2ufYnadXZ3mco2SnJvdCWQ5/qWiwApo7JIfBQa2aIs4ctKC24 hxDS29C+7JK4A2YrrcWwEdUJGq3K9L1p6Nv7B2wlZU05RY8/oDKerZDrk9w1o2uUktu2 L3zs/idHnTNBbtZbvKNAjxzN+UzMIaNRGCHUfZv5OhNqmk8sSNXHqKHWX9PEduxEpfLb Ux3Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=Yws50ylq1EjUkokTIkYOP2sTsutSEl10pAQ1LytLppw=; fh=oOBf863YCUz5nxlCZQoxyjaLXR9Zm0DTQlRqUgQrhSo=; b=KmSnfaO6lvMm6Ej1BI0HdVPM/LNE0F/FBS2FAJYVKkw0duBw6/pbdB8JYI2S1vA+cL KZ0M1gZD4fcVUv6obrgRmpgJ731/kXCl5R2FaYucI7tyMJLQYCniB0Z1IuAXmHAdAJZo o0bbNvhr0v5GBMs7KPS4IDyIfdnKziOoSM/93HjKujgRc4YUUoeonVdEntEbAlfr7aw/ sstLxV5H1KYJlAdL7Kfy/0nwzmcclTXvWRP/5pM1hY+m8Fh5wyze5yVPbxqAD1zhonYV GTCpzTlI7w0GV6pP/7y6XVvXmOr0T9kcwQ0SzORwQ01jUjwbTEPaR4TtMmfA9btd9yuN g5qw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@brainfault-org.20230601.gappssmtp.com header.s=20230601 header.b=KgUHQ5Fi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id i13-20020a63e90d000000b005bd3c9a9528si11097184pgh.263.2023.12.14.04.42.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 Dec 2023 04:42:21 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; dkim=pass header.i=@brainfault-org.20230601.gappssmtp.com header.s=20230601 header.b=KgUHQ5Fi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id C3CC08025D60; Thu, 14 Dec 2023 04:42:19 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1573084AbjLNMmF (ORCPT + 99 others); Thu, 14 Dec 2023 07:42:05 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54912 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1573056AbjLNMmE (ORCPT ); Thu, 14 Dec 2023 07:42:04 -0500 Received: from mail-pj1-x1035.google.com (mail-pj1-x1035.google.com [IPv6:2607:f8b0:4864:20::1035]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C212711A for ; Thu, 14 Dec 2023 04:42:09 -0800 (PST) Received: by mail-pj1-x1035.google.com with SMTP id 98e67ed59e1d1-28ad7a26f4aso2511856a91.0 for ; Thu, 14 Dec 2023 04:42:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brainfault-org.20230601.gappssmtp.com; s=20230601; t=1702557729; x=1703162529; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=Yws50ylq1EjUkokTIkYOP2sTsutSEl10pAQ1LytLppw=; b=KgUHQ5FigzSTSXeBa5FBulKagCWsuMvWQ+tLOd/DRC1hUjqA5K8v8+1YUlcFjtaPYG yiMi0THxvA1xiaiuWy4u5DbOM+E377lnLtUNin7AzEfEycfQfrgXf26ao9orrMGQNbKT EbEX8iB2aZn64tZqfGJwGywlaUqG0V4ND0t4cJRa8Zz9qbiLw7BiqrR/hajaOBvrvFNN U8FAAbneY/s0HuqETgmAOh3ltBlDATN4wLsH9ieAO/h46ptU0MyhgvPpXTMUU8i1eT3a wnkmSdw1UWRM4UHCVeq7bI+vANP7tNBhrNK26X4aeig0c6uFUorYjDWwsJmfVZ3gfb+E FMow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702557729; x=1703162529; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Yws50ylq1EjUkokTIkYOP2sTsutSEl10pAQ1LytLppw=; b=opplEEX6I+flEGJ+G/AcnkHxJMcdc8tT4USax37sINucsgbWt21Vax/zcW+K6NkogW UlFWSXHNvBxpEohZrLKTuJ2DWAIonpsi8Kj7CSnOySbC20T8fiSqm6uW2Xsh4nr5kB1D RTR1WW3cT3sxum+cHNrGKLRx0tZQqk8q1KoNYi2eZ7lTQrBllfAGNN+sAmzrT/3MIKsK jfVzBs25kBngcf0m+IsN9U3Kagf52HaLF15wjcfRmk/iUuAeZ9/Rola62F10m44Uc2oB ZZrSFh8pmSWKow7Bcl4PvPFV7wJdeFyaunG+NbB8T29NQL2Gv4pzFlr9yASe63o4Mncf 4UJQ== X-Gm-Message-State: AOJu0YxTncEtg9cn3UiprJ3KunomZ7JnSQ3OFJeJ5u4RzXnbzErF/fHq T9pnE0RfrVT6IvwyRchhDqcu9VQ2ja+6XL1YI/7tBw== X-Received: by 2002:a17:90a:c697:b0:28a:dfa6:f1d3 with SMTP id n23-20020a17090ac69700b0028adfa6f1d3mr2094943pjt.0.1702557729115; Thu, 14 Dec 2023 04:42:09 -0800 (PST) MIME-Version: 1.0 References: <20231205024310.1593100-1-atishp@rivosinc.com> <20231205024310.1593100-10-atishp@rivosinc.com> In-Reply-To: <20231205024310.1593100-10-atishp@rivosinc.com> From: Anup Patel Date: Thu, 14 Dec 2023 18:11:57 +0530 Message-ID: Subject: Re: [RFC 9/9] RISC-V: KVM: Support 64 bit firmware counters on RV32 To: Atish Patra Cc: linux-kernel@vger.kernel.org, Alexandre Ghiti , Andrew Jones , Atish Patra , Conor Dooley , Guo Ren , Icenowy Zheng , kvm-riscv@lists.infradead.org, kvm@vger.kernel.org, linux-riscv@lists.infradead.org, Mark Rutland , Palmer Dabbelt , Paul Walmsley , Will Deacon Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Thu, 14 Dec 2023 04:42:19 -0800 (PST) On Tue, Dec 5, 2023 at 8:13=E2=80=AFAM Atish Patra wr= ote: > > The SBI v2.0 introduced a fw_read_hi function to read 64 bit firmware > counters for RV32 based systems. > > Add infrastructure to support that. > > Signed-off-by: Atish Patra > --- > arch/riscv/include/asm/kvm_vcpu_pmu.h | 6 ++++- > arch/riscv/kvm/vcpu_pmu.c | 38 ++++++++++++++++++++++++++- > arch/riscv/kvm/vcpu_sbi_pmu.c | 7 +++++ > 3 files changed, 49 insertions(+), 2 deletions(-) > > diff --git a/arch/riscv/include/asm/kvm_vcpu_pmu.h b/arch/riscv/include/a= sm/kvm_vcpu_pmu.h > index 64c75acad6ba..dd655315e706 100644 > --- a/arch/riscv/include/asm/kvm_vcpu_pmu.h > +++ b/arch/riscv/include/asm/kvm_vcpu_pmu.h > @@ -20,7 +20,7 @@ static_assert(RISCV_KVM_MAX_COUNTERS <=3D 64); > > struct kvm_fw_event { > /* Current value of the event */ > - unsigned long value; > + uint64_t value; > > /* Event monitoring status */ > bool started; > @@ -91,6 +91,10 @@ int kvm_riscv_vcpu_pmu_ctr_cfg_match(struct kvm_vcpu *= vcpu, unsigned long ctr_ba > struct kvm_vcpu_sbi_return *retdata)= ; > int kvm_riscv_vcpu_pmu_ctr_read(struct kvm_vcpu *vcpu, unsigned long cid= x, > struct kvm_vcpu_sbi_return *retdata); > +#if defined(CONFIG_32BIT) > +int kvm_riscv_vcpu_pmu_fw_ctr_read_hi(struct kvm_vcpu *vcpu, unsigned lo= ng cidx, > + struct kvm_vcpu_sbi_return *retdata); > +#endif > void kvm_riscv_vcpu_pmu_init(struct kvm_vcpu *vcpu); > int kvm_riscv_vcpu_pmu_setup_snapshot(struct kvm_vcpu *vcpu, unsigned lo= ng saddr_low, > unsigned long saddr_high, unsigned= long flags, > diff --git a/arch/riscv/kvm/vcpu_pmu.c b/arch/riscv/kvm/vcpu_pmu.c > index 86c8e92f92d3..5b4a93647256 100644 > --- a/arch/riscv/kvm/vcpu_pmu.c > +++ b/arch/riscv/kvm/vcpu_pmu.c > @@ -195,6 +195,28 @@ static int pmu_get_pmc_index(struct kvm_pmu *pmu, un= signed long eidx, > > return kvm_pmu_get_programmable_pmc_index(pmu, eidx, cbase, cmask= ); > } Newline here. > +#if defined(CONFIG_32BIT) Just like other patches, let's use IS_ENABLED() here. > +static int pmu_fw_ctr_read_hi(struct kvm_vcpu *vcpu, unsigned long cidx, > + unsigned long *out_val) > +{ > + struct kvm_pmu *kvpmu =3D vcpu_to_pmu(vcpu); > + struct kvm_pmc *pmc; > + u64 enabled, running; > + int fevent_code; > + > + pmc =3D &kvpmu->pmc[cidx]; > + > + if (pmc->cinfo.type !=3D SBI_PMU_CTR_TYPE_FW) > + return -EINVAL; > + > + fevent_code =3D get_event_code(pmc->event_idx); > + pmc->counter_val =3D kvpmu->fw_event[fevent_code].value; > + > + *out_val =3D pmc->counter_val >> 32; > + > + return 0; > +} > +#endif > > static int pmu_ctr_read(struct kvm_vcpu *vcpu, unsigned long cidx, > unsigned long *out_val) > @@ -696,6 +718,20 @@ int kvm_riscv_vcpu_pmu_ctr_cfg_match(struct kvm_vcpu= *vcpu, unsigned long ctr_ba > return 0; > } > > +#if defined(CONFIG_32BIT) > +int kvm_riscv_vcpu_pmu_fw_ctr_read_hi(struct kvm_vcpu *vcpu, unsigned lo= ng cidx, > + struct kvm_vcpu_sbi_return *retdata) > +{ > + int ret; > + > + ret =3D pmu_fw_ctr_read_hi(vcpu, cidx, &retdata->out_val); > + if (ret =3D=3D -EINVAL) > + retdata->err_val =3D SBI_ERR_INVALID_PARAM; > + > + return 0; > +} > +#endif > + > int kvm_riscv_vcpu_pmu_ctr_read(struct kvm_vcpu *vcpu, unsigned long cid= x, > struct kvm_vcpu_sbi_return *retdata) > { > @@ -769,7 +805,7 @@ void kvm_riscv_vcpu_pmu_init(struct kvm_vcpu *vcpu) > pmc->cinfo.csr =3D CSR_CYCLE + i; > } else { > pmc->cinfo.type =3D SBI_PMU_CTR_TYPE_FW; > - pmc->cinfo.width =3D BITS_PER_LONG - 1; > + pmc->cinfo.width =3D 63; > } > } > > diff --git a/arch/riscv/kvm/vcpu_sbi_pmu.c b/arch/riscv/kvm/vcpu_sbi_pmu.= c > index 77c20a61fd7d..0cd051d5a448 100644 > --- a/arch/riscv/kvm/vcpu_sbi_pmu.c > +++ b/arch/riscv/kvm/vcpu_sbi_pmu.c > @@ -64,6 +64,13 @@ static int kvm_sbi_ext_pmu_handler(struct kvm_vcpu *vc= pu, struct kvm_run *run, > case SBI_EXT_PMU_COUNTER_FW_READ: > ret =3D kvm_riscv_vcpu_pmu_ctr_read(vcpu, cp->a0, retdata= ); > break; > + case SBI_EXT_PMU_COUNTER_FW_READ_HI: > +#if defined(CONFIG_32BIT) Same as above, use IS_ENABLED() here. > + ret =3D kvm_riscv_vcpu_pmu_fw_ctr_read_hi(vcpu, cp->a0, r= etdata); > +#else > + retdata->out_val =3D 0; > +#endif > + break; > case SBI_EXT_PMU_SNAPSHOT_SET_SHMEM: > ret =3D kvm_riscv_vcpu_pmu_setup_snapshot(vcpu, cp->a0, c= p->a1, cp->a2, retdata); > break; > -- > 2.34.1 > Apart from minor nits above, this looks good to me. Reviewed-by: Anup Patel Regards, Anup