* [joro:sev-es-client-v5.6-rc1 63/63] arch/x86/entry/entry_64.S:1485: Error: no such instruction: `sev_es_nmi_complete'
@ 2020-02-15 8:23 kbuild test robot
0 siblings, 0 replies; only message in thread
From: kbuild test robot @ 2020-02-15 8:23 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 5380 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/joro/linux.git sev-es-client-v5.6-rc1
head: 857e3c24419f15e1295dffd21744b22071089b54
commit: 857e3c24419f15e1295dffd21744b22071089b54 [63/63] x86/sev-es: Add NMI state tracking
config: x86_64-randconfig-s0-20200215 (attached as .config)
compiler: gcc-7 (Debian 7.5.0-4) 7.5.0
reproduce:
git checkout 857e3c24419f15e1295dffd21744b22071089b54
# save the attached .config to linux build tree
make ARCH=x86_64
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
arch/x86/entry/entry_64.S: Assembler messages:
>> arch/x86/entry/entry_64.S:1485: Error: no such instruction: `sev_es_nmi_complete'
arch/x86/entry/entry_64.S:1612: Error: no such instruction: `sev_es_nmi_complete'
arch/x86/entry/entry_64.S:1705: Error: no such instruction: `sev_es_nmi_complete'
vim +1485 arch/x86/entry/entry_64.S
1389
1390 /*
1391 * Runs on exception stack. Xen PV does not go through this path at all,
1392 * so we can use real assembly here.
1393 *
1394 * Registers:
1395 * %r14: Used to save/restore the CR3 of the interrupted context
1396 * when PAGE_TABLE_ISOLATION is in use. Do not clobber.
1397 */
1398 SYM_CODE_START(nmi)
1399 UNWIND_HINT_IRET_REGS
1400
1401 /*
1402 * We allow breakpoints in NMIs. If a breakpoint occurs, then
1403 * the iretq it performs will take us out of NMI context.
1404 * This means that we can have nested NMIs where the next
1405 * NMI is using the top of the stack of the previous NMI. We
1406 * can't let it execute because the nested NMI will corrupt the
1407 * stack of the previous NMI. NMI handlers are not re-entrant
1408 * anyway.
1409 *
1410 * To handle this case we do the following:
1411 * Check the a special location on the stack that contains
1412 * a variable that is set when NMIs are executing.
1413 * The interrupted task's stack is also checked to see if it
1414 * is an NMI stack.
1415 * If the variable is not set and the stack is not the NMI
1416 * stack then:
1417 * o Set the special variable on the stack
1418 * o Copy the interrupt frame into an "outermost" location on the
1419 * stack
1420 * o Copy the interrupt frame into an "iret" location on the stack
1421 * o Continue processing the NMI
1422 * If the variable is set or the previous stack is the NMI stack:
1423 * o Modify the "iret" location to jump to the repeat_nmi
1424 * o return back to the first NMI
1425 *
1426 * Now on exit of the first NMI, we first clear the stack variable
1427 * The NMI stack will tell any nested NMIs at that point that it is
1428 * nested. Then we pop the stack normally with iret, and if there was
1429 * a nested NMI that updated the copy interrupt stack frame, a
1430 * jump will be made to the repeat_nmi code that will handle the second
1431 * NMI.
1432 *
1433 * However, espfix prevents us from directly returning to userspace
1434 * with a single IRET instruction. Similarly, IRET to user mode
1435 * can fault. We therefore handle NMIs from user space like
1436 * other IST entries.
1437 */
1438
1439 ASM_CLAC
1440
1441 /* Use %rdx as our temp variable throughout */
1442 pushq %rdx
1443
1444 testb $3, CS-RIP+8(%rsp)
1445 jz .Lnmi_from_kernel
1446
1447 /*
1448 * NMI from user mode. We need to run on the thread stack, but we
1449 * can't go through the normal entry paths: NMIs are masked, and
1450 * we don't want to enable interrupts, because then we'll end
1451 * up in an awkward situation in which IRQs are on but NMIs
1452 * are off.
1453 *
1454 * We also must not push anything to the stack before switching
1455 * stacks lest we corrupt the "NMI executing" variable.
1456 */
1457
1458 swapgs
1459 cld
1460 FENCE_SWAPGS_USER_ENTRY
1461 SWITCH_TO_KERNEL_CR3 scratch_reg=%rdx
1462 movq %rsp, %rdx
1463 movq PER_CPU_VAR(cpu_current_top_of_stack), %rsp
1464 UNWIND_HINT_IRET_REGS base=%rdx offset=8
1465 pushq 5*8(%rdx) /* pt_regs->ss */
1466 pushq 4*8(%rdx) /* pt_regs->rsp */
1467 pushq 3*8(%rdx) /* pt_regs->flags */
1468 pushq 2*8(%rdx) /* pt_regs->cs */
1469 pushq 1*8(%rdx) /* pt_regs->rip */
1470 UNWIND_HINT_IRET_REGS
1471 pushq $-1 /* pt_regs->orig_ax */
1472 PUSH_AND_CLEAR_REGS rdx=(%rdx)
1473 ENCODE_FRAME_POINTER
1474
1475 /*
1476 * At this point we no longer need to worry about stack damage
1477 * due to nesting -- we're on the normal thread stack and we're
1478 * done with the NMI stack.
1479 */
1480
1481 movq %rsp, %rdi
1482 movq $-1, %rsi
1483 call do_nmi
1484
> 1485 SEV_ES_NMI_COMPLETE
1486
1487 /*
1488 * Return back to user mode. We must *not* do the normal exit
1489 * work, because we don't want to enable interrupts.
1490 */
1491 jmp swapgs_restore_regs_and_return_to_usermode
1492
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 40540 bytes --]
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2020-02-15 8:23 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-15 8:23 [joro:sev-es-client-v5.6-rc1 63/63] arch/x86/entry/entry_64.S:1485: Error: no such instruction: `sev_es_nmi_complete' kbuild test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.