git: 940e6d36de1e - main - riscv: Print less CPU info
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 23 May 2023 13:23:24 UTC
The branch main has been updated by mhorne: URL: https://cgit.FreeBSD.org/src/commit/?id=940e6d36de1ef010f731e290c9b2b08535fff424 commit 940e6d36de1ef010f731e290c9b2b08535fff424 Author: Mitchell Horne <mhorne@FreeBSD.org> AuthorDate: 2023-05-22 23:54:36 +0000 Commit: Mitchell Horne <mhorne@FreeBSD.org> CommitDate: 2023-05-23 13:19:46 +0000 riscv: Print less CPU info Change the reporting strategy to more closely follow what arm64 implements: - Always print the one-line CPU summary when a core comes online - Only print the additional fields (e.g. ISA) when they differ from the CPU before it In the common case of identical CPUs this results in informative but non-repetitive output. For example, in QEMU: CPU 0 : Vendor=Unspecified Core=Unknown (Hart 0) marchid=0x80032, mimpid=0x80032 MMU: 0x7<Sv39,Sv48,Sv57> ISA: 0x112d<Atomic,Compressed,Double,Float,Mult/Div> real memory = 8589934592 (8192 MB) avail memory = 8332300288 (7946 MB) FreeBSD/SMP: Multiprocessor System Detected: 6 CPUs CPU 1 : Vendor=Unspecified Core=Unknown (Hart 1) CPU 2 : Vendor=Unspecified Core=Unknown (Hart 2) CPU 3 : Vendor=Unspecified Core=Unknown (Hart 3) Reviewed by: markj MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D40024 --- sys/riscv/riscv/identcpu.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/sys/riscv/riscv/identcpu.c b/sys/riscv/riscv/identcpu.c index 01e9fe9b4669..b68cc5c78352 100644 --- a/sys/riscv/riscv/identcpu.c +++ b/sys/riscv/riscv/identcpu.c @@ -447,18 +447,30 @@ printcpuinfo(u_int cpu) KASSERT(desc->isa_extensions != 0, ("Empty extension set for CPU %u, did parsing fail?", cpu)); - /* Print details for boot CPU or if we want verbose output */ - if (cpu == 0 || bootverbose) { - /* Summary line. */ - printf("CPU %-3u: Vendor=%s Core=%s (Hart %u)\n", cpu, - desc->cpu_mvendor_name, desc->cpu_march_name, hart); + /* + * Suppress the output of some fields in the common case of identical + * CPU features. + */ +#define SHOULD_PRINT(_field) \ + (cpu == 0 || desc[0]._field != desc[-1]._field) + /* Always print summary line. */ + printf("CPU %-3u: Vendor=%s Core=%s (Hart %u)\n", cpu, + desc->cpu_mvendor_name, desc->cpu_march_name, hart); + + /* These values are global. */ + if (cpu == 0) printf(" marchid=%#lx, mimpid=%#lx\n", marchid, mimpid); + + if (SHOULD_PRINT(mmu_caps)) { printf(" MMU: %#b\n", desc->mmu_caps, "\020" "\01Sv39" "\02Sv48" "\03Sv57"); + } + + if (SHOULD_PRINT(isa_extensions)) { printf(" ISA: %#b\n", desc->isa_extensions, "\020" "\01Atomic" @@ -467,4 +479,6 @@ printcpuinfo(u_int cpu) "\06Float" "\15Mult/Div"); } + +#undef SHOULD_PRINT }