Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.sbin/cpuctl/arch Improve variable sized TLB's output.
details: https://anonhg.NetBSD.org/src/rev/7d7bee99bbaf
branches: trunk
changeset: 987475:7d7bee99bbaf
user: msaitoh <msaitoh%NetBSD.org@localhost>
date: Mon Sep 27 17:05:58 2021 +0000
description:
Improve variable sized TLB's output.
- Fix a bug that STLB is printed as DTLB.
- If a TLB is variable sized, print the max size instead of error message.
XXX This is temporary solution.
diffstat:
usr.sbin/cpuctl/arch/i386.c | 63 +++++++++++++++++++++++++++-----------------
1 files changed, 39 insertions(+), 24 deletions(-)
diffs (96 lines):
diff -r d6e04bafc7ef -r 7d7bee99bbaf usr.sbin/cpuctl/arch/i386.c
--- a/usr.sbin/cpuctl/arch/i386.c Mon Sep 27 17:04:12 2021 +0000
+++ b/usr.sbin/cpuctl/arch/i386.c Mon Sep 27 17:05:58 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: i386.c,v 1.120 2021/09/27 16:52:15 msaitoh Exp $ */
+/* $NetBSD: i386.c,v 1.121 2021/09/27 17:05:58 msaitoh Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -57,7 +57,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: i386.c,v 1.120 2021/09/27 16:52:15 msaitoh Exp $");
+__RCSID("$NetBSD: i386.c,v 1.121 2021/09/27 17:05:58 msaitoh Exp $");
#endif /* not lint */
#include <sys/types.h>
@@ -1145,24 +1145,35 @@
else if (type == CPUID_DATP_TCTYPE_D)
caitype = CAI_L2_DTLB;
else if (type == CPUID_DATP_TCTYPE_U) {
- switch (pgsize) {
- case CPUID_DATP_PGSIZE_4KB:
+ if (pgsize == CPUID_DATP_PGSIZE_4KB)
caitype = CAI_L2_STLB;
- break;
- case CPUID_DATP_PGSIZE_4KB
- | CPUID_DATP_PGSIZE_2MB:
+ else if (pgsize == (CPUID_DATP_PGSIZE_4KB
+ | CPUID_DATP_PGSIZE_2MB))
caitype = CAI_L2_STLB2;
- break;
- case CPUID_DATP_PGSIZE_2MB
- | CPUID_DATP_PGSIZE_4MB:
+ else if (pgsize == (CPUID_DATP_PGSIZE_2MB
+ | CPUID_DATP_PGSIZE_4MB))
+ caitype = CAI_L2_STLB3;
+ else if ((pgsize & CPUID_DATP_PGSIZE_1GB)
+ != 0) {
+ /* FIXME: 1GB max TLB */
+ caitype = CAI_L2_STLB3;
+ linesize = 1024 * 1024 * 1024;
+ } else if ((pgsize & CPUID_DATP_PGSIZE_4MB)
+ != 0) {
+ /* FIXME: 4MB max TLB */
caitype = CAI_L2_STLB3;
- break;
- default:
- aprint_error_dev(ci->ci_dev,
- "error: unknown L2 STLB size (%d)\n",
+ linesize = 4 * 1024 * 1024;
+ } else if ((pgsize & CPUID_DATP_PGSIZE_2MB)
+ != 0) {
+ /* FIXME: 2MB max TLB */
+ caitype = CAI_L2_STLB2;
+ linesize = 2 * 1024 * 1024;
+ } else {
+ aprint_error_dev(ci->ci_dev, "error: "
+ "unknown L2 STLB size (%d)\n",
pgsize);
- caitype = CAI_DTLB;
- break;
+ caitype = CAI_L2_STLB;
+ linesize = 4 * 1024;
}
} else
caitype = -1;
@@ -1194,15 +1205,19 @@
case CPUID_DATP_PGSIZE_1GB:
linesize = 1024 * 1024 * 1024;
break;
- case CPUID_DATP_PGSIZE_2MB | CPUID_DATP_PGSIZE_4MB:
- aprint_error_dev(ci->ci_dev,
- "WARINING: Currently 2M/4M info can't print correctly\n");
- linesize = 4 * 1024 * 1024;
- break;
default:
- aprint_error_dev(ci->ci_dev,
- "error: Unknown size combination\n");
- linesize = 4 * 1024;
+ if ((pgsize & CPUID_DATP_PGSIZE_1GB) != 0)
+ linesize = 1024 * 1024 * 1024; /* MAX 1G */
+ else if ((pgsize & CPUID_DATP_PGSIZE_4MB) != 0)
+ linesize = 4 * 1024 * 1024; /* MAX 4M */
+ else if ((pgsize & CPUID_DATP_PGSIZE_2MB) != 0)
+ linesize = 2 * 1024 * 1024; /* MAX 2M */
+ else
+ linesize = 4 * 1024; /* XXX default to 4K */
+ aprint_error_dev(ci->ci_dev, "WARNING: Currently "
+ "this info can't print correctly "
+ "(level = %d, pgsize = %d)\n",
+ level, pgsize);
break;
}
ways = __SHIFTOUT(descs[1], CPUID_DATP_WAYS);
Home |
Main Index |
Thread Index |
Old Index