* [powerpc:next-test 8/8] arch/powerpc/lib/feature-fixups.c:304:30: error: cast to smaller integer type 'enum l1d_flush_type' from 'void *'
@ 2021-05-04 18:31 kernel test robot
2021-05-04 18:41 ` Christophe Leroy
0 siblings, 1 reply; 2+ messages in thread
From: kernel test robot @ 2021-05-04 18:31 UTC (permalink / raw)
To: Michael Ellerman; +Cc: clang-built-linux, kbuild-all, linuxppc-dev
[-- Attachment #1: Type: text/plain, Size: 4928 bytes --]
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 <lkp@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;
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-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 37797 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: [powerpc:next-test 8/8] arch/powerpc/lib/feature-fixups.c:304:30: error: cast to smaller integer type 'enum l1d_flush_type' from 'void *'
2021-05-04 18:31 [powerpc:next-test 8/8] arch/powerpc/lib/feature-fixups.c:304:30: error: cast to smaller integer type 'enum l1d_flush_type' from 'void *' kernel test robot
@ 2021-05-04 18:41 ` Christophe Leroy
0 siblings, 0 replies; 2+ messages in thread
From: Christophe Leroy @ 2021-05-04 18:41 UTC (permalink / raw)
To: kernel test robot, Michael Ellerman
Cc: clang-built-linux, kbuild-all, linuxppc-dev
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 <lkp@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-all@lists.01.org
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2021-05-04 18:42 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-05-04 18:31 [powerpc:next-test 8/8] arch/powerpc/lib/feature-fixups.c:304:30: error: cast to smaller integer type 'enum l1d_flush_type' from 'void *' kernel test robot
2021-05-04 18:41 ` Christophe Leroy
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).