Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 80110
b: refs/heads/master
c: 8b2cb7a
h: refs/heads/master
v: v3
  • Loading branch information
Huang, Ying authored and Ingo Molnar committed Jan 30, 2008
1 parent 40654b9 commit d87e2a4
Show file tree
Hide file tree
Showing 8 changed files with 26 additions and 46 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: bfd074e05bdb69652d24ebc60b126899174ca788
refs/heads/master: 8b2cb7a8f531d6ca72a8aff873b9bb1c6b3122ba
2 changes: 2 additions & 0 deletions trunk/Documentation/kernel-parameters.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1169,6 +1169,8 @@ and is between 256 and 4096 characters. It is defined in the file

nodisconnect [HW,SCSI,M68K] Disables SCSI disconnects.

noefi [X86-32,X86-64] Disable EFI runtime services support.

noexec [IA-64]

noexec [X86-32,X86-64]
Expand Down
4 changes: 0 additions & 4 deletions trunk/Documentation/x86_64/boot-options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -306,8 +306,4 @@ Debugging
newfallback: use new unwinder but fall back to old if it gets
stuck (default)

EFI

noefi Disable EFI support

Miscellaneous
19 changes: 8 additions & 11 deletions trunk/arch/x86/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -961,21 +961,18 @@ config MTRR

config EFI
def_bool n
prompt "Boot from EFI support"
prompt "EFI runtime service support"
depends on ACPI
---help---
This enables the kernel to boot on EFI platforms using
system configuration information passed to it from the firmware.
This also enables the kernel to use any EFI runtime services that are
This enables the kernel to use EFI runtime services that are
available (such as the EFI variable services).

This option is only useful on systems that have EFI firmware
and will result in a kernel image that is ~8k larger. In addition,
you must use the latest ELILO loader available at
<http://elilo.sourceforge.net> in order to take advantage of
kernel initialization using EFI information (neither GRUB nor LILO know
anything about EFI). However, even with this option, the resultant
kernel should continue to boot on existing non-EFI platforms.
This option is only useful on systems that have EFI firmware.
In addition, you should use the latest ELILO loader available
at <http://elilo.sourceforge.net> in order to take advantage
of EFI runtime services. However, even with this option, the
resultant kernel should continue to boot on existing non-EFI
platforms.

config IRQBALANCE
def_bool y
Expand Down
7 changes: 7 additions & 0 deletions trunk/arch/x86/kernel/efi.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,13 @@ struct efi_memory_map memmap;
struct efi efi_phys __initdata;
static efi_system_table_t efi_systab __initdata;

static int __init setup_noefi(char *arg)
{
efi_enabled = 0;
return 0;
}
early_param("noefi", setup_noefi);

static efi_status_t virt_efi_get_time(efi_time_t *tm, efi_time_cap_t *tc)
{
return efi_call_virt2(get_time, tm, tc);
Expand Down
25 changes: 5 additions & 20 deletions trunk/arch/x86/kernel/efi_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,27 +20,15 @@
*/

#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/mm.h>
#include <linux/types.h>
#include <linux/time.h>
#include <linux/spinlock.h>
#include <linux/bootmem.h>
#include <linux/ioport.h>
#include <linux/module.h>
#include <linux/efi.h>
#include <linux/kexec.h>

#include <asm/setup.h>
#include <asm/io.h>
#include <asm/page.h>
#include <asm/pgtable.h>
#include <asm/processor.h>
#include <asm/desc.h>
#include <asm/tlbflush.h>

#define PFX "EFI: "

/*
* To make EFI call EFI runtime service in physical addressing mode we need
* prelog/epilog before/after the invocation to disable interrupt, to
Expand All @@ -49,16 +37,14 @@
*/

static unsigned long efi_rt_eflags;
static DEFINE_SPINLOCK(efi_rt_lock);
static pgd_t efi_bak_pg_dir_pointer[2];

void efi_call_phys_prelog(void) __acquires(efi_rt_lock)
void efi_call_phys_prelog(void)
{
unsigned long cr4;
unsigned long temp;
struct desc_ptr gdt_descr;

spin_lock(&efi_rt_lock);
local_irq_save(efi_rt_eflags);

/*
Expand Down Expand Up @@ -88,14 +74,14 @@ void efi_call_phys_prelog(void) __acquires(efi_rt_lock)
/*
* After the lock is released, the original page table is restored.
*/
local_flush_tlb();
__flush_tlb_all();

gdt_descr.address = __pa(get_cpu_gdt_table(0));
gdt_descr.size = GDT_SIZE - 1;
load_gdt(&gdt_descr);
}

void efi_call_phys_epilog(void) __releases(efi_rt_lock)
void efi_call_phys_epilog(void)
{
unsigned long cr4;
struct desc_ptr gdt_descr;
Expand All @@ -119,10 +105,9 @@ void efi_call_phys_epilog(void) __releases(efi_rt_lock)
/*
* After the lock is released, the original page table is restored.
*/
local_flush_tlb();
__flush_tlb_all();

local_irq_restore(efi_rt_eflags);
spin_unlock(&efi_rt_lock);
}

/*
Expand All @@ -135,7 +120,7 @@ void __init efi_map_memmap(void)
memmap.map = bt_ioremap((unsigned long) memmap.phys_map,
(memmap.nr_map * memmap.desc_size));
if (memmap.map == NULL)
printk(KERN_ERR PFX "Could not remap the EFI memmap!\n");
printk(KERN_ERR "Could not remap the EFI memmap!\n");

memmap.map_end = memmap.map + (memmap.nr_map * memmap.desc_size);
}
7 changes: 0 additions & 7 deletions trunk/arch/x86/kernel/efi_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,6 @@
static pgd_t save_pgd __initdata;
static unsigned long efi_flags __initdata;

static int __init setup_noefi(char *arg)
{
efi_enabled = 0;
return 0;
}
early_param("noefi", setup_noefi);

static void __init early_mapping_set_exec(unsigned long start,
unsigned long end,
int executable)
Expand Down
6 changes: 3 additions & 3 deletions trunk/arch/x86/kernel/setup_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -648,9 +648,6 @@ void __init setup_arch(char **cmdline_p)
printk(KERN_INFO "BIOS-provided physical RAM map:\n");
print_memory_map(memory_setup());

if (efi_enabled)
efi_init();

copy_edd();

if (!boot_params.hdr.root_flags)
Expand All @@ -677,6 +674,9 @@ void __init setup_arch(char **cmdline_p)
strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
*cmdline_p = command_line;

if (efi_enabled)
efi_init();

max_low_pfn = setup_memory();

#ifdef CONFIG_VMI
Expand Down

0 comments on commit d87e2a4

Please sign in to comment.