Re: [PATCH v3 1/2] lscpu-arm: Set the order to search the model name

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
> 



[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux