summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGlauber Costa <glommer@redhat.com>2009-05-08 02:22:13 -0300
committerAnthony Liguori <aliguori@us.ibm.com>2009-05-08 15:24:10 -0500
commitd6ecb03610dba922cbfde42acb41603e2c658047 (patch)
tree9a8df52da6e5bd815349f08a68d6a6063d900134
parente28f988427c3a27cf42ef2229f12f0a7e67cb00c (diff)
reset state for load_linux
The linux loader is just an option rom like any other, just with some special requirements. Right now, our option rom resetting mechanism is not being applied to it. As a result, users using -kernel will not be able to successfully reboot their machines This patch fixes it by saving all the data we generated in the load_linux() function, to be used later by the option rom resetting mechanism. Signed-off-by: Glauber Costa <glommer@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
-rw-r--r--hw/pc.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/hw/pc.c b/hw/pc.c
index 00254743b..6b4642742 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -579,6 +579,7 @@ static void generate_bootsect(target_phys_addr_t option_rom,
rom[sizeof(rom) - 1] = -sum;
cpu_physical_memory_write_rom(option_rom, rom, sizeof(rom));
+ option_rom_setup_reset(option_rom, sizeof (rom));
}
static long get_file_size(FILE *f)
@@ -746,6 +747,12 @@ static void load_linux(target_phys_addr_t option_rom,
memset(gpr, 0, sizeof gpr);
gpr[4] = cmdline_addr-real_addr-16; /* SP (-16 is paranoia) */
+ option_rom_setup_reset(real_addr, setup_size);
+ option_rom_setup_reset(prot_addr, kernel_size);
+ option_rom_setup_reset(cmdline_addr, cmdline_size);
+ if (initrd_filename)
+ option_rom_setup_reset(initrd_addr, initrd_size);
+
generate_bootsect(option_rom, gpr, seg, 0);
}