All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/6] more lscpu updates
@ 2016-06-22  7:25 Heiko Carstens
  2016-06-22  7:25 ` [PATCH 1/6] lscpu: fix typo in summary output Heiko Carstens
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: Heiko Carstens @ 2016-06-22  7:25 UTC (permalink / raw)
  To: Karel Zak; +Cc: util-linux, Heiko Carstens

Hello Karel,

I have a couple of additional lscpu updates which are on top of the
two drawer patches which I sent already. Given that you didn't apply
them yet, I could also merge them with this series and resend.

Please let me know.

Thanks,
Heiko

Heiko Carstens (6):
  lscpu: fix typo in summary output
  lscpu: show static and dynamic MHz (s390)
  lscpu: show machine type (s390)
  lscpu: show additional caches (s390)
  lscpu: update s390-lpar-drawer testcase
  lscpu: fix MMHZ column entry within man page

 sys-utils/lscpu.1                            |   9 ++-
 sys-utils/lscpu.c                            |  92 ++++++++++++++++++++++++++-
 tests/expected/lscpu/lscpu-s390-kvm          |   1 +
 tests/expected/lscpu/lscpu-s390-lpar         |   1 +
 tests/expected/lscpu/lscpu-s390-lpar-drawer  |  10 ++-
 tests/expected/lscpu/lscpu-s390-zvm          |   1 +
 tests/ts/lscpu/dumps/s390-lpar-drawer.tar.gz | Bin 18125 -> 18131 bytes
 7 files changed, 107 insertions(+), 7 deletions(-)

-- 
2.6.6

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/6] lscpu: fix typo in summary output
  2016-06-22  7:25 [PATCH 0/6] more lscpu updates Heiko Carstens
@ 2016-06-22  7:25 ` Heiko Carstens
  2016-06-22  7:25 ` [PATCH 2/6] lscpu: show static and dynamic MHz (s390) Heiko Carstens
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Heiko Carstens @ 2016-06-22  7:25 UTC (permalink / raw)
  To: Karel Zak; +Cc: util-linux, Heiko Carstens

The new drawer support did have a type in the summary output:
it reported Drawers(s) instead of Drawer(s). Fix this.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
---
 sys-utils/lscpu.c                           | 2 +-
 tests/expected/lscpu/lscpu-s390-lpar-drawer | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/sys-utils/lscpu.c b/sys-utils/lscpu.c
index 41316ccafeec..c07b9d09683a 100644
--- a/sys-utils/lscpu.c
+++ b/sys-utils/lscpu.c
@@ -1696,7 +1696,7 @@ print_summary(struct lscpu_desc *desc, struct lscpu_modifier *mod)
 			if (desc->ndrawers) {
 				print_n(_("Book(s) per drawer:"),
 					books_per_drawer ?: desc->nbooks / desc->ndrawers);
-				print_n(_("Drawers(s):"), drawers ?: desc->ndrawers);
+				print_n(_("Drawer(s):"), drawers ?: desc->ndrawers);
 			} else {
 				print_n(_("Book(s):"), books_per_drawer ?: desc->nbooks);
 			}
diff --git a/tests/expected/lscpu/lscpu-s390-lpar-drawer b/tests/expected/lscpu/lscpu-s390-lpar-drawer
index 1624e73dd3e0..accbff821065 100644
--- a/tests/expected/lscpu/lscpu-s390-lpar-drawer
+++ b/tests/expected/lscpu/lscpu-s390-lpar-drawer
@@ -5,7 +5,7 @@ Thread(s) per core:    1
 Core(s) per socket:    8
 Socket(s) per book:    3
 Book(s) per drawer:    2
-Drawers(s):            4
+Drawer(s):             4
 NUMA node(s):          1
 Vendor ID:             IBM/S390
 Model name:            0
-- 
2.6.6

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/6] lscpu: show static and dynamic MHz (s390)
  2016-06-22  7:25 [PATCH 0/6] more lscpu updates Heiko Carstens
  2016-06-22  7:25 ` [PATCH 1/6] lscpu: fix typo in summary output Heiko Carstens
@ 2016-06-22  7:25 ` Heiko Carstens
  2016-06-22  7:25 ` [PATCH 3/6] lscpu: show machine type (s390) Heiko Carstens
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Heiko Carstens @ 2016-06-22  7:25 UTC (permalink / raw)
  To: Karel Zak; +Cc: util-linux, Heiko Carstens

s390 machines provide static and dynamic cpu mhz information via
/proc/cpuinfo. The static cpu mhz is the normal cpu frequency a cpu is
supposed to run with.

The dynamic cpu mhz is the actual frequency a cpu is running
with. This is usually the same as the static cpu mhz. Note that this
values are different to the min/max mhz values available on other
architecutes. The min/max values are unknown.

This patch adds two new fields to the summary output which display
these two values.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
---
 sys-utils/lscpu.c                           | 8 ++++++++
 tests/expected/lscpu/lscpu-s390-lpar-drawer | 2 ++
 2 files changed, 10 insertions(+)

diff --git a/sys-utils/lscpu.c b/sys-utils/lscpu.c
index c07b9d09683a..9b87e0431bac 100644
--- a/sys-utils/lscpu.c
+++ b/sys-utils/lscpu.c
@@ -208,6 +208,8 @@ struct lscpu_desc {
 	int	hyper;		/* hypervisor vendor ID */
 	int	virtype;	/* VIRT_PARA|FULL|NONE ? */
 	char	*mhz;
+	char	*dynamic_mhz;	/* dynamic mega hertz (s390) */
+	char	*static_mhz;	/* static mega hertz (s390) */
 	char	**maxmhz;	/* maximum mega hertz */
 	char	**minmhz;	/* minimum mega hertz */
 	char	*stepping;
@@ -489,6 +491,8 @@ read_basicinfo(struct lscpu_desc *desc, struct lscpu_modifier *mod)
 		else if (lookup(buf, "model name", &desc->modelname)) ;
 		else if (lookup(buf, "stepping", &desc->stepping)) ;
 		else if (lookup(buf, "cpu MHz", &desc->mhz)) ;
+		else if (lookup(buf, "cpu MHz dynamic", &desc->dynamic_mhz)) ; /* s390 */
+		else if (lookup(buf, "cpu MHz static", &desc->static_mhz)) ;   /* s390 */
 		else if (lookup(buf, "flags", &desc->flags)) ;		/* x86 */
 		else if (lookup(buf, "features", &desc->flags)) ;	/* s390 */
 		else if (lookup(buf, "type", &desc->flags)) ;		/* sparc64 */
@@ -1718,6 +1722,10 @@ print_summary(struct lscpu_desc *desc, struct lscpu_modifier *mod)
 		print_s(_("Stepping:"), desc->stepping);
 	if (desc->mhz)
 		print_s(_("CPU MHz:"), desc->mhz);
+	if (desc->dynamic_mhz)
+		print_s(_("CPU dynamic MHz:"), desc->dynamic_mhz);
+	if (desc->static_mhz)
+		print_s(_("CPU static MHz:"), desc->static_mhz);
 	if (desc->maxmhz)
 		print_s(_("CPU max MHz:"), desc->maxmhz[0]);
 	if (desc->minmhz)
diff --git a/tests/expected/lscpu/lscpu-s390-lpar-drawer b/tests/expected/lscpu/lscpu-s390-lpar-drawer
index accbff821065..88fe1009ea0a 100644
--- a/tests/expected/lscpu/lscpu-s390-lpar-drawer
+++ b/tests/expected/lscpu/lscpu-s390-lpar-drawer
@@ -9,6 +9,8 @@ Drawer(s):             4
 NUMA node(s):          1
 Vendor ID:             IBM/S390
 Model name:            0
+CPU dynamic MHz:       5000
+CPU static MHz:        5000
 BogoMIPS:              20325.00
 Hypervisor:            PR/SM
 Hypervisor vendor:     IBM
-- 
2.6.6


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/6] lscpu: show machine type (s390)
  2016-06-22  7:25 [PATCH 0/6] more lscpu updates Heiko Carstens
  2016-06-22  7:25 ` [PATCH 1/6] lscpu: fix typo in summary output Heiko Carstens
  2016-06-22  7:25 ` [PATCH 2/6] lscpu: show static and dynamic MHz (s390) Heiko Carstens
@ 2016-06-22  7:25 ` Heiko Carstens
  2016-06-22  7:25 ` [PATCH 4/6] lscpu: show additional caches (s390) Heiko Carstens
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Heiko Carstens @ 2016-06-22  7:25 UTC (permalink / raw)
  To: Karel Zak; +Cc: util-linux, Heiko Carstens

Show also the machine type within the lscpu output. With the machine
type it is possible to identify the cpu generation and the supported
features.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
---
 sys-utils/lscpu.c                           | 12 ++++++++++++
 tests/expected/lscpu/lscpu-s390-kvm         |  1 +
 tests/expected/lscpu/lscpu-s390-lpar        |  1 +
 tests/expected/lscpu/lscpu-s390-lpar-drawer |  1 +
 tests/expected/lscpu/lscpu-s390-zvm         |  1 +
 5 files changed, 16 insertions(+)

diff --git a/sys-utils/lscpu.c b/sys-utils/lscpu.c
index 9b87e0431bac..883dff68bb85 100644
--- a/sys-utils/lscpu.c
+++ b/sys-utils/lscpu.c
@@ -198,6 +198,7 @@ struct polarization_modes polar_modes[] = {
 struct lscpu_desc {
 	char	*arch;
 	char	*vendor;
+	char	*machinetype;	/* s390 */
 	char	*family;
 	char	*model;
 	char	*modelname;
@@ -581,6 +582,15 @@ read_basicinfo(struct lscpu_desc *desc, struct lscpu_modifier *mod)
 
 	if (mod->system == SYSTEM_LIVE)
 		read_physical_info_powerpc(desc);
+
+	if (path_exist(_PATH_PROC_SYSINFO)) {
+		FILE *fd = path_fopen("r", 0, _PATH_PROC_SYSINFO);
+
+		while (fd && fgets(buf, sizeof(buf), fd) != NULL && !desc->machinetype)
+			lookup(buf, "Type", &desc->machinetype);
+		if (fd)
+			fclose(fd);
+	}
 }
 
 static int
@@ -1712,6 +1722,8 @@ print_summary(struct lscpu_desc *desc, struct lscpu_modifier *mod)
 		print_n(_("NUMA node(s):"), desc->nnodes);
 	if (desc->vendor)
 		print_s(_("Vendor ID:"), desc->vendor);
+	if (desc->machinetype)
+		print_s(_("Machine type:"), desc->machinetype);
 	if (desc->family)
 		print_s(_("CPU family:"), desc->family);
 	if (desc->model || desc->revision)
diff --git a/tests/expected/lscpu/lscpu-s390-kvm b/tests/expected/lscpu/lscpu-s390-kvm
index 9632b055aef3..66d1c047c59c 100644
--- a/tests/expected/lscpu/lscpu-s390-kvm
+++ b/tests/expected/lscpu/lscpu-s390-kvm
@@ -6,6 +6,7 @@ Core(s) per socket:    1
 Socket(s) per book:    1
 Book(s):               3
 Vendor ID:             IBM/S390
+Machine type:          2817
 BogoMIPS:              14367.00
 Hypervisor:            KVM/Linux
 Hypervisor vendor:     KVM
diff --git a/tests/expected/lscpu/lscpu-s390-lpar b/tests/expected/lscpu/lscpu-s390-lpar
index a4265667f51d..9c8ac2c4f8dd 100644
--- a/tests/expected/lscpu/lscpu-s390-lpar
+++ b/tests/expected/lscpu/lscpu-s390-lpar
@@ -7,6 +7,7 @@ Core(s) per socket:    4
 Socket(s) per book:    6
 Book(s):               4
 Vendor ID:             IBM/S390
+Machine type:          2817
 BogoMIPS:              14367.00
 Hypervisor:            PR/SM
 Hypervisor vendor:     IBM
diff --git a/tests/expected/lscpu/lscpu-s390-lpar-drawer b/tests/expected/lscpu/lscpu-s390-lpar-drawer
index 88fe1009ea0a..587e7a6ed18d 100644
--- a/tests/expected/lscpu/lscpu-s390-lpar-drawer
+++ b/tests/expected/lscpu/lscpu-s390-lpar-drawer
@@ -8,6 +8,7 @@ Book(s) per drawer:    2
 Drawer(s):             4
 NUMA node(s):          1
 Vendor ID:             IBM/S390
+Machine type:          2964
 Model name:            0
 CPU dynamic MHz:       5000
 CPU static MHz:        5000
diff --git a/tests/expected/lscpu/lscpu-s390-zvm b/tests/expected/lscpu/lscpu-s390-zvm
index 6cf24bf867c0..4cd6b8fa0fc1 100644
--- a/tests/expected/lscpu/lscpu-s390-zvm
+++ b/tests/expected/lscpu/lscpu-s390-zvm
@@ -6,6 +6,7 @@ Core(s) per socket:    1
 Socket(s) per book:    1
 Book(s):               4
 Vendor ID:             IBM/S390
+Machine type:          2817
 BogoMIPS:              14367.00
 Hypervisor:            z/VM 6.1.0
 Hypervisor vendor:     IBM
-- 
2.6.6


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 4/6] lscpu: show additional caches (s390)
  2016-06-22  7:25 [PATCH 0/6] more lscpu updates Heiko Carstens
                   ` (2 preceding siblings ...)
  2016-06-22  7:25 ` [PATCH 3/6] lscpu: show machine type (s390) Heiko Carstens
@ 2016-06-22  7:25 ` Heiko Carstens
  2016-06-22  7:26 ` [PATCH 5/6] lscpu: update s390-lpar-drawer testcase Heiko Carstens
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Heiko Carstens @ 2016-06-22  7:25 UTC (permalink / raw)
  To: Karel Zak; +Cc: util-linux, Heiko Carstens

The Linux kernel exposes the cache topology via sysfs. However on
virtualized machines like s390 the cache topology contains only cpu
private caches.

For shared caches it is not known which cpus share them. The
hypervisor would have to update this information whenever a virtual
cpu would be scheduled on a different physical cpu and make the guest
aware of that change. Given that there is hardly any benefit, if it
all, this isn't done.

However it is still of interest to know about the non-private
caches. Therefore this information is available via /proc/cpuinfo at
least on s390.

This patch adds additional lines to the summary output for all shared
caches for which information can be found in /proc/cpuinfo, since we
know these aren't exposed via sysfs.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
---
 sys-utils/lscpu.c                           | 70 +++++++++++++++++++++++++++++
 tests/expected/lscpu/lscpu-s390-lpar-drawer |  2 +
 2 files changed, 72 insertions(+)

diff --git a/sys-utils/lscpu.c b/sys-utils/lscpu.c
index 883dff68bb85..4bd8e872dfc0 100644
--- a/sys-utils/lscpu.c
+++ b/sys-utils/lscpu.c
@@ -229,6 +229,9 @@ struct lscpu_desc {
 	int		ncaches;
 	struct cpu_cache *caches;
 
+	int		necaches;	/* extra caches (s390) */
+	struct cpu_cache *ecaches;
+
 	/*
 	 * All maps are sequentially indexed (0..ncpuspos), the array index
 	 * does not have match with cpuX number as presented by kernel. You
@@ -405,6 +408,58 @@ lookup(char *line, char *pattern, char **value)
 	return 1;
 }
 
+/* Parse extra cache lines contained within /proc/cpuinfo but which are not
+ * part of the cache topology information within the sysfs filesystem.
+ * This is true for all shared caches on e.g. s390. When there are layers of
+ * hypervisors in between it is not knows which CPUs share which caches.
+ * Therefore information about shared caches is only available in
+ * /proc/cpuinfo.
+ * Format is:
+ * "cache<nr> : level=<lvl> type=<type> scope=<scope> size=<size> line_size=<lsz> associativity=<as>"
+ */
+static int
+lookup_cache(char *line, struct lscpu_desc *desc)
+{
+	struct cpu_cache *cache;
+	long long size;
+	char *p, type;
+	int level;
+
+	/* Make sure line starts with "cache<nr> :" */
+	if (strncmp(line, "cache", 5))
+		return 0;
+	for (p = line + 5; isdigit(*p); p++);
+	for (; isspace(*p); p++);
+	if (*p != ':')
+		return 0;
+
+	p = strstr(line, "scope=") + 6;
+	/* Skip private caches, also present in sysfs */
+	if (!p || strncmp(p, "Private", 7) == 0)
+		return 0;
+	p = strstr(line, "level=");
+	sscanf(p, "level=%d", &level);
+	p = strstr(line, "type=") + 5;
+	type = 0;
+	if (strncmp(p, "Data", 4) == 0)
+		type = 'd';
+	if (strncmp(p, "Instruction", 11) == 0)
+		type = 'i';
+	p = strstr(line, "size=");
+	sscanf(p, "size=%lld", &size);
+	desc->necaches++;
+	desc->ecaches = xrealloc(desc->ecaches,
+				 desc->necaches * sizeof(struct cpu_cache));
+	cache = &desc->ecaches[desc->necaches - 1];
+	memset(cache, 0 , sizeof(*cache));
+	if (type)
+		xasprintf(&cache->name, "L%d%c", level, type);
+	else
+		xasprintf(&cache->name, "L%d", level);
+	xasprintf(&cache->size, "%lldK", size);
+	return 1;
+}
+
 /* Don't init the mode for platforms where we are not able to
  * detect that CPU supports 64-bit mode.
  */
@@ -501,6 +556,7 @@ read_basicinfo(struct lscpu_desc *desc, struct lscpu_modifier *mod)
 		else if (lookup(buf, "bogomips per cpu", &desc->bogomips)) ; /* s390 */
 		else if (lookup(buf, "cpu", &desc->cpu)) ;
 		else if (lookup(buf, "revision", &desc->revision)) ;
+		else if (lookup_cache(buf, desc)) ;
 		else
 			continue;
 	}
@@ -1768,6 +1824,16 @@ print_summary(struct lscpu_desc *desc, struct lscpu_modifier *mod)
 		}
 	}
 
+	if (desc->necaches) {
+		char cbuf[512];
+
+		for (i = desc->necaches - 1; i >= 0; i--) {
+			snprintf(cbuf, sizeof(cbuf),
+					_("%s cache:"), desc->ecaches[i].name);
+			print_s(cbuf, desc->ecaches[i].size);
+		}
+	}
+
 	for (i = 0; i < desc->nnodes; i++) {
 		snprintf(buf, sizeof(buf), _("NUMA node%d CPU(s):"), desc->idx2nodenum[i]);
 		print_cpuset(buf, desc->nodemaps[i], mod->hex);
@@ -1928,6 +1994,10 @@ int main(int argc, char *argv[])
 		qsort(desc->caches, desc->ncaches,
 				sizeof(struct cpu_cache), cachecmp);
 
+	if (desc->ecaches)
+		qsort(desc->ecaches, desc->necaches,
+				sizeof(struct cpu_cache), cachecmp);
+
 	read_nodes(desc);
 	read_hypervisor(desc, mod);
 
diff --git a/tests/expected/lscpu/lscpu-s390-lpar-drawer b/tests/expected/lscpu/lscpu-s390-lpar-drawer
index 587e7a6ed18d..75ee33ff7704 100644
--- a/tests/expected/lscpu/lscpu-s390-lpar-drawer
+++ b/tests/expected/lscpu/lscpu-s390-lpar-drawer
@@ -21,6 +21,8 @@ L1d cache:             128K
 L1i cache:             96K
 L2d cache:             2048K
 L2i cache:             2048K
+L3 cache:              65536K
+L4 cache:              491520K
 NUMA node0 CPU(s):     0-140
 Flags:                 esan3 zarch stfle msa ldisp eimm dfp edat etf3eh highgprs te vx sie
 
-- 
2.6.6

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 5/6] lscpu: update s390-lpar-drawer testcase
  2016-06-22  7:25 [PATCH 0/6] more lscpu updates Heiko Carstens
                   ` (3 preceding siblings ...)
  2016-06-22  7:25 ` [PATCH 4/6] lscpu: show additional caches (s390) Heiko Carstens
@ 2016-06-22  7:26 ` Heiko Carstens
  2016-06-22  7:26 ` [PATCH 6/6] lscpu: fix MMHZ column entry within man page Heiko Carstens
  2016-06-24  9:07 ` [PATCH 0/6] more lscpu updates Karel Zak
  6 siblings, 0 replies; 8+ messages in thread
From: Heiko Carstens @ 2016-06-22  7:26 UTC (permalink / raw)
  To: Karel Zak; +Cc: util-linux, Heiko Carstens

I noticed that the "cpu" line within /proc/cpuinfo has a different
meaning on powerpc and sparc than on s390.

On s390 it represents the cpu number while on powerpc and sparc it
represent the model name. Given that the s390 kernel patch which adds
the "cpu" line to /proc/cpuinfo hasn't been merged into the kernel
yet, I changed that line to "cpu number" to avoid the unnecessary
conflict.

Therefore this patch updates the testcase, which mainly changes the
contents of /proc/cpuinfo.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
---
 tests/expected/lscpu/lscpu-s390-lpar-drawer  |   3 +--
 tests/ts/lscpu/dumps/s390-lpar-drawer.tar.gz | Bin 18125 -> 18131 bytes
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/tests/expected/lscpu/lscpu-s390-lpar-drawer b/tests/expected/lscpu/lscpu-s390-lpar-drawer
index 75ee33ff7704..2309f1db444b 100644
--- a/tests/expected/lscpu/lscpu-s390-lpar-drawer
+++ b/tests/expected/lscpu/lscpu-s390-lpar-drawer
@@ -9,7 +9,6 @@ Drawer(s):             4
 NUMA node(s):          1
 Vendor ID:             IBM/S390
 Machine type:          2964
-Model name:            0
 CPU dynamic MHz:       5000
 CPU static MHz:        5000
 BogoMIPS:              20325.00
@@ -32,7 +31,7 @@ Flags:                 esan3 zarch stfle msa ldisp eimm dfp edat etf3eh highgprs
 # CPU,Core,Socket,Node,,L1d,L1i,L2d,L2i
 0,0,0,0,,0,0,0,0
 1,1,0,0,,1,1,1,1
-2,2,0,0,,2,2,2,2
+2,2,1,0,,2,2,2,2
 3,3,1,0,,3,3,3,3
 4,4,1,0,,4,4,4,4
 5,5,1,0,,5,5,5,5
diff --git a/tests/ts/lscpu/dumps/s390-lpar-drawer.tar.gz b/tests/ts/lscpu/dumps/s390-lpar-drawer.tar.gz
index 3386ded68169a66aba5f54885ad84606728250c7..ca1bc96eb841e070e54ee065ec2e60b6fe397b80 100644
GIT binary patch
literal 18131
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
Da2puP

literal 18125
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
Q6PPQs<>hkP{LK0P0NF|U%K!iX

-- 
2.6.6


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 6/6] lscpu: fix MMHZ column entry within man page
  2016-06-22  7:25 [PATCH 0/6] more lscpu updates Heiko Carstens
                   ` (4 preceding siblings ...)
  2016-06-22  7:26 ` [PATCH 5/6] lscpu: update s390-lpar-drawer testcase Heiko Carstens
@ 2016-06-22  7:26 ` Heiko Carstens
  2016-06-24  9:07 ` [PATCH 0/6] more lscpu updates Karel Zak
  6 siblings, 0 replies; 8+ messages in thread
From: Heiko Carstens @ 2016-06-22  7:26 UTC (permalink / raw)
  To: Karel Zak; +Cc: util-linux, Heiko Carstens

The indentation for the MMHZ column within the man page is wrong. Also
there doesn't exist any column with the name MMHZ. The correct names
would be MAXMHZ and MINMHZ.

Therefore rename MMHZ to MAXMHZ and add the missong MINMHZ entry.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
---
 sys-utils/lscpu.1 | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/sys-utils/lscpu.1 b/sys-utils/lscpu.1
index 167567fa9be0..ffe18db63332 100644
--- a/sys-utils/lscpu.1
+++ b/sys-utils/lscpu.1
@@ -87,12 +87,15 @@ The workload is concentrated on few CPUs.
 For vertical polarization, the column also shows the degree of concentration,
 high, medium, or low.  This column contains data only if your hardware system
 and hypervisor support CPU polarization.
+.RE
 .TP
-.B MMHZ
-Maximum megahertz value for the cpu.  Useful when lscpu is used as hardware
+.B MAXMHZ
+Maximum megahertz value for the CPU.  Useful when lscpu is used as hardware
 inventory information gathering tool.  Notice that the megahertz value is
 dynamic, and driven by CPU governor depending on current resource need.
-.RE
+.TP
+.B MINMHZ
+Minimum megahertz value for the CPU.
 .SH OPTIONS
 .TP
 .BR \-a , " \-\-all"
-- 
2.6.6

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/6] more lscpu updates
  2016-06-22  7:25 [PATCH 0/6] more lscpu updates Heiko Carstens
                   ` (5 preceding siblings ...)
  2016-06-22  7:26 ` [PATCH 6/6] lscpu: fix MMHZ column entry within man page Heiko Carstens
@ 2016-06-24  9:07 ` Karel Zak
  6 siblings, 0 replies; 8+ messages in thread
From: Karel Zak @ 2016-06-24  9:07 UTC (permalink / raw)
  To: Heiko Carstens; +Cc: util-linux

On Wed, Jun 22, 2016 at 09:25:55AM +0200, Heiko Carstens wrote:
> I have a couple of additional lscpu updates which are on top of the
> two drawer patches which I sent already.

All applied, thanks!

-- 
 Karel Zak  <kzak@redhat.com>
 http://karelzak.blogspot.com

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2016-06-24  9:07 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-22  7:25 [PATCH 0/6] more lscpu updates Heiko Carstens
2016-06-22  7:25 ` [PATCH 1/6] lscpu: fix typo in summary output Heiko Carstens
2016-06-22  7:25 ` [PATCH 2/6] lscpu: show static and dynamic MHz (s390) Heiko Carstens
2016-06-22  7:25 ` [PATCH 3/6] lscpu: show machine type (s390) Heiko Carstens
2016-06-22  7:25 ` [PATCH 4/6] lscpu: show additional caches (s390) Heiko Carstens
2016-06-22  7:26 ` [PATCH 5/6] lscpu: update s390-lpar-drawer testcase Heiko Carstens
2016-06-22  7:26 ` [PATCH 6/6] lscpu: fix MMHZ column entry within man page Heiko Carstens
2016-06-24  9:07 ` [PATCH 0/6] more lscpu updates Karel Zak

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.