On Fri, Nov 13, 2020 at 11:12:25PM -0500, Masayoshi Mizuma wrote: > cpu_column_name_to_id(const char *name, size_t namesz) > { > size_t i; > + int is_cluster = lscpu_is_cluster_arm(NULL); > > for (i = 0; i < ARRAY_SIZE(coldescs_cpu); i++) { > const char *cn = coldescs_cpu[i].name; > > - if (!strncasecmp(name, cn, namesz) && !*(cn + namesz)) > + if (!strncasecmp(name, cn, namesz) && !*(cn + namesz)) { > + if ((!strncasecmp(cn, "cluster", namesz)) && (!is_cluster)) { > + warnx(_("%s doesn't work on this machine. Use socket."), name); > + return -1; > + } else if ((!strncasecmp(cn, "socket", namesz)) && (is_cluster)) { > + warnx(_("%s doesn't work on this machine. Use cluster."), name); > + return -1; > + } This is very unusual for your utils and it makes scripts with lscpu non-portable. It would be better to remove this change. We usually follow the columns as specified by user and if we can't fill any data then we return nothing (or "-"). For example you can use "-o DRAWER" on system where this stuff is not supported. > return i; > + } > } > warnx(_("unknown column: %s"), name); > return -1; > @@ -337,6 +348,7 @@ static char *get_cell_data( > fill_id(cxt, cpu, core, buf, bufsz); > break; > case COL_CPU_SOCKET: > + case COL_CPU_CLUSTER: > fill_id(cxt, cpu, socket, buf, bufsz); > break; What about: case COL_CPU_SOCKET: fill_id(cxt, cpu, socket, buf, bufsz); break; case COL_CPU_CLUSTER: if (cxt->is_cluster) fill_id(cxt, cpu, socket, buf, bufsz); break; It means "SOCKET" works everywhere, "CLUSTER" returns data only on ARMs with cluster(s). Karel -- Karel Zak <kzak@xxxxxxxxxx> http://karelzak.blogspot.com