Re: [PATCH v8 4/4] nmi_backtrace: generate one-line reports for idle cpus

From: Chris Metcalf
Date: Mon Aug 29 2016 - 11:48:20 EST


On 8/18/2016 11:12 AM, Petr Mladek wrote:
On Tue 2016-08-16 15:50:24, Chris Metcalf wrote:
[...]
-static inline void native_safe_halt(void)
+static __always_inline void native_safe_halt(void)
{
asm volatile("sti; hlt": : :"memory");
}
Ah, the __always_inline stuff did not helped here. It was
not inlined:

$> nm -n vmlinux | grep native_safe_halt
ffffffff81050bc0 t native_safe_halt

The reason seems to be that it is called via
PVOP_VCALL0(pv_irq_ops.safe_halt);, see below
in the disassembly.

I guess that it is because I have
CONFIG_PARAVIRT=y

I fixed this by reverting to using __cpuidle instead of __always_inline.
As you discovered, we can't use <linux/cpu.h> here, but I chose to
just duplicate the #define of __cpuidle in <asm/irqflags.h> instead
since I think that's cleaner.

--
Chris Metcalf, Mellanox Technologies
http://www.mellanox.com