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

Commit f3670394 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Revert "x86/efi: Fixup GOT in all boot code paths"



This reverts commit 9cb0e394.

It causes my Sony Vaio Pro 11 to immediately reboot at startup.

Acked-by: default avatarIngo Molnar <mingo@kernel.org>
Cc: Peter Anvin <hpa@zytor.com>
Cc: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Matt Fleming <matt.fleming@intel.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 98f75b82
Loading
Loading
Loading
Loading
+14 −40
Original line number Diff line number Diff line
@@ -30,33 +30,6 @@
#include <asm/boot.h>
#include <asm/asm-offsets.h>

/*
 * Adjust our own GOT
 *
 * The relocation base must be in %ebx
 *
 * It is safe to call this macro more than once, because in some of the
 * code paths multiple invocations are inevitable, e.g. via the efi*
 * entry points.
 *
 * Relocation is only performed the first time.
 */
.macro FIXUP_GOT
	cmpb	$1, got_fixed(%ebx)
	je	2f

	leal	_got(%ebx), %edx
	leal	_egot(%ebx), %ecx
1:
	cmpl	%ecx, %edx
	jae	2f
	addl	%ebx, (%edx)
	addl	$4, %edx
	jmp	1b
2:
	movb	$1, got_fixed(%ebx)
.endm

	__HEAD
ENTRY(startup_32)
#ifdef CONFIG_EFI_STUB
@@ -83,9 +56,6 @@ ENTRY(efi_pe_entry)
	add	%esi, 88(%eax)
	pushl	%eax

	movl	%esi, %ebx
	FIXUP_GOT

	call	make_boot_params
	cmpl	$0, %eax
	je	fail
@@ -111,10 +81,6 @@ ENTRY(efi32_stub_entry)
	leal	efi32_config(%esi), %eax
	add	%esi, 88(%eax)
	pushl	%eax

	movl	%esi, %ebx
	FIXUP_GOT

2:
	call	efi_main
	cmpl	$0, %eax
@@ -224,7 +190,19 @@ relocated:
	shrl	$2, %ecx
	rep	stosl

	FIXUP_GOT
/*
 * Adjust our own GOT
 */
	leal	_got(%ebx), %edx
	leal	_egot(%ebx), %ecx
1:
	cmpl	%ecx, %edx
	jae	2f
	addl	%ebx, (%edx)
	addl	$4, %edx
	jmp	1b
2:

/*
 * Do the decompression, and jump to the new kernel..
 */
@@ -247,12 +225,8 @@ relocated:
	xorl	%ebx, %ebx
	jmp	*%eax

	.data
/* Have we relocated the GOT? */
got_fixed:
	.byte 0

#ifdef CONFIG_EFI_STUB
	.data
efi32_config:
	.fill 11,8,0
	.long efi_call_phys
+15 −41
Original line number Diff line number Diff line
@@ -32,33 +32,6 @@
#include <asm/processor-flags.h>
#include <asm/asm-offsets.h>

/*
 * Adjust our own GOT
 *
 * The relocation base must be in %rbx
 *
 * It is safe to call this macro more than once, because in some of the
 * code paths multiple invocations are inevitable, e.g. via the efi*
 * entry points.
 *
 * Relocation is only performed the first time.
 */
.macro FIXUP_GOT
	cmpb	$1, got_fixed(%rip)
	je	2f

	leaq	_got(%rip), %rdx
	leaq	_egot(%rip), %rcx
1:
	cmpq	%rcx, %rdx
	jae	2f
	addq	%rbx, (%rdx)
	addq	$8, %rdx
	jmp	1b
2:
	movb	$1, got_fixed(%rip)
.endm

	__HEAD
	.code32
ENTRY(startup_32)
@@ -279,13 +252,10 @@ ENTRY(efi_pe_entry)
	subq	$1b, %rbp

	/*
	 * Relocate efi_config->call() and the GOT entries.
	 * Relocate efi_config->call().
	 */
	addq	%rbp, efi64_config+88(%rip)

	movq	%rbp, %rbx
	FIXUP_GOT

	movq	%rax, %rdi
	call	make_boot_params
	cmpq	$0,%rax
@@ -301,13 +271,10 @@ handover_entry:
	subq	$1b, %rbp

	/*
	 * Relocate efi_config->call() and the GOT entries.
	 * Relocate efi_config->call().
	 */
	movq	efi_config(%rip), %rax
	addq	%rbp, 88(%rax)

	movq	%rbp, %rbx
	FIXUP_GOT
2:
	movq	efi_config(%rip), %rdi
	call	efi_main
@@ -418,7 +385,18 @@ relocated:
	shrq	$3, %rcx
	rep	stosq

	FIXUP_GOT
/*
 * Adjust our own GOT
 */
	leaq	_got(%rip), %rdx
	leaq	_egot(%rip), %rcx
1:
	cmpq	%rcx, %rdx
	jae	2f
	addq	%rbx, (%rdx)
	addq	$8, %rdx
	jmp	1b
2:
	
/*
 * Do the decompression, and jump to the new kernel..
@@ -459,10 +437,6 @@ gdt:
	.quad   0x0000000000000000	/* TS continued */
gdt_end:

/* Have we relocated the GOT? */
got_fixed:
	.byte	0

#ifdef CONFIG_EFI_STUB
efi_config:
	.quad	0