tree: https://git.kernel.org/pub/scm/linux/kernel/git/djbw/nvdimm.git libnvdimm-pending head: 4e2f899e682d1e6c647651bc36bcdba3b3577485 commit: 0b25105d34e381fafc7eb9395007727bbb4661a4 [284/291] x86, powerpc: Rename memcpy_mcsafe() to copy_mc_to_{user,kernel}() config: powerpc-defconfig (attached as .config) compiler: powerpc64-linux-gcc (GCC) 9.3.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross git checkout 0b25105d34e381fafc7eb9395007727bbb4661a4 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=powerpc If you fix the issue, kindly add following tag as appropriate Reported-by: kbuild test robot All error/warnings (new ones prefixed by >>, old ones prefixed by <<): In file included from include/linux/uaccess.h:11, from include/linux/crypto.h:21, from include/crypto/hash.h:11, from include/linux/uio.h:10, from include/linux/socket.h:8, from include/linux/compat.h:15, from arch/powerpc/kernel/asm-offsets.c:14: >> arch/powerpc/include/asm/uaccess.h:332:1: warning: no previous prototype for 'copy_mc_generic' [-Wmissing-prototypes] 332 | copy_mc_generic(void *to, const void *from, unsigned long size) | ^~~~~~~~~~~~~~~ arch/powerpc/include/asm/uaccess.h: In function 'copy_mc_generic': >> arch/powerpc/include/asm/uaccess.h:336:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 336 | { | ^ arch/powerpc/include/asm/uaccess.h:343:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 343 | { | ^ arch/powerpc/include/asm/uaccess.h:359:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 359 | { | ^ arch/powerpc/include/asm/uaccess.h:372:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 372 | { | ^ arch/powerpc/include/asm/uaccess.h:408:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 408 | { | ^ arch/powerpc/include/asm/uaccess.h:435:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 435 | { | ^ arch/powerpc/include/asm/uaccess.h:447:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 447 | { | ^ arch/powerpc/include/asm/uaccess.h:459:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 459 | { | ^ >> arch/powerpc/include/asm/uaccess.h:463:13: error: storage class specified for parameter 'strncpy_from_user' 463 | extern long strncpy_from_user(char *dst, const char __user *src, long count); | ^~~~~~~~~~~~~~~~~ >> arch/powerpc/include/asm/uaccess.h:464:26: error: storage class specified for parameter 'strnlen_user' 464 | extern __must_check long strnlen_user(const char __user *str, long n); | ^~~~~~~~~~~~ >> arch/powerpc/include/asm/uaccess.h:466:13: error: storage class specified for parameter '__copy_from_user_flushcache' 466 | extern long __copy_from_user_flushcache(void *dst, const void __user *src, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ >> arch/powerpc/include/asm/uaccess.h:468:13: error: storage class specified for parameter 'memcpy_page_flushcache' 468 | extern void memcpy_page_flushcache(char *to, struct page *page, size_t offset, | ^~~~~~~~~~~~~~~~~~~~~~ arch/powerpc/include/asm/uaccess.h:472:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 472 | { | ^ In file included from include/linux/crypto.h:21, from include/crypto/hash.h:11, from include/linux/uio.h:10, from include/linux/socket.h:8, from include/linux/compat.h:15, from arch/powerpc/kernel/asm-offsets.c:14: >> include/linux/uaccess.h:60:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 60 | { | ^ include/linux/uaccess.h:68:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 68 | { | ^ include/linux/uaccess.h:90:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 90 | { | ^ include/linux/uaccess.h:98:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 98 | { | ^ >> include/linux/uaccess.h:121:1: error: storage class specified for parameter '_copy_from_user' 121 | _copy_from_user(void *, const void __user *, unsigned long); | ^~~~~~~~~~~~~~~ >> include/linux/uaccess.h:137:1: error: storage class specified for parameter '_copy_to_user' 137 | _copy_to_user(void __user *, const void *, unsigned long); | ^~~~~~~~~~~~~ include/linux/uaccess.h:142:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 142 | { | ^ include/linux/uaccess.h:150:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 150 | { | ^ include/linux/uaccess.h:158:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 158 | { | ^ include/linux/uaccess.h:176:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 176 | { | ^ include/linux/uaccess.h:181:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 181 | { | ^ include/linux/uaccess.h:193:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 193 | { | ^ include/linux/uaccess.h:203:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 203 | { | ^ include/linux/uaccess.h:216:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 216 | { | ^ include/linux/uaccess.h:237:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 237 | { | ^ >> include/linux/uaccess.h:243:25: error: storage class specified for parameter 'check_zeroed_user' 243 | extern __must_check int check_zeroed_user(const void __user *from, size_t size); | ^~~~~~~~~~~~~~~~~ include/linux/uaccess.h:295:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 295 | { | ^ >> include/linux/uaccess.h:322:13: error: storage class specified for parameter 'probe_kernel_read' 322 | extern long probe_kernel_read(void *dst, const void *src, size_t size); | ^~~~~~~~~~~~~~~~~ >> include/linux/uaccess.h:323:13: error: storage class specified for parameter 'probe_kernel_read_strict' 323 | extern long probe_kernel_read_strict(void *dst, const void *src, size_t size); | ^~~~~~~~~~~~~~~~~~~~~~~~ >> include/linux/uaccess.h:324:13: error: storage class specified for parameter '__probe_kernel_read' 324 | extern long __probe_kernel_read(void *dst, const void *src, size_t size); | ^~~~~~~~~~~~~~~~~~~ >> include/linux/uaccess.h:335:13: error: storage class specified for parameter 'probe_user_read' 335 | extern long probe_user_read(void *dst, const void __user *src, size_t size); | ^~~~~~~~~~~~~~~ >> include/linux/uaccess.h:336:13: error: storage class specified for parameter '__probe_user_read' 336 | extern long __probe_user_read(void *dst, const void __user *src, size_t size); | ^~~~~~~~~~~~~~~~~ >> include/linux/uaccess.h:347:21: error: storage class specified for parameter 'probe_kernel_write' 347 | extern long notrace probe_kernel_write(void *dst, const void *src, size_t size); | ^~~~~~~~~~~~~~~~~~ >> include/linux/uaccess.h:347:21: error: 'no_instrument_function' attribute applies only to functions >> include/linux/uaccess.h:348:21: error: storage class specified for parameter '__probe_kernel_write' 348 | extern long notrace __probe_kernel_write(void *dst, const void *src, size_t size); | ^~~~~~~~~~~~~~~~~~~~ include/linux/uaccess.h:348:21: error: 'no_instrument_function' attribute applies only to functions >> include/linux/uaccess.h:359:21: error: storage class specified for parameter 'probe_user_write' 359 | extern long notrace probe_user_write(void __user *dst, const void *src, size_t size); | ^~~~~~~~~~~~~~~~ include/linux/uaccess.h:359:21: error: 'no_instrument_function' attribute applies only to functions >> include/linux/uaccess.h:360:21: error: storage class specified for parameter '__probe_user_write' 360 | extern long notrace __probe_user_write(void __user *dst, const void *src, size_t size); | ^~~~~~~~~~~~~~~~~~ include/linux/uaccess.h:360:21: error: 'no_instrument_function' attribute applies only to functions include/linux/uaccess.h:362:13: error: storage class specified for parameter 'strncpy_from_unsafe' 362 | extern long strncpy_from_unsafe(char *dst, const void *unsafe_addr, long count); | ^~~~~~~~~~~~~~~~~~~ include/linux/uaccess.h:363:13: error: storage class specified for parameter 'strncpy_from_unsafe_strict' 363 | extern long strncpy_from_unsafe_strict(char *dst, const void *unsafe_addr, | ^~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/uaccess.h:365:13: error: storage class specified for parameter '__strncpy_from_unsafe' 365 | extern long __strncpy_from_unsafe(char *dst, const void *unsafe_addr, long count); | ^~~~~~~~~~~~~~~~~~~~~ include/linux/uaccess.h:366:13: error: storage class specified for parameter 'strncpy_from_unsafe_user' 366 | extern long strncpy_from_unsafe_user(char *dst, const void __user *unsafe_addr, | ^~~~~~~~~~~~~~~~~~~~~~~~ include/linux/uaccess.h:368:13: error: storage class specified for parameter 'strnlen_unsafe_user' 368 | extern long strnlen_unsafe_user(const void __user *unsafe_addr, long count); | ^~~~~~~~~~~~~~~~~~~ In file included from include/crypto/hash.h:11, from include/linux/uio.h:10, from include/linux/socket.h:8, from include/linux/compat.h:15, from arch/powerpc/kernel/asm-offsets.c:14: include/linux/crypto.h:131:1: warning: empty declaration 131 | struct scatterlist; | ^~~~~~ include/linux/crypto.h:132:1: warning: empty declaration 132 | struct crypto_async_request; | ^~~~~~ include/linux/crypto.h:133:1: warning: empty declaration 133 | struct crypto_tfm; | ^~~~~~ include/linux/crypto.h:134:1: warning: empty declaration 134 | struct crypto_type; | ^~~~~~ include/linux/crypto.h:136:16: error: storage class specified for parameter 'crypto_completion_t' 136 | typedef void (*crypto_completion_t)(struct crypto_async_request *req, int err); | ^~~~~~~~~~~~~~~~~~~ include/linux/crypto.h:147:2: error: expected specifier-qualifier-list before 'crypto_completion_t' 147 | crypto_completion_t complete; | ^~~~~~~~~~~~~~~~~~~ include/linux/crypto.h:145:1: warning: empty declaration 145 | struct crypto_async_request { | ^~~~~~ include/linux/crypto.h:208:1: warning: empty declaration 208 | struct cipher_alg { | ^~~~~~ include/linux/crypto.h:228:1: warning: empty declaration 228 | struct compress_alg { | ^~~~~~ include/linux/crypto.h:435:1: warning: empty declaration 435 | struct crypto_alg { | ^~~~~~ include/linux/crypto.h:499:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 499 | {} | ^ include/linux/crypto.h:501:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 501 | {} | ^ include/linux/crypto.h:503:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 503 | {} | ^ include/linux/crypto.h:505:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 505 | {} | ^ include/linux/crypto.h:507:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 507 | {} | ^ include/linux/crypto.h:509:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 509 | {} | ^ include/linux/crypto.h:511:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 511 | {} | ^ include/linux/crypto.h:513:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 513 | {} | ^ include/linux/crypto.h:515:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 515 | {} | ^ include/linux/crypto.h:517:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 517 | {} | ^ include/linux/crypto.h:519:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 519 | {} | ^ include/linux/crypto.h:521:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 521 | {} | ^ include/linux/crypto.h:523:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 523 | {} | ^ include/linux/crypto.h:525:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 525 | {} | ^ include/linux/crypto.h:527:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 527 | {} | ^ include/linux/crypto.h:529:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token 529 | {} vim +336 arch/powerpc/include/asm/uaccess.h 326 327 extern unsigned long __copy_tofrom_user(void __user *to, 328 const void __user *from, unsigned long size); 329 330 #ifdef CONFIG_ARCH_HAS_COPY_MC 331 extern unsigned long __must_check > 332 copy_mc_generic(void *to, const void *from, unsigned long size) 333 334 static __always_inline unsigned long __must_check 335 copy_mc_to_kernel(void *to, const void *from, unsigned long size) > 336 { 337 return copy_mc_generic(to, from, size); 338 } 339 #define copy_mc_to_kernel copy_mc_to_kernel 340 341 static __always_inline unsigned long __must_check 342 copy_mc_to_user(void __user *to, const void *from, unsigned long n) 343 { 344 if (likely(check_copy_size(from, n, true))) { 345 if (access_ok(to, n)) { 346 allow_write_to_user(to, n); 347 n = copy_mc_generic((void *)to, from, n); 348 prevent_write_to_user(to, n); 349 } 350 } 351 352 return n; 353 } 354 #endif 355 356 #ifdef __powerpc64__ 357 static inline unsigned long 358 raw_copy_in_user(void __user *to, const void __user *from, unsigned long n) 359 { 360 unsigned long ret; 361 362 barrier_nospec(); 363 allow_read_write_user(to, from, n); 364 ret = __copy_tofrom_user(to, from, n); 365 prevent_read_write_user(to, from, n); 366 return ret; 367 } 368 #endif /* __powerpc64__ */ 369 370 static inline unsigned long raw_copy_from_user(void *to, 371 const void __user *from, unsigned long n) 372 { 373 unsigned long ret; 374 if (__builtin_constant_p(n) && (n <= 8)) { 375 ret = 1; 376 377 switch (n) { 378 case 1: 379 barrier_nospec(); 380 __get_user_size(*(u8 *)to, from, 1, ret); 381 break; 382 case 2: 383 barrier_nospec(); 384 __get_user_size(*(u16 *)to, from, 2, ret); 385 break; 386 case 4: 387 barrier_nospec(); 388 __get_user_size(*(u32 *)to, from, 4, ret); 389 break; 390 case 8: 391 barrier_nospec(); 392 __get_user_size(*(u64 *)to, from, 8, ret); 393 break; 394 } 395 if (ret == 0) 396 return 0; 397 } 398 399 barrier_nospec(); 400 allow_read_from_user(from, n); 401 ret = __copy_tofrom_user((__force void __user *)to, from, n); 402 prevent_read_from_user(from, n); 403 return ret; 404 } 405 406 static inline unsigned long 407 raw_copy_to_user_allowed(void __user *to, const void *from, unsigned long n) 408 { 409 if (__builtin_constant_p(n) && (n <= 8)) { 410 unsigned long ret = 1; 411 412 switch (n) { 413 case 1: 414 __put_user_size_allowed(*(u8 *)from, (u8 __user *)to, 1, ret); 415 break; 416 case 2: 417 __put_user_size_allowed(*(u16 *)from, (u16 __user *)to, 2, ret); 418 break; 419 case 4: 420 __put_user_size_allowed(*(u32 *)from, (u32 __user *)to, 4, ret); 421 break; 422 case 8: 423 __put_user_size_allowed(*(u64 *)from, (u64 __user *)to, 8, ret); 424 break; 425 } 426 if (ret == 0) 427 return 0; 428 } 429 430 return __copy_tofrom_user(to, (__force const void __user *)from, n); 431 } 432 433 static inline unsigned long 434 raw_copy_to_user(void __user *to, const void *from, unsigned long n) 435 { 436 unsigned long ret; 437 438 allow_write_to_user(to, n); 439 ret = raw_copy_to_user_allowed(to, from, n); 440 prevent_write_to_user(to, n); 441 return ret; 442 } 443 444 unsigned long __arch_clear_user(void __user *addr, unsigned long size); 445 446 static inline unsigned long clear_user(void __user *addr, unsigned long size) 447 { 448 unsigned long ret = size; 449 might_fault(); 450 if (likely(access_ok(addr, size))) { 451 allow_write_to_user(addr, size); 452 ret = __arch_clear_user(addr, size); 453 prevent_write_to_user(addr, size); 454 } 455 return ret; 456 } 457 458 static inline unsigned long __clear_user(void __user *addr, unsigned long size) 459 { 460 return clear_user(addr, size); 461 } 462 > 463 extern long strncpy_from_user(char *dst, const char __user *src, long count); > 464 extern __must_check long strnlen_user(const char __user *str, long n); 465 > 466 extern long __copy_from_user_flushcache(void *dst, const void __user *src, 467 unsigned size); > 468 extern void memcpy_page_flushcache(char *to, struct page *page, size_t offset, 469 size_t len); 470 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org