lkml.org 
[lkml]   [2022]   [May]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: arch/arm64/kernel/fpsimd.c:1944:55: sparse: sparse: dereference of noderef expression
On Sat, May 28, 2022 at 06:49:01AM +0800, kernel test robot wrote:
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head: 8291eaafed36f575f23951f3ce18407f480e9ecf
> commit: e0838f6373e5cb72516fc4c26bba309097e2a80a arm64/sme: Save and restore streaming mode over EFI runtime calls
> date: 5 weeks ago
> config: arm64-randconfig-s032-20220527 (https://download.01.org/0day-ci/archive/20220528/202205280635.XKlMkfKD-lkp@intel.com/config)
> compiler: aarch64-linux-gcc (GCC) 11.3.0
> reproduce:
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # apt-get install sparse
> # sparse version: v0.6.4-14-g5a0004b5-dirty
> # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e0838f6373e5cb72516fc4c26bba309097e2a80a
> git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
> git fetch --no-tags linus master
> git checkout e0838f6373e5cb72516fc4c26bba309097e2a80a
> # save the config file
> mkdir build_dir && cp config build_dir/.config
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=arm64 SHELL=/bin/bash arch/arm64/kernel/
>
> If you fix the issue, kindly add following tag where applicable
> Reported-by: kernel test robot <lkp@intel.com>
>
>
> sparse warnings: (new ones prefixed by >>)
> >> arch/arm64/kernel/fpsimd.c:1944:55: sparse: sparse: dereference of noderef expression
>
> vim +1944 arch/arm64/kernel/fpsimd.c
>
> 1916
> 1917 /*
> 1918 * __efi_fpsimd_end(): clean up FPSIMD after an EFI runtime services call
> 1919 */
> 1920 void __efi_fpsimd_end(void)
> 1921 {
> 1922 if (!system_supports_fpsimd())
> 1923 return;
> 1924
> 1925 if (!__this_cpu_xchg(efi_fpsimd_state_used, false)) {
> 1926 kernel_neon_end();
> 1927 } else {
> 1928 if (system_supports_sve() &&
> 1929 likely(__this_cpu_read(efi_sve_state_used))) {
> 1930 char const *sve_state = this_cpu_ptr(efi_sve_state);
> 1931 bool ffr = true;
> 1932
> 1933 /*
> 1934 * Restore streaming mode; EFI calls are
> 1935 * normal function calls so should not return in
> 1936 * streaming mode.
> 1937 */
> 1938 if (system_supports_sme()) {
> 1939 if (__this_cpu_read(efi_sm_state)) {
> 1940 sysreg_clear_set_s(SYS_SVCR_EL0,
> 1941 0,
> 1942 SYS_SVCR_EL0_SM_MASK);
> 1943 if (!system_supports_fa64())
> > 1944 ffr = efi_sm_state;

This looks wrong indeed. IIUC, something like below but waiting for Mark
to confirm:

diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c
index 819979398127..ac521b3403d6 100644
--- a/arch/arm64/kernel/fpsimd.c
+++ b/arch/arm64/kernel/fpsimd.c
@@ -1965,7 +1965,7 @@ void __efi_fpsimd_end(void)
0,
SVCR_SM_MASK);
if (!system_supports_fa64())
- ffr = efi_sm_state;
+ ffr = false;
}
}

--
Catalin
\
 
 \ /
  Last update: 2022-05-31 18:58    [W:1.257 / U:0.368 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site