aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2007-05-10 06:15:36 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-05-10 12:26:53 -0400
commit5a18c92aab13aac7917bc87ceefa23da68698be4 (patch)
treeee03d8c6ee5d695ea4e548680ab09253f5874685
parent0cfe61e1a72b345073bb7900a7887da8541abc7a (diff)
Revert "[PATCH] paravirt: Add startup infrastructure for paravirtualization"
This reverts commit c9ccf30d77f04064fe5436027ab9d2230c7cdd94. 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: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--arch/i386/kernel/head.S38
-rw-r--r--arch/i386/kernel/paravirt.c1
-rw-r--r--arch/i386/kernel/vmlinux.lds.S6
-rw-r--r--include/asm-i386/paravirt.h5
4 files changed, 0 insertions, 50 deletions
diff --git a/arch/i386/kernel/head.S b/arch/i386/kernel/head.S
index 9b10af65faaa..f74dfc419b56 100644
--- a/arch/i386/kernel/head.S
+++ b/arch/i386/kernel/head.S
@@ -71,12 +71,6 @@ INIT_MAP_BEYOND_END = BOOTBITMAP_SIZE + (PAGE_TABLE_SIZE + ALLOCATOR_SLOP)*PAGE_
71.section .text.head,"ax",@progbits 71.section .text.head,"ax",@progbits
72ENTRY(startup_32) 72ENTRY(startup_32)
73 73
74#ifdef CONFIG_PARAVIRT
75 movl %cs, %eax
76 testl $0x3, %eax
77 jnz startup_paravirt
78#endif
79
80/* 74/*
81 * Set segments to known values. 75 * Set segments to known values.
82 */ 76 */
@@ -501,38 +495,6 @@ ignore_int:
501 iret 495 iret
502 496
503.section .text 497.section .text
504#ifdef CONFIG_PARAVIRT
505startup_paravirt:
506 cld
507 movl $(init_thread_union+THREAD_SIZE),%esp
508
509 /* We take pains to preserve all the regs. */
510 pushl %edx
511 pushl %ecx
512 pushl %eax
513
514 pushl $__start_paravirtprobe
5151:
516 movl 0(%esp), %eax
517 cmpl $__stop_paravirtprobe, %eax
518 je unhandled_paravirt
519 pushl (%eax)
520 movl 8(%esp), %eax
521 call *(%esp)
522 popl %eax
523
524 movl 4(%esp), %eax
525 movl 8(%esp), %ecx
526 movl 12(%esp), %edx
527
528 addl $4, (%esp)
529 jmp 1b
530
531unhandled_paravirt:
532 /* Nothing wanted us: we're screwed. */
533 ud2
534#endif
535
536/* 498/*
537 * Real beginning of normal "text" segment 499 * Real beginning of normal "text" segment
538 */ 500 */
diff --git a/arch/i386/kernel/paravirt.c b/arch/i386/kernel/paravirt.c
index 5c10f376bce1..faab09abca5e 100644
--- a/arch/i386/kernel/paravirt.c
+++ b/arch/i386/kernel/paravirt.c
@@ -19,7 +19,6 @@
19#include <linux/module.h> 19#include <linux/module.h>
20#include <linux/efi.h> 20#include <linux/efi.h>
21#include <linux/bcd.h> 21#include <linux/bcd.h>
22#include <linux/start_kernel.h>
23#include <linux/highmem.h> 22#include <linux/highmem.h>
24 23
25#include <asm/bug.h> 24#include <asm/bug.h>
diff --git a/arch/i386/kernel/vmlinux.lds.S b/arch/i386/kernel/vmlinux.lds.S
index 23e8614edeee..80bec6640230 100644
--- a/arch/i386/kernel/vmlinux.lds.S
+++ b/arch/i386/kernel/vmlinux.lds.S
@@ -78,12 +78,6 @@ SECTIONS
78 CONSTRUCTORS 78 CONSTRUCTORS
79 } :data 79 } :data
80 80
81 .paravirtprobe : AT(ADDR(.paravirtprobe) - LOAD_OFFSET) {
82 __start_paravirtprobe = .;
83 *(.paravirtprobe)
84 __stop_paravirtprobe = .;
85 }
86
87 . = ALIGN(4096); 81 . = ALIGN(4096);
88 .data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) { 82 .data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) {
89 __nosave_begin = .; 83 __nosave_begin = .;
diff --git a/include/asm-i386/paravirt.h b/include/asm-i386/paravirt.h
index bc5c12c13581..d7a0512f88e0 100644
--- a/include/asm-i386/paravirt.h
+++ b/include/asm-i386/paravirt.h
@@ -222,11 +222,6 @@ struct paravirt_ops
222 void (*iret)(void); 222 void (*iret)(void);
223}; 223};
224 224
225/* Mark a paravirt probe function. */
226#define paravirt_probe(fn) \
227 static asmlinkage void (*__paravirtprobe_##fn)(void) __attribute_used__ \
228 __attribute__((__section__(".paravirtprobe"))) = fn
229
230extern struct paravirt_ops paravirt_ops; 225extern struct paravirt_ops paravirt_ops;
231 226
232#define PARAVIRT_PATCH(x) \ 227#define PARAVIRT_PATCH(x) \