From patchwork Mon Nov 6 23:24:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Evan Green X-Patchwork-Id: 162228 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:8f47:0:b0:403:3b70:6f57 with SMTP id j7csp2989315vqu; Mon, 6 Nov 2023 15:28:28 -0800 (PST) X-Google-Smtp-Source: AGHT+IGgFnDvObQ/jnZV7OZolMYq+28JO4xtKwHXDXv2Nz/E008YC+PFe9/RrQYrzFVHrmX9H73C X-Received: by 2002:a17:902:ea01:b0:1cc:47a6:12b8 with SMTP id s1-20020a170902ea0100b001cc47a612b8mr25635531plg.46.1699313307856; Mon, 06 Nov 2023 15:28:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699313307; cv=none; d=google.com; s=arc-20160816; b=nYVH/nBZiQjAAVrPaGUmzVDdMjoW5OMvPDGTjQo4f6G1uKMF4hrGgqRckVjS9MwtAQ O1cgSbE+PnlyMAQNs8wPJChK9dg8ORnWLw0V/BQFFonsIfiJRyy/hCYC9nNk4JlgCXWA ByNf4nUxsJMuYbbVmOPLRC3FejgScvEWQyiB4ROnlDdWLZB4O5R7zM+0S7I/bNg1MDD9 cwQSfaY2IX9dEnk/v12pUZ5unMq/WntGVsm7FVh0aC5bpbALYeD8igTvJhUCCJyoIA3J i4rJDUjGXC5Tv9w4k03v7Vjg+awU1jCg3+9Q182mb01HKARgwSWa6spgfvVzQKRdiuEx y3kA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=WkCaHfeixjvsbU9/HYvSI6qtTRbFXuR0gXBbnJPPGNQ=; fh=9cBmfIyXDNpBkPc2/mX8+6lSQmvKM0AGjgXNh+vtCYY=; b=w956TzY7K8uXC2QSWkVpMHLlCZ9x717liH44DX+6ahj6fdvABb5VxJcgeM8ea6RFIf WhASUwY/mnyVcscZYgdvi2w2A8YscECYW7w4jBOu3SOvPxRDcW6zk7mTEJVycwB0oKJ6 T7mDM+LVC/poMF0CzxHySP6w9ixywqKuJNoz5rDVY+IzQiMOh6dQMm7T/Xx5YrD5Xdsx QPBqFLeTK1DJULaaW6vd/cmqunx8/PWCmiP4v07xOSeWLSlPC2H8lyb5xCOmCaz69cvt OEiCBLej3+LkAuvXoKVFWNL+iQK7/rONNsr3f0klQBZRCBjXRFkVFc2rpUwEo2L3QnxD Z/FQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@rivosinc-com.20230601.gappssmtp.com header.s=20230601 header.b=dfbO0sGa; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from groat.vger.email (groat.vger.email. [23.128.96.35]) by mx.google.com with ESMTPS id p1-20020a170902f08100b001b9ffda162csi8391332pla.441.2023.11.06.15.28.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Nov 2023 15:28:27 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) client-ip=23.128.96.35; Authentication-Results: mx.google.com; dkim=pass header.i=@rivosinc-com.20230601.gappssmtp.com header.s=20230601 header.b=dfbO0sGa; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 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 groat.vger.email (Postfix) with ESMTP id 8EFAC8087DCC; Mon, 6 Nov 2023 15:28:20 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233741AbjKFX1x (ORCPT + 34 others); Mon, 6 Nov 2023 18:27:53 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48542 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233685AbjKFX1j (ORCPT ); Mon, 6 Nov 2023 18:27:39 -0500 Received: from mail-ot1-x32d.google.com (mail-ot1-x32d.google.com [IPv6:2607:f8b0:4864:20::32d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C73EB3250 for ; Mon, 6 Nov 2023 15:24:43 -0800 (PST) Received: by mail-ot1-x32d.google.com with SMTP id 46e09a7af769-6ce2cc39d12so3180860a34.1 for ; Mon, 06 Nov 2023 15:24:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1699313083; x=1699917883; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=WkCaHfeixjvsbU9/HYvSI6qtTRbFXuR0gXBbnJPPGNQ=; b=dfbO0sGa4JTttHk4IZ9ICqrTPrUNPpqIfHQINScp8T+vmhJKaOpx4kjbl7wBjeNGza H23GXpjafzp9/whOSGZvxNCOzgjbyYGOLs1cGZaq0ZoJxL/mmzPKBdHrgC7wwNwFIjuy 9ALmWtb41N5AqvtKl/z4v8KyMn8QrHxoCHX6TFlibd2VhvYf29ltHMhR4N7gkrytaW42 LiGTifS4N+j7Eql8lYhWCmZgq6cWJG0QLOmwgm97yV4BfSGrXyjni942s3Fadufy+gsb KN/mEdyDPtYBmlqF4b90BjbZMFsRp4DWuPdFHjx3RBMV3mVpNZeccEjfdDUin7XDRdrw McfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699313083; x=1699917883; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=WkCaHfeixjvsbU9/HYvSI6qtTRbFXuR0gXBbnJPPGNQ=; b=W4SmYFzvVK1gebz1pShjADDnfpQMuMWfN4T21165+NPO0OGaFW8xxHk/op+EVjmhzD sXbgFxGuQ+8veUrf1Ui8ubYyiUziqcMn60ZUDIfXZq13ULH8FjhBy1zrVsXSkOOjoitN r2C4UUkzHNvAzB8moKVXi2hkipwot1Olsi4IU5Ds8elHfXPsZnKUVTayQWW1bG1n4O9m ZnrfkzRhL5fgCWQZZjFMru2T7RTr7HqxzzTQgqHNAT0HkJvW8fDNLRQksw7Q2Ikhgkgt RFbXtJpDTXbbzlv8UgPl/dYWVLZYlBj5nC3wl/G00ey6dOBT9I5PMXkX7P/aXLi8aXwS knTw== X-Gm-Message-State: AOJu0YwVCNyV8A1YqaZvJ57tIag7tRgsm068bEYEsjiqUrfrVOee37kU UM97ZWuW67F2HGityqHGvn5wPQ== X-Received: by 2002:a9d:6b8d:0:b0:6c6:50d0:1104 with SMTP id b13-20020a9d6b8d000000b006c650d01104mr32871637otq.27.1699313083089; Mon, 06 Nov 2023 15:24:43 -0800 (PST) Received: from evan.ba.rivosinc.com ([64.71.180.162]) by smtp.gmail.com with ESMTPSA id f2-20020a9d5e82000000b006d3161e612dsm1422773otl.30.2023.11.06.15.24.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Nov 2023 15:24:42 -0800 (PST) From: Evan Green To: Palmer Dabbelt Cc: Conor Dooley , Evan Green , Andrew Jones , Albert Ou , Bagas Sanjaya , Heiko Stuebner , Jonathan Corbet , Palmer Dabbelt , Paul Walmsley , Sunil V L , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org Subject: [PATCH v6] RISC-V: Show accurate per-hart isa in /proc/cpuinfo Date: Mon, 6 Nov 2023 15:24:39 -0800 Message-Id: <20231106232439.3176268-1-evan@rivosinc.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,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 groat.vger.email 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 (groat.vger.email [0.0.0.0]); Mon, 06 Nov 2023 15:28:20 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781859151059251900 X-GMAIL-MSGID: 1781859151059251900 In /proc/cpuinfo, most of the information we show for each processor is specific to that hart: marchid, mvendorid, mimpid, processor, hart, compatible, and the mmu size. But the ISA string gets filtered through a lowest common denominator mask, so that if one CPU is missing an ISA extension, no CPUs will show it. Now that we track the ISA extensions for each hart, let's report ISA extension info accurately per-hart in /proc/cpuinfo. We cannot change the "isa:" line, as usermode may be relying on that line to show only the common set of extensions supported across all harts. Add a new "hart isa" line instead, which reports the true set of extensions for that hart. Signed-off-by: Evan Green Reviewed-by: Andrew Jones Reviewed-by: Conor Dooley --- Changes in v6: - Documention changes (Andrew) - Comment fix Changes in v5: - Documentation changes (only) (Conor) Changes in v4: - Documentation: Made the underline match the text line (Conor) - Documentation: hanged "in question" to "being described" (Andrew) Changes in v3: - Add some documentation (Conor) Changes in v2: - Added new "hart isa" line rather than altering behavior of existing "isa" line (Conor, Palmer) Documentation/riscv/uabi.rst | 20 ++++++++++++++++++++ arch/riscv/kernel/cpu.c | 22 ++++++++++++++++++---- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/Documentation/riscv/uabi.rst b/Documentation/riscv/uabi.rst index 8960fac42c40..54d199dce78b 100644 --- a/Documentation/riscv/uabi.rst +++ b/Documentation/riscv/uabi.rst @@ -42,6 +42,26 @@ An example string following the order is:: rv64imadc_zifoo_zigoo_zafoo_sbar_scar_zxmbaz_xqux_xrux +"isa" and "hart isa" lines in /proc/cpuinfo +------------------------------------------- + +The "isa" line in /proc/cpuinfo describes the lowest common denominator of +RISC-V ISA extensions recognized by the kernel and implemented on all harts. The +"hart isa" line, in contrast, describes the set of extensions recognized by the +kernel on the particular hart being described, even if those extensions may not +be present on all harts in the system. + +In both lines, the presence of an extension guarantees only that the hardware +has the described capability. Additional kernel support or policy changes may be +required before an extension's capability is fully usable by userspace programs. +Similarly, for S-mode extensions, presence in one of these lines does not +guarantee that the kernel is taking advantage of the extension, or that the +feature will be visible in guest VMs managed by this kernel. + +Inversely, the absence of an extension in these lines does not necessarily mean +the hardware does not support that feature. The running kernel may not recognize +the extension, or may have deliberately removed it from the listing. + Misaligned accesses ------------------- diff --git a/arch/riscv/kernel/cpu.c b/arch/riscv/kernel/cpu.c index c17dacb1141c..bcfc0c8dfd01 100644 --- a/arch/riscv/kernel/cpu.c +++ b/arch/riscv/kernel/cpu.c @@ -202,9 +202,8 @@ arch_initcall(riscv_cpuinfo_init); #ifdef CONFIG_PROC_FS -static void print_isa(struct seq_file *f) +static void print_isa(struct seq_file *f, const unsigned long *isa_bitmap) { - seq_puts(f, "isa\t\t: "); if (IS_ENABLED(CONFIG_32BIT)) seq_write(f, "rv32", 4); @@ -212,7 +211,7 @@ static void print_isa(struct seq_file *f) seq_write(f, "rv64", 4); for (int i = 0; i < riscv_isa_ext_count; i++) { - if (!__riscv_isa_extension_available(NULL, riscv_isa_ext[i].id)) + if (!__riscv_isa_extension_available(isa_bitmap, riscv_isa_ext[i].id)) continue; /* Only multi-letter extensions are split by underscores */ @@ -276,7 +275,15 @@ static int c_show(struct seq_file *m, void *v) seq_printf(m, "processor\t: %lu\n", cpu_id); seq_printf(m, "hart\t\t: %lu\n", cpuid_to_hartid_map(cpu_id)); - print_isa(m); + + /* + * For historical raisins, the isa: line is limited to the lowest common + * denominator of extensions supported across all harts. A true list of + * extensions supported on this hart is printed later in the hart isa: + * line. + */ + seq_puts(m, "isa\t\t: "); + print_isa(m, NULL); print_mmu(m); if (acpi_disabled) { @@ -292,6 +299,13 @@ static int c_show(struct seq_file *m, void *v) seq_printf(m, "mvendorid\t: 0x%lx\n", ci->mvendorid); seq_printf(m, "marchid\t\t: 0x%lx\n", ci->marchid); seq_printf(m, "mimpid\t\t: 0x%lx\n", ci->mimpid); + + /* + * Print the ISA extensions specific to this hart, which may show + * additional extensions not present across all harts. + */ + seq_puts(m, "hart isa\t: "); + print_isa(m, hart_isa[cpu_id].isa); seq_puts(m, "\n"); return 0;