merge mainline into butter
This commit is contained in:
commit
c7ba1ba62e
94 changed files with 4056 additions and 789 deletions
|
@ -19,6 +19,7 @@
|
|||
#include <grub/env.h>
|
||||
#include <grub/misc.h>
|
||||
#include <grub/disk.h>
|
||||
#include <grub/machine/biosnum.h>
|
||||
|
||||
static int
|
||||
grub_get_root_biosnumber_default (void)
|
||||
|
|
|
@ -58,7 +58,7 @@ struct legacy_command
|
|||
const char *longdesc;
|
||||
};
|
||||
|
||||
struct legacy_command legacy_commands[] =
|
||||
static struct legacy_command legacy_commands[] =
|
||||
{
|
||||
{"blocklist", "blocklist '%s'\n", NULL, 0, 1, {TYPE_FILE}, 0, "FILE",
|
||||
"Print the blocklist notation of the file FILE."},
|
||||
|
@ -116,7 +116,7 @@ struct legacy_command legacy_commands[] =
|
|||
" immediately starts over using the NUM entry (same numbering as the"
|
||||
" `default' command). This obviously won't help if the machine"
|
||||
" was rebooted by a kernel that GRUB loaded."},
|
||||
{"find", "search -sf '%s'\n", NULL, 0, 1, {TYPE_FILE}, 0, "FILENAME",
|
||||
{"find", "search -f '%s'\n", NULL, 0, 1, {TYPE_FILE}, 0, "FILENAME",
|
||||
"Search for the filename FILENAME in all of partitions and print the list of"
|
||||
" the devices which contain the file."},
|
||||
/* FIXME: fstest unsupported. */
|
||||
|
|
|
@ -77,10 +77,10 @@ struct grub_relocator_fw_leftover
|
|||
grub_uint8_t freebytes[GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT / 8];
|
||||
};
|
||||
|
||||
struct grub_relocator_fw_leftover *leftovers;
|
||||
static struct grub_relocator_fw_leftover *leftovers;
|
||||
#endif
|
||||
|
||||
struct grub_relocator_extra_block *extra_blocks;
|
||||
static struct grub_relocator_extra_block *extra_blocks;
|
||||
|
||||
void *
|
||||
get_virtual_current_address (grub_relocator_chunk_t in)
|
||||
|
@ -134,9 +134,10 @@ allocate_regstart (grub_phys_addr_t addr, grub_size_t size, grub_mm_region_t rb,
|
|||
grub_addr_t newreg_size, newreg_presize;
|
||||
grub_mm_header_t new_header;
|
||||
grub_mm_header_t hb = (grub_mm_header_t) (rb + 1);
|
||||
|
||||
grub_dprintf ("relocator", "ra = %p, rb = %p\n", regancestor, rb);
|
||||
|
||||
#ifdef DEBUG_RELOCATOR_NOMEM_DPRINTF
|
||||
grub_dprintf ("relocator", "ra = %p, rb = %p\n", regancestor, rb);
|
||||
#endif
|
||||
newreg_start = ALIGN_UP (newreg_raw_start, GRUB_MM_ALIGN);
|
||||
newreg_presize = newreg_start - newreg_raw_start;
|
||||
newreg_size = rb->size - (newreg_start - (grub_addr_t) rb);
|
||||
|
@ -179,11 +180,12 @@ allocate_regstart (grub_phys_addr_t addr, grub_size_t size, grub_mm_region_t rb,
|
|||
if ((void *) h < (void *) (newreg + 1))
|
||||
grub_fatal ("Failed to adjust memory region: %p, %p, %p, %p, %p",
|
||||
newreg, newreg->first, h, hp, hb);
|
||||
#ifdef DEBUG_RELOCATOR_NOMEM_DPRINTF
|
||||
if ((void *) h == (void *) (newreg + 1))
|
||||
grub_dprintf ("relocator",
|
||||
"Free start memory region: %p, %p, %p, %p, %p",
|
||||
newreg, newreg->first, h, hp, hb);
|
||||
|
||||
#endif
|
||||
hp = h;
|
||||
h = h->next;
|
||||
}
|
||||
|
@ -200,10 +202,12 @@ allocate_inreg (grub_phys_addr_t paddr, grub_size_t size,
|
|||
struct grub_mm_header *foll = NULL;
|
||||
grub_addr_t vaddr = (grub_addr_t) hb + (paddr - grub_vtop (hb));
|
||||
|
||||
#ifdef DEBUG_RELOCATOR_NOMEM_DPRINTF
|
||||
grub_dprintf ("relocator", "inreg paddr = 0x%lx, size = %lu,"
|
||||
" hb = %p, hbp = %p, rb = %p, vaddr = 0x%lx\n",
|
||||
(unsigned long) paddr, (unsigned long) size, hb, hbp,
|
||||
rb, (unsigned long) vaddr);
|
||||
#endif
|
||||
|
||||
if (ALIGN_UP (vaddr + size, GRUB_MM_ALIGN) + GRUB_MM_ALIGN
|
||||
<= (grub_addr_t) (hb + hb->size))
|
||||
|
@ -211,8 +215,10 @@ allocate_inreg (grub_phys_addr_t paddr, grub_size_t size,
|
|||
foll = (void *) ALIGN_UP (vaddr + size, GRUB_MM_ALIGN);
|
||||
foll->magic = GRUB_MM_FREE_MAGIC;
|
||||
foll->size = hb + hb->size - foll;
|
||||
#ifdef DEBUG_RELOCATOR_NOMEM_DPRINTF
|
||||
grub_dprintf ("relocator", "foll = %p, foll->size = %lu\n", foll,
|
||||
(unsigned long) foll->size);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (vaddr - (grub_addr_t) hb >= sizeof (*hb))
|
||||
|
@ -819,9 +825,11 @@ malloc_in_range (struct grub_relocator *rel,
|
|||
fend
|
||||
= ALIGN_UP (alloc_end,
|
||||
GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT);
|
||||
#ifdef DEBUG_RELOCATOR_NOMEM_DPRINTF
|
||||
grub_dprintf ("relocator", "requesting %lx-%lx\n",
|
||||
(unsigned long) fstart,
|
||||
(unsigned long) fend);
|
||||
#endif
|
||||
/* The failure here can be very expensive. */
|
||||
if (!grub_relocator_firmware_alloc_region (fstart,
|
||||
fend - fstart))
|
||||
|
@ -1282,23 +1290,8 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel,
|
|||
chunk->srcv = grub_map_memory (chunk->src, chunk->size);
|
||||
*out = chunk;
|
||||
#ifdef DEBUG_RELOCATOR
|
||||
{
|
||||
grub_mm_region_t r;
|
||||
grub_mm_header_t p;
|
||||
grub_memset (chunk->srcv, 0xfa, chunk->size);
|
||||
for (r = grub_mm_base; r; r = r->next)
|
||||
{
|
||||
p = r->first;
|
||||
do
|
||||
{
|
||||
if ((grub_addr_t) p < (grub_addr_t) (r + 1)
|
||||
|| (grub_addr_t) p >= (grub_addr_t) (r + 1) + r->size)
|
||||
grub_fatal (__FILE__ ":%d: out of range pointer: %p\n", __LINE__, p);
|
||||
p = p->next;
|
||||
}
|
||||
while (p != r->first);
|
||||
}
|
||||
}
|
||||
grub_memset (chunk->srcv, 0xfa, chunk->size);
|
||||
grub_mm_check ();
|
||||
#endif
|
||||
return GRUB_ERR_NONE;
|
||||
}
|
||||
|
@ -1423,11 +1416,17 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel,
|
|||
break;
|
||||
}
|
||||
|
||||
grub_dprintf ("relocator", "relocators_size=%ld\n",
|
||||
(unsigned long) rel->relocators_size);
|
||||
|
||||
if (chunk->src < chunk->target)
|
||||
rel->relocators_size += grub_relocator_backward_size;
|
||||
if (chunk->src > chunk->target)
|
||||
rel->relocators_size += grub_relocator_forward_size;
|
||||
|
||||
grub_dprintf ("relocator", "relocators_size=%ld\n",
|
||||
(unsigned long) rel->relocators_size);
|
||||
|
||||
chunk->size = size;
|
||||
chunk->next = rel->chunks;
|
||||
rel->chunks = chunk;
|
||||
|
@ -1436,24 +1435,8 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel,
|
|||
chunk->srcv = grub_map_memory (chunk->src, chunk->size);
|
||||
*out = chunk;
|
||||
#ifdef DEBUG_RELOCATOR
|
||||
{
|
||||
grub_mm_region_t r;
|
||||
grub_mm_header_t p;
|
||||
|
||||
grub_memset (chunk->srcv, 0xfa, chunk->size);
|
||||
for (r = grub_mm_base; r; r = r->next)
|
||||
{
|
||||
p = r->first;
|
||||
do
|
||||
{
|
||||
if ((grub_addr_t) p < (grub_addr_t) (r + 1)
|
||||
|| (grub_addr_t) p >= (grub_addr_t) (r + 1) + r->size)
|
||||
grub_fatal (__FILE__ "%d: out of range pointer: %p\n", __LINE__, p);
|
||||
p = p->next;
|
||||
}
|
||||
while (p != r->first);
|
||||
}
|
||||
}
|
||||
grub_memset (chunk->srcv, 0xfa, chunk->size);
|
||||
grub_mm_check ();
|
||||
#endif
|
||||
return GRUB_ERR_NONE;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue