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 <lkp(a)intel.com>
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@lists.01.org