Merge branch 'WIP.x86/boot' into x86/boot, to pick up ready branch
The E820 rework in WIP.x86/boot has gone through a couple of weeks of exposure in -tip, merge it in a wider fashion. Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
@@ -9,7 +9,9 @@
|
||||
|
||||
#include <linux/efi.h>
|
||||
#include <linux/pci.h>
|
||||
|
||||
#include <asm/efi.h>
|
||||
#include <asm/e820/types.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/desc.h>
|
||||
|
||||
@@ -729,7 +731,7 @@ static void add_e820ext(struct boot_params *params,
|
||||
unsigned long size;
|
||||
|
||||
e820ext->type = SETUP_E820_EXT;
|
||||
e820ext->len = nr_entries * sizeof(struct e820entry);
|
||||
e820ext->len = nr_entries * sizeof(struct boot_e820_entry);
|
||||
e820ext->next = 0;
|
||||
|
||||
data = (struct setup_data *)(unsigned long)params->hdr.setup_data;
|
||||
@@ -746,9 +748,9 @@ static void add_e820ext(struct boot_params *params,
|
||||
static efi_status_t setup_e820(struct boot_params *params,
|
||||
struct setup_data *e820ext, u32 e820ext_size)
|
||||
{
|
||||
struct e820entry *e820_map = ¶ms->e820_map[0];
|
||||
struct boot_e820_entry *entry = params->e820_table;
|
||||
struct efi_info *efi = ¶ms->efi_info;
|
||||
struct e820entry *prev = NULL;
|
||||
struct boot_e820_entry *prev = NULL;
|
||||
u32 nr_entries;
|
||||
u32 nr_desc;
|
||||
int i;
|
||||
@@ -773,15 +775,15 @@ static efi_status_t setup_e820(struct boot_params *params,
|
||||
case EFI_MEMORY_MAPPED_IO:
|
||||
case EFI_MEMORY_MAPPED_IO_PORT_SPACE:
|
||||
case EFI_PAL_CODE:
|
||||
e820_type = E820_RESERVED;
|
||||
e820_type = E820_TYPE_RESERVED;
|
||||
break;
|
||||
|
||||
case EFI_UNUSABLE_MEMORY:
|
||||
e820_type = E820_UNUSABLE;
|
||||
e820_type = E820_TYPE_UNUSABLE;
|
||||
break;
|
||||
|
||||
case EFI_ACPI_RECLAIM_MEMORY:
|
||||
e820_type = E820_ACPI;
|
||||
e820_type = E820_TYPE_ACPI;
|
||||
break;
|
||||
|
||||
case EFI_LOADER_CODE:
|
||||
@@ -789,15 +791,15 @@ static efi_status_t setup_e820(struct boot_params *params,
|
||||
case EFI_BOOT_SERVICES_CODE:
|
||||
case EFI_BOOT_SERVICES_DATA:
|
||||
case EFI_CONVENTIONAL_MEMORY:
|
||||
e820_type = E820_RAM;
|
||||
e820_type = E820_TYPE_RAM;
|
||||
break;
|
||||
|
||||
case EFI_ACPI_MEMORY_NVS:
|
||||
e820_type = E820_NVS;
|
||||
e820_type = E820_TYPE_NVS;
|
||||
break;
|
||||
|
||||
case EFI_PERSISTENT_MEMORY:
|
||||
e820_type = E820_PMEM;
|
||||
e820_type = E820_TYPE_PMEM;
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -811,26 +813,26 @@ static efi_status_t setup_e820(struct boot_params *params,
|
||||
continue;
|
||||
}
|
||||
|
||||
if (nr_entries == ARRAY_SIZE(params->e820_map)) {
|
||||
u32 need = (nr_desc - i) * sizeof(struct e820entry) +
|
||||
if (nr_entries == ARRAY_SIZE(params->e820_table)) {
|
||||
u32 need = (nr_desc - i) * sizeof(struct e820_entry) +
|
||||
sizeof(struct setup_data);
|
||||
|
||||
if (!e820ext || e820ext_size < need)
|
||||
return EFI_BUFFER_TOO_SMALL;
|
||||
|
||||
/* boot_params map full, switch to e820 extended */
|
||||
e820_map = (struct e820entry *)e820ext->data;
|
||||
entry = (struct boot_e820_entry *)e820ext->data;
|
||||
}
|
||||
|
||||
e820_map->addr = d->phys_addr;
|
||||
e820_map->size = d->num_pages << PAGE_SHIFT;
|
||||
e820_map->type = e820_type;
|
||||
prev = e820_map++;
|
||||
entry->addr = d->phys_addr;
|
||||
entry->size = d->num_pages << PAGE_SHIFT;
|
||||
entry->type = e820_type;
|
||||
prev = entry++;
|
||||
nr_entries++;
|
||||
}
|
||||
|
||||
if (nr_entries > ARRAY_SIZE(params->e820_map)) {
|
||||
u32 nr_e820ext = nr_entries - ARRAY_SIZE(params->e820_map);
|
||||
if (nr_entries > ARRAY_SIZE(params->e820_table)) {
|
||||
u32 nr_e820ext = nr_entries - ARRAY_SIZE(params->e820_table);
|
||||
|
||||
add_e820ext(params, e820ext, nr_e820ext);
|
||||
nr_entries -= nr_e820ext;
|
||||
@@ -848,7 +850,7 @@ static efi_status_t alloc_e820ext(u32 nr_desc, struct setup_data **e820ext,
|
||||
unsigned long size;
|
||||
|
||||
size = sizeof(struct setup_data) +
|
||||
sizeof(struct e820entry) * nr_desc;
|
||||
sizeof(struct e820_entry) * nr_desc;
|
||||
|
||||
if (*e820ext) {
|
||||
efi_call_early(free_pool, *e820ext);
|
||||
@@ -884,9 +886,9 @@ static efi_status_t exit_boot_func(efi_system_table_t *sys_table_arg,
|
||||
|
||||
if (first) {
|
||||
nr_desc = *map->buff_size / *map->desc_size;
|
||||
if (nr_desc > ARRAY_SIZE(p->boot_params->e820_map)) {
|
||||
if (nr_desc > ARRAY_SIZE(p->boot_params->e820_table)) {
|
||||
u32 nr_e820ext = nr_desc -
|
||||
ARRAY_SIZE(p->boot_params->e820_map);
|
||||
ARRAY_SIZE(p->boot_params->e820_table);
|
||||
|
||||
status = alloc_e820ext(nr_e820ext, &p->e820ext,
|
||||
&p->e820ext_size);
|
||||
|
@@ -426,7 +426,7 @@ static unsigned long slots_fetch_random(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void process_e820_entry(struct e820entry *entry,
|
||||
static void process_e820_entry(struct boot_e820_entry *entry,
|
||||
unsigned long minimum,
|
||||
unsigned long image_size)
|
||||
{
|
||||
@@ -435,7 +435,7 @@ static void process_e820_entry(struct e820entry *entry,
|
||||
unsigned long start_orig;
|
||||
|
||||
/* Skip non-RAM entries. */
|
||||
if (entry->type != E820_RAM)
|
||||
if (entry->type != E820_TYPE_RAM)
|
||||
return;
|
||||
|
||||
/* On 32-bit, ignore entries entirely above our maximum. */
|
||||
@@ -518,7 +518,7 @@ static unsigned long find_random_phys_addr(unsigned long minimum,
|
||||
|
||||
/* Verify potential e820 positions, appending to slots list. */
|
||||
for (i = 0; i < boot_params->e820_entries; i++) {
|
||||
process_e820_entry(&boot_params->e820_map[i], minimum,
|
||||
process_e820_entry(&boot_params->e820_table[i], minimum,
|
||||
image_size);
|
||||
if (slot_area_index == MAX_SLOT_AREA) {
|
||||
debug_putstr("Aborted e820 scan (slot_areas full)!\n");
|
||||
|
@@ -18,7 +18,6 @@
|
||||
#include <asm/segment.h>
|
||||
#include <generated/utsrelease.h>
|
||||
#include <asm/boot.h>
|
||||
#include <asm/e820.h>
|
||||
#include <asm/page_types.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/bootparam.h>
|
||||
|
@@ -21,8 +21,8 @@ static int detect_memory_e820(void)
|
||||
{
|
||||
int count = 0;
|
||||
struct biosregs ireg, oreg;
|
||||
struct e820entry *desc = boot_params.e820_map;
|
||||
static struct e820entry buf; /* static so it is zeroed */
|
||||
struct boot_e820_entry *desc = boot_params.e820_table;
|
||||
static struct boot_e820_entry buf; /* static so it is zeroed */
|
||||
|
||||
initregs(&ireg);
|
||||
ireg.ax = 0xe820;
|
||||
@@ -66,7 +66,7 @@ static int detect_memory_e820(void)
|
||||
|
||||
*desc++ = buf;
|
||||
count++;
|
||||
} while (ireg.ebx && count < ARRAY_SIZE(boot_params.e820_map));
|
||||
} while (ireg.ebx && count < ARRAY_SIZE(boot_params.e820_table));
|
||||
|
||||
return boot_params.e820_entries = count;
|
||||
}
|
||||
|
Reference in New Issue
Block a user