merge trunk
This commit is contained in:
commit
b7d86d53c4
12 changed files with 108 additions and 12 deletions
|
@ -135,8 +135,12 @@ grub_find_root_device_from_mountinfo (const char *dir, char **relroot)
|
|||
continue;
|
||||
|
||||
enc_path_len = strlen (enc_path);
|
||||
/* Check that enc_path is a prefix of dir. The prefix must either be
|
||||
the entire string, or end with a slash, or be immediately followed
|
||||
by a slash. */
|
||||
if (strncmp (dir, enc_path, enc_path_len) != 0 ||
|
||||
(dir[enc_path_len] && dir[enc_path_len] != '/'))
|
||||
(enc_path_len && dir[enc_path_len - 1] != '/' &&
|
||||
dir[enc_path_len] && dir[enc_path_len] != '/'))
|
||||
continue;
|
||||
|
||||
/* This is a parent of the requested directory. /proc/self/mountinfo
|
||||
|
@ -787,11 +791,18 @@ grub_util_get_grub_dev (const char *os_dev)
|
|||
#ifdef __linux__
|
||||
{
|
||||
char *mdadm_name = get_mdadm_name (os_dev);
|
||||
struct stat st;
|
||||
|
||||
if (mdadm_name)
|
||||
{
|
||||
free (grub_dev);
|
||||
grub_dev = xasprintf ("md/%s", mdadm_name);
|
||||
char *newname;
|
||||
newname = xasprintf ("/dev/md/%s", mdadm_name);
|
||||
if (stat (newname, &st) == 0)
|
||||
{
|
||||
free (grub_dev);
|
||||
grub_dev = xasprintf ("md/%s", mdadm_name);
|
||||
}
|
||||
free (newname);
|
||||
free (mdadm_name);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -62,13 +62,25 @@ grub_relocator_firmware_fill_events (struct grub_relocator_mmap_event *events)
|
|||
(char *) desc < ((char *) descs + mmapsize);
|
||||
desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size))
|
||||
{
|
||||
grub_uint64_t start = desc->physical_start;
|
||||
grub_uint64_t end = desc->physical_start + (desc->num_pages << 12);
|
||||
|
||||
/* post-4G addresses are never supported on 32-bit EFI.
|
||||
Moreover it has been reported that some 64-bit EFI contrary to the
|
||||
spec don't map post-4G pages. So if you enable post-4G allocations,
|
||||
map pages manually or check that they are mapped.
|
||||
*/
|
||||
if (end >= 0x100000000ULL)
|
||||
end = 0x100000000ULL;
|
||||
if (end <= start)
|
||||
continue;
|
||||
if (desc->type != GRUB_EFI_CONVENTIONAL_MEMORY)
|
||||
continue;
|
||||
events[counter].type = REG_FIRMWARE_START;
|
||||
events[counter].pos = desc->physical_start;
|
||||
events[counter].pos = start;
|
||||
counter++;
|
||||
events[counter].type = REG_FIRMWARE_END;
|
||||
events[counter].pos = desc->physical_start + (desc->num_pages << 12);
|
||||
events[counter].pos = end;
|
||||
counter++;
|
||||
}
|
||||
|
||||
|
@ -85,6 +97,9 @@ grub_relocator_firmware_alloc_region (grub_addr_t start, grub_size_t size)
|
|||
if (grub_efi_is_finished)
|
||||
return 1;
|
||||
|
||||
grub_dprintf ("relocator", "EFI alloc: %llx, %llx\n",
|
||||
(unsigned long long) start, (unsigned long long) size);
|
||||
|
||||
b = grub_efi_system_table->boot_services;
|
||||
status = efi_call_4 (b->allocate_pages, GRUB_EFI_ALLOCATE_ADDRESS,
|
||||
GRUB_EFI_LOADER_DATA, size >> 12, &address);
|
||||
|
|
|
@ -252,7 +252,7 @@ struct grub_e820_mmap
|
|||
#define GRUB_E820_RESERVED 2
|
||||
#define GRUB_E820_ACPI 3
|
||||
#define GRUB_E820_NVS 4
|
||||
#define GRUB_E820_EXEC_CODE 5
|
||||
#define GRUB_E820_BADRAM 5
|
||||
|
||||
static void
|
||||
generate_e820_mmap (grub_size_t *len, grub_size_t *cnt, void *buf)
|
||||
|
|
|
@ -418,9 +418,9 @@ grub_linux_boot (void)
|
|||
addr, size, GRUB_E820_NVS);
|
||||
break;
|
||||
|
||||
case GRUB_MEMORY_CODE:
|
||||
case GRUB_MEMORY_BADRAM:
|
||||
grub_e820_add_region (params->e820_map, &e820_num,
|
||||
addr, size, GRUB_E820_EXEC_CODE);
|
||||
addr, size, GRUB_E820_BADRAM);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -170,6 +170,8 @@ grub_ofconsole_init_output (struct grub_term_output *term)
|
|||
|
||||
grub_ofconsole_dimensions ();
|
||||
|
||||
grub_terminfo_output_init (term);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -104,6 +104,7 @@ static struct grub_term_input grub_serial_term_input =
|
|||
static struct grub_term_output grub_serial_term_output =
|
||||
{
|
||||
.name = "serial",
|
||||
.init = grub_terminfo_output_init,
|
||||
.putchar = grub_terminfo_putchar,
|
||||
.getwh = grub_terminfo_getwh,
|
||||
.getxy = grub_terminfo_getxy,
|
||||
|
|
|
@ -403,6 +403,8 @@ grub_terminfo_readkey (struct grub_term_input *term, int *keys, int *len,
|
|||
/* Backspace: Ctrl-h. */
|
||||
if (c == 0x7f)
|
||||
c = '\b';
|
||||
if (c < 0x20 && c != '\t' && c!= '\b' && c != '\n' && c != '\r')
|
||||
c = GRUB_TERM_CTRL | (c - 1 + 'a');
|
||||
*len = 1;
|
||||
keys[0] = c;
|
||||
return;
|
||||
|
@ -512,6 +514,13 @@ grub_terminfo_input_init (struct grub_term_input *termi)
|
|||
return GRUB_ERR_NONE;
|
||||
}
|
||||
|
||||
grub_err_t
|
||||
grub_terminfo_output_init (struct grub_term_output *term)
|
||||
{
|
||||
grub_terminfo_cls (term);
|
||||
return GRUB_ERR_NONE;
|
||||
}
|
||||
|
||||
/* GRUB Command. */
|
||||
|
||||
static grub_err_t
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue