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

Commit 5a18c92a authored by Eric W. Biederman's avatar Eric W. Biederman Committed by Linus Torvalds
Browse files

Revert "[PATCH] paravirt: Add startup infrastructure for paravirtualization"



This reverts commit c9ccf30d.

Entering the kernel at startup_32 without passing our real mode data in
%esi, and without guaranteeing that physical and virtual addresses are
identity mapped makes head.S impossible to maintain.

The only user of this infrastructure is lguest which is not merged so
nothing we currently support will break by removing this over designed
nightmare, and only the pending lguest patches will be affected.  The
pending Xen patches have a different entry point that they use.

We are currently discussing what Xen and lguest need to do to boot the
kernel in a more normal fashion so using startup_32 in this weird manner is
clearly not their long term direction.

So let's remove this code in head.S before it causes brain damage to people
trying to maintain head.S

Cc: Chris Wright <chrisw@sous-sol.org>
Cc: Andi Kleen <ak@suse.de>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: Zachary Amsden <zach@vmware.com>
CC: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 0cfe61e1
Loading
Loading
Loading
Loading
+0 −38
Original line number Diff line number Diff line
@@ -71,12 +71,6 @@ INIT_MAP_BEYOND_END = BOOTBITMAP_SIZE + (PAGE_TABLE_SIZE + ALLOCATOR_SLOP)*PAGE_
.section .text.head,"ax",@progbits
ENTRY(startup_32)

#ifdef CONFIG_PARAVIRT
        movl %cs, %eax
        testl $0x3, %eax
        jnz startup_paravirt
#endif

/*
 * Set segments to known values.
 */
@@ -501,38 +495,6 @@ ignore_int:
	iret

.section .text
#ifdef CONFIG_PARAVIRT
startup_paravirt:
	cld
 	movl $(init_thread_union+THREAD_SIZE),%esp

	/* We take pains to preserve all the regs. */
	pushl	%edx
	pushl	%ecx
	pushl	%eax

	pushl	$__start_paravirtprobe
1:
	movl	0(%esp), %eax
	cmpl	$__stop_paravirtprobe, %eax
	je	unhandled_paravirt
	pushl	(%eax)
	movl	8(%esp), %eax
	call	*(%esp)
	popl	%eax

	movl	4(%esp), %eax
	movl	8(%esp), %ecx
	movl	12(%esp), %edx

	addl	$4, (%esp)
	jmp	1b

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

/*
 * Real beginning of normal "text" segment
 */
+0 −1
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@
#include <linux/module.h>
#include <linux/efi.h>
#include <linux/bcd.h>
#include <linux/start_kernel.h>
#include <linux/highmem.h>

#include <asm/bug.h>
+0 −6
Original line number Diff line number Diff line
@@ -78,12 +78,6 @@ SECTIONS
	CONSTRUCTORS
	} :data

  .paravirtprobe : AT(ADDR(.paravirtprobe) - LOAD_OFFSET) {
  	__start_paravirtprobe = .;
	*(.paravirtprobe)
  	__stop_paravirtprobe = .;
  }

  . = ALIGN(4096);
  .data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) {
  	__nosave_begin = .;
+0 −5
Original line number Diff line number Diff line
@@ -222,11 +222,6 @@ struct paravirt_ops
	void (*iret)(void);
};

/* Mark a paravirt probe function. */
#define paravirt_probe(fn)						\
 static asmlinkage void (*__paravirtprobe_##fn)(void) __attribute_used__ \
		__attribute__((__section__(".paravirtprobe"))) = fn

extern struct paravirt_ops paravirt_ops;

#define PARAVIRT_PATCH(x)					\