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

Commit 992af681 authored by Rusty Russell's avatar Rusty Russell Committed by Andi Kleen
Browse files

[PATCH] i386: paravirt unhandled fallthrough



The current code simply calls "start_kernel" directly if we're under a
hypervisor and no paravirt_ops backend wants us, because paravirt.c
registers that as a backend.

This was always a vain hope; start_kernel won't get far without setup.
It's also impossible for paravirt_ops backends which don't sit in the
arch/i386/kernel directory: they can't link before paravirt.o anyway.

Keep it simple: if we pass all the registered paravirt probes, BUG().

Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
parent 9af3cf05
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -41,8 +41,6 @@ obj-$(CONFIG_HPET_TIMER) += hpet.o
obj-$(CONFIG_K8_NB)		+= k8.o

obj-$(CONFIG_VMI)		+= vmi.o vmitime.o

# Make sure this is linked after any other paravirt_ops structs: see head.S
obj-$(CONFIG_PARAVIRT)		+= paravirt.o

EXTRA_AFLAGS   := -traditional
+6 −1
Original line number Diff line number Diff line
@@ -513,10 +513,11 @@ startup_paravirt:
	pushl	%ecx
	pushl	%eax

	/* paravirt.o is last in link, and that probe fn never returns */
	pushl	$__start_paravirtprobe
1:
	movl	0(%esp), %eax
	cmpl	$__stop_paravirtprobe, %eax
	je	unhandled_paravirt
	pushl	(%eax)
	movl	8(%esp), %eax
	call	*(%esp)
@@ -528,6 +529,10 @@ startup_paravirt:

	addl	$4, (%esp)
	jmp	1b

unhandled_paravirt:
	/* Nothing wanted us: we're screwed. */
	ud2
#endif

/*
+0 −3
Original line number Diff line number Diff line
@@ -482,9 +482,6 @@ static int __init print_banner(void)
}
core_initcall(print_banner);

/* We simply declare start_kernel to be the paravirt probe of last resort. */
paravirt_probe(start_kernel);

struct paravirt_ops paravirt_ops = {
	.name = "bare hardware",
	.paravirt_enabled = 0,