Received: by 2002:a05:6358:c692:b0:131:369:b2a3 with SMTP id fe18csp4344194rwb; Mon, 31 Jul 2023 05:40:17 -0700 (PDT) X-Google-Smtp-Source: APBJJlHLAqXAG1BuIQW/CIST5Htg3m9n2DrYkyGs/2LttmTBVLyIBvekkIMISKN0V3jGwYExErvc X-Received: by 2002:a17:906:1099:b0:99b:8c6f:f3af with SMTP id u25-20020a170906109900b0099b8c6ff3afmr5269309eju.12.1690807217325; Mon, 31 Jul 2023 05:40:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690807217; cv=none; d=google.com; s=arc-20160816; b=nmKJKa0/QU5kBLlUgIfywNiNYiSIl3SDfcNjAFbJL0zXWBtpvZpvqxi10eGsWrhiq+ Wd+QN4G4B6HTvdMLcpNBZPrM6Xdu31lSeWDXIxiIjCAf32qSIGPFJr41rcl4xE1/ds+I 4a4eqiWZ2bv6/+9Mjc0+DK1cDsCIP1RlfSM7A8t6zHC2KJ23R+Sca1FDxvmO6eavAZ71 Yn3L5S4qXFjrtlJrmCcSojGOcTGJfXT9sS7q2bSx7bQ6y2uAqmsXI+tyqi2ONn6xZ6xp KIYQBuDRBbeB/EZWgMRsA+OckjMWd4KQmcKlAPtvIq/O3p4RrAcaw5JAQ/2goBVsXiGh cv8w== 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=ML7AinUDVA2CqBB8483zq1nBkxRS460v6WFiKGGmbXw=; fh=Z9wQm4qMRkdyfO4NU3f84uzAGkZfNrcJbUO1o6YaFZU=; b=Kxn4ZAANFSWsVd+DwNP/Kv58yEyMa2nhOjRT51FWM7m4aJF3VkxAOYj1bOQGENL4hh LCudoYv+ICj13p3myM5BNR9JNuM8rBrCucYldA+/gam5SB7QRiWhdjKzqVI+rUTua+x1 UGoNMFRsd60Wpu4LGyV6LTBAmAjX8gqici8JpeYCOp+E75mTrA36gwZ7/ZEVH8ZelQH2 YdKRwi4XqvEUvZR2K4Bhw+51mtvR0o/YWVEOxqB77VrzWff0xvXE95nRg7FwqhWDZZFz mOVa5MNa8anlcxSGQ9T7/EnLxoNqa5fnH+fWe53Ykc/e0Kn9IvHM7sb26TzBHBl+zLUK p91A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@rivosinc-com.20221208.gappssmtp.com header.s=20221208 header.b=HDjhzaPl; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id j13-20020a17090686cd00b0098d2f715b89si2915947ejy.102.2023.07.31.05.39.52; Mon, 31 Jul 2023 05:40:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@rivosinc-com.20221208.gappssmtp.com header.s=20221208 header.b=HDjhzaPl; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231287AbjGaK2L (ORCPT + 99 others); Mon, 31 Jul 2023 06:28:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60276 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232431AbjGaK2A (ORCPT ); Mon, 31 Jul 2023 06:28:00 -0400 Received: from mail-wm1-x331.google.com (mail-wm1-x331.google.com [IPv6:2a00:1450:4864:20::331]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E6552E3 for ; Mon, 31 Jul 2023 03:27:58 -0700 (PDT) Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-3fc0aecf15bso48714615e9.1 for ; Mon, 31 Jul 2023 03:27:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20221208.gappssmtp.com; s=20221208; t=1690799277; x=1691404077; 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=ML7AinUDVA2CqBB8483zq1nBkxRS460v6WFiKGGmbXw=; b=HDjhzaPlqiuA0S3baU9N7AYN1C6DUjgtDALoeJq5aufWUnbgGfC7ri/9FPQIqGzKbr a4Svo1r7W9I/U45tg6vynpKwViqCyi560TPOCUdBIv3WicpMwGVfcjERyOxlBw+mNugr D3TNX+y/ZS8TAIXOc5N7gD6//JnB8rEIaEJ6+MldyvnVb3drV/zksbkcg/thXeyRtqn0 E6NIZzlCLOeAaX7g0CxdtVFcKfhts6SI//feucztq+DAw0weSyfty0scu1tLedenORu6 ASq+u0mArosRDhMuUYuo1tU82hiiEaKFG2lb9u0XQJ4fsvOEsGH3dBJsFjAQjAjI/3nM 4CEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690799277; x=1691404077; 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=ML7AinUDVA2CqBB8483zq1nBkxRS460v6WFiKGGmbXw=; b=PKJkfP/vAlYbRiz/F3EUjk4u1pIScRpdZPwVtbpcxirPJhCu13tf4CfPzWC+WYYLVM Xyc2/PsOPa+WK1suCA5++8yBurId2d1/igc5+bKQzsxIo5Hu+nc5EXvtjz23YGQw7lPL cyPcI9erRGNnklMxGfjCHx20vDuk24zmvramXIQ/FpOK7PD2cl9tU9P4VfQW/c4o//3S 6sSOfRAMIbhj0sdcyTO23dJPw5gPWxJ9wRJ2/u1nW3k6PP9YPPEJrEf0jKZxfAdSSTMz SNzL1ZkC2BLeF51fyjNKCtKxMh9znC/nkR1T1LqsJDdDv9tyX9pIvxF5lKR+1voWv2CN iIAg== X-Gm-Message-State: ABy/qLZkMi4v7Is1JMtx7vhemNjvoh2s8yT5pe1j6J9CQo55bmcbZqyF oS7wpdDVDcqiY9YgG+gEpdR/oie5lxSZlseoYAsJXA== X-Received: by 2002:a5d:554b:0:b0:317:6816:578c with SMTP id g11-20020a5d554b000000b003176816578cmr8613111wrw.5.1690799277292; Mon, 31 Jul 2023 03:27:57 -0700 (PDT) MIME-Version: 1.0 References: <20230727141428.962286-1-alexghiti@rivosinc.com> <20230727141428.962286-10-alexghiti@rivosinc.com> In-Reply-To: From: Alexandre Ghiti Date: Mon, 31 Jul 2023 12:27:46 +0200 Message-ID: Subject: Re: [PATCH v4 09/10] tools: lib: perf: Implement riscv mmap support To: Ian Rogers , Palmer Dabbelt Cc: Jonathan Corbet , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Paul Walmsley , Palmer Dabbelt , Albert Ou , Atish Patra , Anup Patel , Will Deacon , Rob Herring , Andrew Jones , =?UTF-8?Q?R=C3=A9mi_Denis=2DCourmont?= , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-riscv@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Atish Patra 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_PASS, T_SCC_BODY_TEXT_LINE autolearn=unavailable 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 On Mon, Jul 31, 2023 at 12:15=E2=80=AFPM Alexandre Ghiti wrote: > > Hi Ian, > > On Fri, Jul 28, 2023 at 7:53=E2=80=AFPM Ian Rogers w= rote: > > > > On Thu, Jul 27, 2023 at 7:28=E2=80=AFAM Alexandre Ghiti wrote: > > > > > > riscv now supports mmaping hardware counters so add what's needed to > > > take advantage of that in libperf. > > > > > > Signed-off-by: Alexandre Ghiti > > > Reviewed-by: Andrew Jones > > > Reviewed-by: Atish Patra > > > --- > > > tools/lib/perf/mmap.c | 65 +++++++++++++++++++++++++++++++++++++++++= ++ > > > 1 file changed, 65 insertions(+) > > > > > > diff --git a/tools/lib/perf/mmap.c b/tools/lib/perf/mmap.c > > > index 0d1634cedf44..378a163f0554 100644 > > > --- a/tools/lib/perf/mmap.c > > > +++ b/tools/lib/perf/mmap.c > > > @@ -392,6 +392,71 @@ static u64 read_perf_counter(unsigned int counte= r) > > > > > > static u64 read_timestamp(void) { return read_sysreg(cntvct_el0); } > > > > > > +#elif __riscv_xlen =3D=3D 64 > > > > This is something of an odd guard, perhaps: > > #elif defined(__riscv) && __riscv_xlen =3D=3D 64 > > > > That way it is more intention revealing that this is riscv code. Could > > you add a comment relating to the __riscv_xlen ? > > I guess Andrew answered that already. > > > > > > + > > > +/* TODO: implement rv32 support */ > > > + > > > +#define CSR_CYCLE 0xc00 > > > +#define CSR_TIME 0xc01 > > > + > > > +#define csr_read(csr) \ > > > +({ \ > > > + register unsigned long __v; \ > > > + __asm__ __volatile__ ("csrr %0, " #csr \ > > > + : "=3Dr" (__v) : \ > > > + : "memory"); \ > > > > To avoid the macro pasting that could potentially go weird, could this = be: > > > > __asm__ __volatile__ ("csrr %0, %1", > > : "=3Dr"(__v) /* outputs */ > > : "i"(csr) /* inputs */ > > : "memory" /* clobbers */) Forgot to answer this one: it compiles, but I have to admit that I don't understand the difference and if that's correct (all macros in arch/riscv/include/asm/csr.h use # to do this) and what benefits it brings. Can you elaborate more on things that could "go weird"? Thanks again, Alex > > > > Also, why is this clobbering memory? Worth adding a comment. > > No idea, I see that it is also done this way in > arch/riscv/include/asm/csr.h. @Atish Kumar Patra , @Palmer Dabbelt ? > > Thanks for your comments! > > Alex > > > > > Thanks, > > Ian > > > > > + __v; \ > > > +}) > > > + > > > +static unsigned long csr_read_num(int csr_num) > > > +{ > > > +#define switchcase_csr_read(__csr_num, __val) {\ > > > + case __csr_num: \ > > > + __val =3D csr_read(__csr_num); \ > > > + break; } > > > +#define switchcase_csr_read_2(__csr_num, __val) {\ > > > + switchcase_csr_read(__csr_num + 0, __val) \ > > > + switchcase_csr_read(__csr_num + 1, __val)} > > > +#define switchcase_csr_read_4(__csr_num, __val) {\ > > > + switchcase_csr_read_2(__csr_num + 0, __val) \ > > > + switchcase_csr_read_2(__csr_num + 2, __val)} > > > +#define switchcase_csr_read_8(__csr_num, __val) {\ > > > + switchcase_csr_read_4(__csr_num + 0, __val) \ > > > + switchcase_csr_read_4(__csr_num + 4, __val)} > > > +#define switchcase_csr_read_16(__csr_num, __val) {\ > > > + switchcase_csr_read_8(__csr_num + 0, __val) \ > > > + switchcase_csr_read_8(__csr_num + 8, __val)} > > > +#define switchcase_csr_read_32(__csr_num, __val) {\ > > > + switchcase_csr_read_16(__csr_num + 0, __val) \ > > > + switchcase_csr_read_16(__csr_num + 16, __val)} > > > + > > > + unsigned long ret =3D 0; > > > + > > > + switch (csr_num) { > > > + switchcase_csr_read_32(CSR_CYCLE, ret) > > > + default: > > > + break; > > > + } > > > + > > > + return ret; > > > +#undef switchcase_csr_read_32 > > > +#undef switchcase_csr_read_16 > > > +#undef switchcase_csr_read_8 > > > +#undef switchcase_csr_read_4 > > > +#undef switchcase_csr_read_2 > > > +#undef switchcase_csr_read > > > +} > > > + > > > +static u64 read_perf_counter(unsigned int counter) > > > +{ > > > + return csr_read_num(CSR_CYCLE + counter); > > > +} > > > + > > > +static u64 read_timestamp(void) > > > +{ > > > + return csr_read_num(CSR_TIME); > > > +} > > > + > > > #else > > > static u64 read_perf_counter(unsigned int counter __maybe_unused) { = return 0; } > > > static u64 read_timestamp(void) { return 0; } > > > -- > > > 2.39.2 > > >