Skip to content

Commit

Permalink
hw/arm/boot: fix rom_reset notifier registration order
Browse files Browse the repository at this point in the history
commit ac9d32e had the consequence to
register the do_cpu_reset after the rom_reset one. Hence they get
executed in the wrong order. This commit restores the registration of
do_cpu_reset in arm_load_kernel.

Signed-off-by: Eric Auger <[email protected]>
Reported-by: Peter Crosthwaite <[email protected]>
Reviewed-by: Peter Crosthwaite <[email protected]>
Tested-by: Peter Crosthwaite <[email protected]>
Message-id: [email protected]
Signed-off-by: Peter Maydell <[email protected]>
  • Loading branch information
Eric Auger authored and pm215 committed Jun 15, 2015
1 parent 13689d4 commit 63a183e
Showing 1 changed file with 11 additions and 9 deletions.
20 changes: 11 additions & 9 deletions hw/arm/boot.c
Original file line number Diff line number Diff line change
Expand Up @@ -574,15 +574,6 @@ static void arm_load_kernel_notify(Notifier *notifier, void *data)
struct arm_boot_info *info =
container_of(n, struct arm_boot_info, load_kernel_notifier);

/* CPU objects (unlike devices) are not automatically reset on system
* reset, so we must always register a handler to do so. If we're
* actually loading a kernel, the handler is also responsible for
* arranging that we start it correctly.
*/
for (cs = CPU(cpu); cs; cs = CPU_NEXT(cs)) {
qemu_register_reset(do_cpu_reset, ARM_CPU(cs));
}

/* Load the kernel. */
if (!info->kernel_filename || info->firmware_loaded) {

Expand Down Expand Up @@ -783,7 +774,18 @@ static void arm_load_kernel_notify(Notifier *notifier, void *data)

void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info *info)
{
CPUState *cs;

info->load_kernel_notifier.cpu = cpu;
info->load_kernel_notifier.notifier.notify = arm_load_kernel_notify;
qemu_add_machine_init_done_notifier(&info->load_kernel_notifier.notifier);

/* CPU objects (unlike devices) are not automatically reset on system
* reset, so we must always register a handler to do so. If we're
* actually loading a kernel, the handler is also responsible for
* arranging that we start it correctly.
*/
for (cs = CPU(cpu); cs; cs = CPU_NEXT(cs)) {
qemu_register_reset(do_cpu_reset, ARM_CPU(cs));
}
}

0 comments on commit 63a183e

Please sign in to comment.