Le 04/05/2021 à 20:31, kernel test robot a écrit :
tree:   https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git 
next-test
head:   a5014a5c936a2a9a223e699e1f3abd54d5f68d2c
commit: a5014a5c936a2a9a223e699e1f3abd54d5f68d2c [8/8] powerpc/64s: Fix crashes 
when toggling entry flush barrier
config: powerpc-randconfig-r022-20210503 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 
8f5a2a5836cc8e4c1def2bdeb022e7b496623439)
reproduce (this is a W=1 build):
         wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
         chmod +x ~/bin/make.cross
         # install powerpc cross compiling tool for clang build
         # apt-get install binutils-powerpc-linux-gnu
         # 
https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id=a5014a5c936a2a9a223e699e1f3abd54d5f68d2c
         git remote add powerpc 
https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git
         git fetch --no-tags powerpc next-test
         git checkout a5014a5c936a2a9a223e699e1f3abd54d5f68d2c
         # save the attached .config to linux build tree
         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 
ARCH=powerpc

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <l...@intel.com>

All errors (new ones prefixed by >>):

    arch/powerpc/lib/feature-fixups.c:233:32: error: cast to smaller integer 
type 'enum stf_barrier_type' from 'void *' [-Werror,-Wvoid-pointer-to-enum-cast]
            enum stf_barrier_type types = (enum stf_barrier_type)data;
                                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/powerpc/lib/feature-fixups.c:304:30: error: cast to smaller integer type 
'enum l1d_flush_type' from 'void *' [-Werror,-Wvoid-pointer-to-enum-cast]
            enum l1d_flush_type types = (enum l1d_flush_type)data;
                                        ^~~~~~~~~~~~~~~~~~~~~~~~~
    2 errors generated.


vim +304 arch/powerpc/lib/feature-fixups.c

    301 
    302 static int __do_entry_flush_fixups(void *data)
    303 {
  > 304              enum l1d_flush_type types = (enum l1d_flush_type)data;

That looks strange to use an enumeration for 'types', as we perform logical ops with it below (eg: types & L1D_FLUSH_ORI).

I think it should be an int.

    305         unsigned int instrs[3], *dest;
    306         long *start, *end;
    307         int i;
    308 
    309         instrs[0] = 0x60000000; /* nop */
    310         instrs[1] = 0x60000000; /* nop */
    311         instrs[2] = 0x60000000; /* nop */
    312 
    313         i = 0;
    314         if (types == L1D_FLUSH_FALLBACK) {
    315                 instrs[i++] = 0x7d4802a6; /* mflr r10           */
    316                 instrs[i++] = 0x60000000; /* branch patched below */
    317                 instrs[i++] = 0x7d4803a6; /* mtlr r10           */
    318         }
    319 
    320         if (types & L1D_FLUSH_ORI) {
    321                 instrs[i++] = 0x63ff0000; /* ori 31,31,0 speculation 
barrier */
    322                 instrs[i++] = 0x63de0000; /* ori 30,30,0 L1d flush*/
    323         }
    324 
    325         if (types & L1D_FLUSH_MTTRIG)
    326                 instrs[i++] = 0x7c12dba6; /* mtspr TRIG2,r0 (SPR #882) 
*/
    327 
    328         start = PTRRELOC(&__start___entry_flush_fixup);
    329         end = PTRRELOC(&__stop___entry_flush_fixup);
    330         for (i = 0; start < end; start++, i++) {
    331                 dest = (void *)start + *start;
    332 
    333                 pr_devel("patching dest %lx\n", (unsigned long)dest);
    334 
    335                 patch_instruction((struct ppc_inst *)dest, 
ppc_inst(instrs[0]));
    336 
    337                 if (types == L1D_FLUSH_FALLBACK)
    338                         patch_branch((struct ppc_inst *)(dest + 1), 
(unsigned long)&entry_flush_fallback,
    339                                      BRANCH_SET_LINK);
    340                 else
    341                         patch_instruction((struct ppc_inst *)(dest + 
1), ppc_inst(instrs[1]));
    342 
    343                 patch_instruction((struct ppc_inst *)(dest + 2), 
ppc_inst(instrs[2]));
    344         }
    345 
    346         start = PTRRELOC(&__start___scv_entry_flush_fixup);
    347         end = PTRRELOC(&__stop___scv_entry_flush_fixup);
    348         for (; start < end; start++, i++) {
    349                 dest = (void *)start + *start;
    350 
    351                 pr_devel("patching dest %lx\n", (unsigned long)dest);
    352 
    353                 patch_instruction((struct ppc_inst *)dest, 
ppc_inst(instrs[0]));
    354 
    355                 if (types == L1D_FLUSH_FALLBACK)
    356                         patch_branch((struct ppc_inst *)(dest + 1), 
(unsigned long)&scv_entry_flush_fallback,
    357                                      BRANCH_SET_LINK);
    358                 else
    359                         patch_instruction((struct ppc_inst *)(dest + 
1), ppc_inst(instrs[1]));
    360 
    361                 patch_instruction((struct ppc_inst *)(dest + 2), 
ppc_inst(instrs[2]));
    362         }
    363 
    364 
    365         printk(KERN_DEBUG "entry-flush: patched %d locations (%s 
flush)\n", i,
    366                 (types == L1D_FLUSH_NONE)       ? "no" :
    367                 (types == L1D_FLUSH_FALLBACK)   ? "fallback 
displacement" :
    368                 (types &  L1D_FLUSH_ORI)        ? (types & 
L1D_FLUSH_MTTRIG)
    369                                                         ? "ori+mttrig 
type"
    370                                                         : "ori type" :
    371                 (types &  L1D_FLUSH_MTTRIG)     ? "mttrig type"
    372                                                 : "unknown");
    373 
    374         return 0;
    375 }
    376 

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

Reply via email to