On Wed, 2022-12-14 at 10:23 +0800, kernel test robot wrote: > Hi Janis, > > Thank you for the patch! Yet something to improve: > > [auto build test ERROR on 739ad2e4e15b585a0eaf98b7bdee62b2dd9588c9] > > url: https://github.com/intel-lab-lkp/linux/commits/Janis-Schoetterl-Glausch/KVM-s390-Extend-MEM_OP-ioctl-by-storage-key-checked-cmpxchg/20221214-005540 > base: 739ad2e4e15b585a0eaf98b7bdee62b2dd9588c9 > patch link: https://lore.kernel.org/r/20221213165405.2953539-2-scgl%40linux.ibm.com > patch subject: [PATCH v4 1/9] KVM: s390: Extend MEM_OP ioctl by storage key checked cmpxchg > config: s390-randconfig-r004-20221213 > compiler: s390-linux-gcc (GCC) 12.1.0 > 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 > # https://github.com/intel-lab-lkp/linux/commit/4e0991bd47ba30c7588e042da7a84d84b9f84056 > git remote add linux-review https://github.com/intel-lab-lkp/linux > git fetch --no-tags linux-review Janis-Schoetterl-Glausch/KVM-s390-Extend-MEM_OP-ioctl-by-storage-key-checked-cmpxchg/20221214-005540 > git checkout 4e0991bd47ba30c7588e042da7a84d84b9f84056 > # save the config file > mkdir build_dir && cp config build_dir/.config > COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=s390 SHELL=/bin/bash > > If you fix the issue, kindly add following tag where applicable > > Reported-by: kernel test robot <lkp@xxxxxxxxx> > > All errors (new ones prefixed by >>): > > s390-linux-ld: arch/s390/kvm/gaccess.o: in function `__cmpxchg_user_key': > > > arch/s390/include/asm/uaccess.h:410: undefined reference to `__ashlti3' > > > s390-linux-ld: arch/s390/include/asm/uaccess.h:411: undefined reference to `__ashlti3' > s390-linux-ld: arch/s390/include/asm/uaccess.h:458: undefined reference to `__ashlti3' > s390-linux-ld: arch/s390/include/asm/uaccess.h:459: undefined reference to `__ashlti3' > > > vim +410 arch/s390/include/asm/uaccess.h > > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 396 > 4148575abe1e14 Heiko Carstens 2022-11-02 397 static __always_inline int __cmpxchg_user_key(unsigned long address, void *uval, > 4148575abe1e14 Heiko Carstens 2022-11-02 398 __uint128_t old, __uint128_t new, > 4148575abe1e14 Heiko Carstens 2022-11-02 399 unsigned long key, int size) > 4148575abe1e14 Heiko Carstens 2022-11-02 400 { > 4148575abe1e14 Heiko Carstens 2022-11-02 401 int rc = 0; > 4148575abe1e14 Heiko Carstens 2022-11-02 402 > 4148575abe1e14 Heiko Carstens 2022-11-02 403 switch (size) { > 4148575abe1e14 Heiko Carstens 2022-11-02 404 case 1: { > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 405 unsigned int prev, shift, mask, _old, _new; > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 406 unsigned long count; > 4148575abe1e14 Heiko Carstens 2022-11-02 407 > 4148575abe1e14 Heiko Carstens 2022-11-02 408 shift = (3 ^ (address & 3)) << 3; > 4148575abe1e14 Heiko Carstens 2022-11-02 409 address ^= address & 3; > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 @410 _old = (old & 0xff) << shift; > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 @411 _new = (new & 0xff) << shift; Not sure what it is in this config that causes gcc to emit this symbol instead of a shift instruction, but casting old/new to 32 bit fixes the error. > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 412 mask = ~(0xff << shift); > 4148575abe1e14 Heiko Carstens 2022-11-02 413 asm volatile( > 4148575abe1e14 Heiko Carstens 2022-11-02 414 " spka 0(%[key])\n" > 4148575abe1e14 Heiko Carstens 2022-11-02 415 " sacf 256\n" > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 416 " llill %[count],%[max_loops]\n" > 4148575abe1e14 Heiko Carstens 2022-11-02 417 "0: l %[prev],%[address]\n" > 4148575abe1e14 Heiko Carstens 2022-11-02 418 "1: nr %[prev],%[mask]\n" > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 419 " xilf %[mask],0xffffffff\n" > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 420 " or %[new],%[prev]\n" > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 421 " or %[prev],%[tmp]\n" > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 422 "2: lr %[tmp],%[prev]\n" > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 423 "3: cs %[prev],%[new],%[address]\n" > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 424 "4: jnl 5f\n" > 4148575abe1e14 Heiko Carstens 2022-11-02 425 " xr %[tmp],%[prev]\n" > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 426 " xr %[new],%[tmp]\n" > 4148575abe1e14 Heiko Carstens 2022-11-02 427 " nr %[tmp],%[mask]\n" > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 428 " jnz 5f\n" > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 429 " brct %[count],2b\n" > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 430 "5: sacf 768\n" > 4148575abe1e14 Heiko Carstens 2022-11-02 431 " spka %[default_key]\n" > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 432 EX_TABLE_UA_LOAD_REG(0b, 5b, %[rc], %[prev]) > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 433 EX_TABLE_UA_LOAD_REG(1b, 5b, %[rc], %[prev]) > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 434 EX_TABLE_UA_LOAD_REG(3b, 5b, %[rc], %[prev]) > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 435 EX_TABLE_UA_LOAD_REG(4b, 5b, %[rc], %[prev]) > 4148575abe1e14 Heiko Carstens 2022-11-02 436 : [rc] "+&d" (rc), > 4148575abe1e14 Heiko Carstens 2022-11-02 437 [prev] "=&d" (prev), > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 438 [address] "+Q" (*(int *)address), > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 439 [tmp] "+&d" (_old), > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 440 [new] "+&d" (_new), > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 441 [mask] "+&d" (mask), > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 442 [count] "=a" (count) > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 443 : [key] "%[count]" (key << 4), > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 444 [default_key] "J" (PAGE_DEFAULT_KEY), > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 445 [max_loops] "J" (CMPXCHG_USER_KEY_MAX_LOOPS) > 4148575abe1e14 Heiko Carstens 2022-11-02 446 : "memory", "cc"); > 4148575abe1e14 Heiko Carstens 2022-11-02 447 *(unsigned char *)uval = prev >> shift; > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 448 if (!count) > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 449 rc = -EAGAIN; > 4148575abe1e14 Heiko Carstens 2022-11-02 450 return rc; > 4148575abe1e14 Heiko Carstens 2022-11-02 451 } > 4148575abe1e14 Heiko Carstens 2022-11-02 452 case 2: { > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 453 unsigned int prev, shift, mask, _old, _new; > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 454 unsigned long count; > 4148575abe1e14 Heiko Carstens 2022-11-02 455 > 4148575abe1e14 Heiko Carstens 2022-11-02 456 shift = (2 ^ (address & 2)) << 3; > 4148575abe1e14 Heiko Carstens 2022-11-02 457 address ^= address & 2; > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 458 _old = (old & 0xffff) << shift; > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 459 _new = (new & 0xffff) << shift; Same here. > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 460 mask = ~(0xffff << shift); > 4148575abe1e14 Heiko Carstens 2022-11-02 461 asm volatile( > 4148575abe1e14 Heiko Carstens 2022-11-02 462 " spka 0(%[key])\n" > 4148575abe1e14 Heiko Carstens 2022-11-02 463 " sacf 256\n" > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 464 " llill %[count],%[max_loops]\n" > 4148575abe1e14 Heiko Carstens 2022-11-02 465 "0: l %[prev],%[address]\n" > 4148575abe1e14 Heiko Carstens 2022-11-02 466 "1: nr %[prev],%[mask]\n" > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 467 " xilf %[mask],0xffffffff\n" > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 468 " or %[new],%[prev]\n" > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 469 " or %[prev],%[tmp]\n" > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 470 "2: lr %[tmp],%[prev]\n" > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 471 "3: cs %[prev],%[new],%[address]\n" > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 472 "4: jnl 5f\n" > 4148575abe1e14 Heiko Carstens 2022-11-02 473 " xr %[tmp],%[prev]\n" > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 474 " xr %[new],%[tmp]\n" > 4148575abe1e14 Heiko Carstens 2022-11-02 475 " nr %[tmp],%[mask]\n" > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 476 " jnz 5f\n" > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 477 " brct %[count],2b\n" > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 478 "5: sacf 768\n" > 4148575abe1e14 Heiko Carstens 2022-11-02 479 " spka %[default_key]\n" > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 480 EX_TABLE_UA_LOAD_REG(0b, 5b, %[rc], %[prev]) > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 481 EX_TABLE_UA_LOAD_REG(1b, 5b, %[rc], %[prev]) > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 482 EX_TABLE_UA_LOAD_REG(3b, 5b, %[rc], %[prev]) > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 483 EX_TABLE_UA_LOAD_REG(4b, 5b, %[rc], %[prev]) > 4148575abe1e14 Heiko Carstens 2022-11-02 484 : [rc] "+&d" (rc), > 4148575abe1e14 Heiko Carstens 2022-11-02 485 [prev] "=&d" (prev), > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 486 [address] "+Q" (*(int *)address), > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 487 [tmp] "+&d" (_old), > 51098f0eb22e2f Janis Schoetterl-Glausch 2022-11-16 488 [new] "+&d" (_new), > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 489 [mask] "+&d" (mask), > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 490 [count] "=a" (count) > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 491 : [key] "%[count]" (key << 4), > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 492 [default_key] "J" (PAGE_DEFAULT_KEY), > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 493 [max_loops] "J" (CMPXCHG_USER_KEY_MAX_LOOPS) > 4148575abe1e14 Heiko Carstens 2022-11-02 494 : "memory", "cc"); > 4148575abe1e14 Heiko Carstens 2022-11-02 495 *(unsigned short *)uval = prev >> shift; > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 496 if (!count) > 739ad2e4e15b58 Janis Schoetterl-Glausch 2022-11-17 497 rc = -EAGAIN; > 4148575abe1e14 Heiko Carstens 2022-11-02 498 return rc; [...]