[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] x86/entry/64/paravirt: Use paravirt-safe macro to access eflags
On Fri, Dec 1, 2017 at 8:57 AM, Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx> wrote: > On 12/01/2017 11:22 AM, Andy Lutomirski wrote: >> On Tue, Nov 28, 2017 at 7:28 AM, Boris Ostrovsky >> <boris.ostrovsky@xxxxxxxxxx> wrote: >>> Commit 1d3e53e8624a ("x86/entry/64: Refactor IRQ stacks and make >>> them NMI-safe") added DEBUG_ENTRY_ASSERT_IRQS_OFF macro that acceses >>> eflags using 'pushfq' instruction when testing for IF bit. On PV Xen >>> guests looking at IF flag directly will always see it set, resulting >>> in 'ud2'. >>> >>> Introduce SAVE_FLAGS() macro that will use appropriate save_fl pv op >>> when running paravirt. >>> >>> Signed-off-by: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx> >>> --- >>> V2: >>> * Preserve %rax in DEBUG_ENTRY_ASSERT_IRQS_OFF >>> * Return (pop) %rax in SAVE_FLAGS for !CONFIG_PARAVIRT (irqflags.h) >>> >>> arch/x86/entry/entry_64.S | 7 ++++--- >>> arch/x86/include/asm/irqflags.h | 3 +++ >>> arch/x86/include/asm/paravirt.h | 9 +++++++++ >>> arch/x86/kernel/asm-offsets_64.c | 3 +++ >>> 4 files changed, 19 insertions(+), 3 deletions(-) >>> >>> diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S >>> index f81d50d..c208dc1 100644 >>> --- a/arch/x86/entry/entry_64.S >>> +++ b/arch/x86/entry/entry_64.S >>> @@ -466,12 +466,13 @@ END(irq_entries_start) >>> >>> .macro DEBUG_ENTRY_ASSERT_IRQS_OFF >>> #ifdef CONFIG_DEBUG_ENTRY >>> - pushfq >>> - testl $X86_EFLAGS_IF, (%rsp) >>> + pushq %rax >>> + SAVE_FLAGS(CLBR_ANY) >>> + testl $X86_EFLAGS_IF, %eax >> Confused. You're both using CLBR_ANY and RAX. Did you perhaps mean >> CLBR_NONE? > > CLBR_NONE will restore all registers, won't it? So it should be > CLBR_RAX, should it? Otherwise we'll lose return value. Ugh, probably right. I've never grokked exactly what CLBR_ does. > > -boris > >> >>> jz .Lokay_\@ >>> ud2 >>> .Lokay_\@: >>> - addq $8, %rsp >>> + popq %rax >>> #endif >>> .endm >>> >>> > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |