lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date:   Tue, 14 Sep 2021 13:29:32 +0300
From:   Dan Carpenter <dan.carpenter@...cle.com>
To:     kbuild@...ts.01.org, Huang Rui <ray.huang@....com>
Cc:     lkp@...el.com, kbuild-all@...ts.01.org,
        linux-kernel@...r.kernel.org
Subject: [rui:amd-pstate-dev-v1 4/19] drivers/cpufreq/amd-pstate.c:241
 amd_get_max_freq() warn: should 'max_perf << 10' be a 64 bit type?

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/rui/linux.git amd-pstate-dev-v1
head:   abfcbc164c1aa0c63d5e256854bad977a9645586
commit: df9ad0b99a9f0e3371aa94e49fe92a2c2a9fa95d [4/19] cpufreq: amd: introduce a new amd pstate driver to support future processors
config: i386-randconfig-m021-20210912 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@...el.com>
Reported-by: Dan Carpenter <dan.carpenter@...cle.com>

smatch warnings:
drivers/cpufreq/amd-pstate.c:241 amd_get_max_freq() warn: should 'max_perf << 10' be a 64 bit type?
drivers/cpufreq/amd-pstate.c:282 amd_get_lowest_nonlinear_freq() warn: should 'lowest_nonlinear_perf << 10' be a 64 bit type?

vim +241 drivers/cpufreq/amd-pstate.c

df9ad0b99a9f0e Huang Rui 2021-06-10  227  static int amd_get_max_freq(struct amd_cpudata *cpudata)
df9ad0b99a9f0e Huang Rui 2021-06-10  228  {
df9ad0b99a9f0e Huang Rui 2021-06-10  229  	struct cppc_perf_caps cppc_perf;
df9ad0b99a9f0e Huang Rui 2021-06-10  230  	u32 max_perf, max_freq, nominal_freq, nominal_perf;
df9ad0b99a9f0e Huang Rui 2021-06-10  231  	u64 boost_ratio;
df9ad0b99a9f0e Huang Rui 2021-06-10  232  
df9ad0b99a9f0e Huang Rui 2021-06-10  233  	int ret = cppc_get_perf_caps(cpudata->cpu, &cppc_perf);
df9ad0b99a9f0e Huang Rui 2021-06-10  234  	if (ret)
df9ad0b99a9f0e Huang Rui 2021-06-10  235  		return ret;
df9ad0b99a9f0e Huang Rui 2021-06-10  236  
df9ad0b99a9f0e Huang Rui 2021-06-10  237  	nominal_freq = cppc_perf.nominal_freq;
df9ad0b99a9f0e Huang Rui 2021-06-10  238  	nominal_perf = READ_ONCE(cpudata->nominal_perf);
df9ad0b99a9f0e Huang Rui 2021-06-10  239  	max_perf = READ_ONCE(cpudata->highest_perf);
df9ad0b99a9f0e Huang Rui 2021-06-10  240  
df9ad0b99a9f0e Huang Rui 2021-06-10 @241  	boost_ratio = div_u64(max_perf << SCHED_CAPACITY_SHIFT,
df9ad0b99a9f0e Huang Rui 2021-06-10  242  			      nominal_perf);

Presumably the max_perf << SCHED_CAPACITY_SHIFT shift can wrap.  The
"max_perf" variable should probably be declared as a u64.  I will also
create a new static checker warning specifically for when div_u64() is
used on a u32.

df9ad0b99a9f0e Huang Rui 2021-06-10  243  
df9ad0b99a9f0e Huang Rui 2021-06-10  244  	max_freq = nominal_freq * boost_ratio >> SCHED_CAPACITY_SHIFT;
df9ad0b99a9f0e Huang Rui 2021-06-10  245  
df9ad0b99a9f0e Huang Rui 2021-06-10  246  	/* Switch to khz */
df9ad0b99a9f0e Huang Rui 2021-06-10  247  	return max_freq * 1000;
df9ad0b99a9f0e Huang Rui 2021-06-10  248  }
df9ad0b99a9f0e Huang Rui 2021-06-10  249  
df9ad0b99a9f0e Huang Rui 2021-06-10  250  static int amd_get_nominal_freq(struct amd_cpudata *cpudata)
df9ad0b99a9f0e Huang Rui 2021-06-10  251  {
df9ad0b99a9f0e Huang Rui 2021-06-10  252  	struct cppc_perf_caps cppc_perf;
df9ad0b99a9f0e Huang Rui 2021-06-10  253  	u32 nominal_freq;
df9ad0b99a9f0e Huang Rui 2021-06-10  254  
df9ad0b99a9f0e Huang Rui 2021-06-10  255  	int ret = cppc_get_perf_caps(cpudata->cpu, &cppc_perf);
df9ad0b99a9f0e Huang Rui 2021-06-10  256  	if (ret)
df9ad0b99a9f0e Huang Rui 2021-06-10  257  		return ret;
df9ad0b99a9f0e Huang Rui 2021-06-10  258  
df9ad0b99a9f0e Huang Rui 2021-06-10  259  	nominal_freq = cppc_perf.nominal_freq;
df9ad0b99a9f0e Huang Rui 2021-06-10  260  
df9ad0b99a9f0e Huang Rui 2021-06-10  261  	/* Switch to khz */
df9ad0b99a9f0e Huang Rui 2021-06-10  262  	return nominal_freq * 1000;
df9ad0b99a9f0e Huang Rui 2021-06-10  263  }
df9ad0b99a9f0e Huang Rui 2021-06-10  264  
df9ad0b99a9f0e Huang Rui 2021-06-10  265  static int amd_get_lowest_nonlinear_freq(struct amd_cpudata *cpudata)
df9ad0b99a9f0e Huang Rui 2021-06-10  266  {
df9ad0b99a9f0e Huang Rui 2021-06-10  267  	struct cppc_perf_caps cppc_perf;
df9ad0b99a9f0e Huang Rui 2021-06-10  268  	u32 lowest_nonlinear_freq, lowest_nonlinear_perf,
df9ad0b99a9f0e Huang Rui 2021-06-10  269  	    nominal_freq, nominal_perf;
df9ad0b99a9f0e Huang Rui 2021-06-10  270  	u64 lowest_nonlinear_ratio;
df9ad0b99a9f0e Huang Rui 2021-06-10  271  
df9ad0b99a9f0e Huang Rui 2021-06-10  272  	int ret = cppc_get_perf_caps(cpudata->cpu, &cppc_perf);
df9ad0b99a9f0e Huang Rui 2021-06-10  273  	if (ret)
df9ad0b99a9f0e Huang Rui 2021-06-10  274  		return ret;
df9ad0b99a9f0e Huang Rui 2021-06-10  275  
df9ad0b99a9f0e Huang Rui 2021-06-10  276  	nominal_freq = cppc_perf.nominal_freq;
df9ad0b99a9f0e Huang Rui 2021-06-10  277  	nominal_perf = READ_ONCE(cpudata->nominal_perf);
df9ad0b99a9f0e Huang Rui 2021-06-10  278  
df9ad0b99a9f0e Huang Rui 2021-06-10  279  	lowest_nonlinear_perf = cppc_perf.lowest_nonlinear_perf;
df9ad0b99a9f0e Huang Rui 2021-06-10  280  
df9ad0b99a9f0e Huang Rui 2021-06-10  281  	lowest_nonlinear_ratio = div_u64(lowest_nonlinear_perf <<
df9ad0b99a9f0e Huang Rui 2021-06-10 @282  					 SCHED_CAPACITY_SHIFT, nominal_perf);

Same.

df9ad0b99a9f0e Huang Rui 2021-06-10  283  
df9ad0b99a9f0e Huang Rui 2021-06-10  284  	lowest_nonlinear_freq = nominal_freq * lowest_nonlinear_ratio >> SCHED_CAPACITY_SHIFT;
df9ad0b99a9f0e Huang Rui 2021-06-10  285  
df9ad0b99a9f0e Huang Rui 2021-06-10  286  	/* Switch to khz */
df9ad0b99a9f0e Huang Rui 2021-06-10  287  	return lowest_nonlinear_freq * 1000;
df9ad0b99a9f0e Huang Rui 2021-06-10  288  }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ