Oops... I forgot to add Signed-off. Will resend them soon. Sorry about that. On Sun, Nov 08, 2020 at 09:58:05PM -0500, Masayoshi Mizuma wrote: > From: Masayoshi Mizuma <m.mizuma@xxxxxxxxxxxxxx> > > After commit: 367c85c47 ("lscpu: use SMBIOS tables on ARM for lscpu"), > Model name for A64FX shows like as: > > Model name: 461F0010 > > That's because 367c85c47 changes to get the modelname from Processor > Version of SMBIOS. > > The SMBIOS info would be great if the system is based on SBBR v1.2E and > BBR v1.0 because the specs require the Processor Version of SMBIOS > as "This field must provide a human readable description of the processor > part number". > > However, it's not good for the systems aren't based on the specs, > like A64FX. Such systems need to have the model name to the hard > corded table. > > Let's set the order; first, search the hard corded table, then SMBIOS. > --- > sys-utils/lscpu-arm.c | 29 ++++++++++++++++------------- > 1 file changed, 16 insertions(+), 13 deletions(-) > > diff --git a/sys-utils/lscpu-arm.c b/sys-utils/lscpu-arm.c > index 20c7291e5..3f258a710 100644 > --- a/sys-utils/lscpu-arm.c > +++ b/sys-utils/lscpu-arm.c > @@ -288,6 +288,7 @@ static int __arm_cpu_smbios(struct lscpu_desc *desc) > struct lscpu_dmi_header h; > int fd; > ssize_t rs; > + int use_smbios = 0; > > fd = open(_PATH_SYS_DMI_TYPE4, O_RDONLY); > if (fd < 0) > @@ -301,16 +302,21 @@ static int __arm_cpu_smbios(struct lscpu_desc *desc) > > to_dmi_header(&h, data); > > - str = dmi_string(&h, data[PROC_MFR_OFFSET]); > - if (str) { > - xstrncpy(buf, str, 127); > - desc->vendor = xstrdup(buf); > + if (!desc->modelname) { > + str = dmi_string(&h, data[PROC_VERSION_OFFSET]); > + if (str) { > + xstrncpy(buf, str, 127); > + desc->modelname = xstrdup(buf); > + use_smbios = 1; > + } > } > > - str = dmi_string(&h, data[PROC_VERSION_OFFSET]); > - if (str) { > - xstrncpy(buf, str, 127); > - desc->modelname = xstrdup(buf); > + if ((startswith(desc->vendor, "0x")) || use_smbios) { > + str = dmi_string(&h, data[PROC_MFR_OFFSET]); > + if (str) { > + xstrncpy(buf, str, 127); > + desc->vendor = xstrdup(buf); > + } > } > > return 0; > @@ -318,14 +324,11 @@ static int __arm_cpu_smbios(struct lscpu_desc *desc) > > void arm_cpu_decode(struct lscpu_desc *desc, struct lscpu_modifier *mod) > { > - int rc = -1; > + __arm_cpu_decode(desc); > > /* use SMBIOS Type 4 data if available, > * else fall back to manual decoding using the tables above */ > if (mod->system == SYSTEM_LIVE && > access(_PATH_SYS_DMI_TYPE4, R_OK) == 0) > - rc = __arm_cpu_smbios(desc); > - > - if (rc) > - __arm_cpu_decode(desc); > + __arm_cpu_smbios(desc); > } > -- > 2.27.0 >