Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 97349135 authored by Jeremy Fitzhardinge's avatar Jeremy Fitzhardinge Committed by Ingo Molnar
Browse files

x86/paravirt: add debugging for missing operations



Rather than just jumping to 0 when there's a missing operation, raise a BUG.

Signed-off-by: default avatarJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Cc: xen-devel <xen-devel@lists.xensource.com>
Cc: Stephen Tweedie <sct@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: Mark McLoughlin <markmc@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent d8d5900e
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -435,6 +435,13 @@ config PARAVIRT_CLOCK

endif

config PARAVIRT_DEBUG
       bool "paravirt-ops debugging"
       depends on PARAVIRT && DEBUG_KERNEL
       help
         Enable to debug paravirt_ops internals.  Specifically, BUG if
	 a paravirt_op is missing when it is called.

config MEMTEST
	bool "Memtest"
	depends on X86_64
+8 −0
Original line number Diff line number Diff line
@@ -459,10 +459,17 @@ int paravirt_disable_iospace(void);
#define VEXTRA_CLOBBERS	 , "rax", "r8", "r9", "r10", "r11"
#endif

#ifdef CONFIG_PARAVIRT_DEBUG
#define PVOP_TEST_NULL(op)	BUG_ON(op == NULL)
#else
#define PVOP_TEST_NULL(op)	((void)op)
#endif

#define __PVOP_CALL(rettype, op, pre, post, ...)			\
	({								\
		rettype __ret;						\
		PVOP_CALL_ARGS;					\
		PVOP_TEST_NULL(op);					\
		/* This is 32-bit specific, but is okay in 64-bit */	\
		/* since this condition will never hold */		\
		if (sizeof(rettype) > sizeof(unsigned long)) {		\
@@ -491,6 +498,7 @@ int paravirt_disable_iospace(void);
#define __PVOP_VCALL(op, pre, post, ...)				\
	({								\
		PVOP_VCALL_ARGS;					\
		PVOP_TEST_NULL(op);					\
		asm volatile(pre					\
			     paravirt_alt(PARAVIRT_CALL)		\
			     post					\