mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Introduce reset notifier order
Add the parameter 'order' to qemu_register_reset and sort callbacks on registration. On system reset, callbacks with lower order will be invoked before those with higher order. Update all existing users to the standard order 0. Note: At least for x86, the existing users seem to assume that handlers are called in their registration order. Therefore, the patch preserves this property. If someone feels bored, (s)he could try to identify this dependency and express it properly on callback registration. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
committed by
Anthony Liguori
parent
93102fd601
commit
8217606e6e
@@ -1369,7 +1369,7 @@ int ac97_init (PCIBus *bus)
|
||||
pci_register_io_region (&d->dev, 0, 256 * 4, PCI_ADDRESS_SPACE_IO, ac97_map);
|
||||
pci_register_io_region (&d->dev, 1, 64 * 4, PCI_ADDRESS_SPACE_IO, ac97_map);
|
||||
register_savevm ("ac97", 0, 2, ac97_save, ac97_load, s);
|
||||
qemu_register_reset (ac97_on_reset, s);
|
||||
qemu_register_reset (ac97_on_reset, 0, s);
|
||||
AUD_register_card ("ac97", &s->card);
|
||||
ac97_on_reset (s);
|
||||
return 0;
|
||||
|
||||
@@ -550,7 +550,7 @@ i2c_bus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base,
|
||||
|
||||
s->smbus = i2c_init_bus();
|
||||
s->irq = sci_irq;
|
||||
qemu_register_reset(piix4_reset, s);
|
||||
qemu_register_reset(piix4_reset, 0, s);
|
||||
|
||||
return s->smbus;
|
||||
}
|
||||
|
||||
@@ -122,7 +122,7 @@ ADBDevice *adb_register_device(ADBBusState *s, int devaddr,
|
||||
d->devreq = devreq;
|
||||
d->devreset = devreset;
|
||||
d->opaque = opaque;
|
||||
qemu_register_reset((QEMUResetHandler *)devreset, d);
|
||||
qemu_register_reset((QEMUResetHandler *)devreset, 0, d);
|
||||
d->devreset(d);
|
||||
return d;
|
||||
}
|
||||
|
||||
@@ -924,7 +924,7 @@ int apic_init(CPUState *env)
|
||||
s->timer = qemu_new_timer(vm_clock, apic_timer, s);
|
||||
|
||||
register_savevm("apic", s->id, 2, apic_save, apic_load, s);
|
||||
qemu_register_reset(apic_reset, s);
|
||||
qemu_register_reset(apic_reset, 0, s);
|
||||
|
||||
local_apics[s->id] = s;
|
||||
return 0;
|
||||
|
||||
+1
-1
@@ -203,7 +203,7 @@ void arm_load_kernel(CPUState *env, struct arm_boot_info *info)
|
||||
if (info->nb_cpus == 0)
|
||||
info->nb_cpus = 1;
|
||||
env->boot_info = info;
|
||||
qemu_register_reset(main_cpu_reset, env);
|
||||
qemu_register_reset(main_cpu_reset, 0, env);
|
||||
}
|
||||
|
||||
/* Assume that raw images are linux kernels, and ELF images are not. */
|
||||
|
||||
+1
-1
@@ -271,7 +271,7 @@ void axisdev88_init (ram_addr_t ram_size,
|
||||
cpu_model = "crisv32";
|
||||
}
|
||||
env = cpu_init(cpu_model);
|
||||
qemu_register_reset(main_cpu_reset, env);
|
||||
qemu_register_reset(main_cpu_reset, 0, env);
|
||||
|
||||
/* allocate RAM */
|
||||
phys_ram = qemu_ram_alloc(ram_size);
|
||||
|
||||
+1
-1
@@ -3228,7 +3228,7 @@ static void cirrus_init_common(CirrusVGAState * s, int device_id, int is_pci)
|
||||
s->vga.cursor_invalidate = cirrus_cursor_invalidate;
|
||||
s->vga.cursor_draw_line = cirrus_cursor_draw_line;
|
||||
|
||||
qemu_register_reset(cirrus_reset, s);
|
||||
qemu_register_reset(cirrus_reset, 0, s);
|
||||
cirrus_reset(s);
|
||||
register_savevm("cirrus_vga", 0, 2, cirrus_vga_save, cirrus_vga_load, s);
|
||||
}
|
||||
|
||||
+1
-1
@@ -175,6 +175,6 @@ void cs_init(target_phys_addr_t base, int irq, void *intctl)
|
||||
cs_io_memory = cpu_register_io_memory(0, cs_mem_read, cs_mem_write, s);
|
||||
cpu_register_physical_memory(base, CS_SIZE, cs_io_memory);
|
||||
register_savevm("cs4231", base, 1, cs_save, cs_load, s);
|
||||
qemu_register_reset(cs_reset, s);
|
||||
qemu_register_reset(cs_reset, 0, s);
|
||||
cs_reset(s);
|
||||
}
|
||||
|
||||
+1
-1
@@ -656,7 +656,7 @@ int cs4231a_init (qemu_irq *pic)
|
||||
DMA_register_channel (s->dma, cs_dma_read, s);
|
||||
|
||||
register_savevm ("cs4231a", 0, 1, cs_save, cs_load, s);
|
||||
qemu_register_reset (cs_reset, s);
|
||||
qemu_register_reset (cs_reset, 0, s);
|
||||
cs_reset (s);
|
||||
|
||||
AUD_register_card ("cs4231a", &s->card);
|
||||
|
||||
@@ -762,6 +762,6 @@ void cuda_init (int *cuda_mem_index, qemu_irq irq)
|
||||
s->adb_poll_timer = qemu_new_timer(vm_clock, cuda_adb_poll, s);
|
||||
*cuda_mem_index = cpu_register_io_memory(0, cuda_read, cuda_write, s);
|
||||
register_savevm("cuda", -1, 1, cuda_save, cuda_load, s);
|
||||
qemu_register_reset(cuda_reset, s);
|
||||
qemu_register_reset(cuda_reset, 0, s);
|
||||
cuda_reset(s);
|
||||
}
|
||||
|
||||
@@ -493,7 +493,7 @@ static void dma_init2(struct dma_cont *d, int base, int dshift,
|
||||
register_ioport_read (base + ((i + 8) << dshift), 1, 1,
|
||||
read_cont, d);
|
||||
}
|
||||
qemu_register_reset(dma_reset, d);
|
||||
qemu_register_reset(dma_reset, 0, d);
|
||||
dma_reset(d);
|
||||
for (i = 0; i < ARRAY_SIZE (d->regs); ++i) {
|
||||
d->regs[i].transfer_handler = dma_phony_handler;
|
||||
|
||||
+1
-1
@@ -892,7 +892,7 @@ void dp83932_init(NICInfo *nd, target_phys_addr_t base, int it_shift,
|
||||
nic_receive, nic_can_receive, nic_cleanup, s);
|
||||
|
||||
qemu_format_nic_info_str(s->vc, nd->macaddr);
|
||||
qemu_register_reset(nic_reset, s);
|
||||
qemu_register_reset(nic_reset, 0, s);
|
||||
nic_reset(s);
|
||||
|
||||
s->mmio_index = cpu_register_io_memory(0, dp8393x_read, dp8393x_write, s);
|
||||
|
||||
+1
-1
@@ -334,7 +334,7 @@ void * ecc_init(target_phys_addr_t base, qemu_irq irq, uint32_t version)
|
||||
ecc_io_memory);
|
||||
}
|
||||
register_savevm("ECC", base, 3, ecc_save, ecc_load, s);
|
||||
qemu_register_reset(ecc_reset, s);
|
||||
qemu_register_reset(ecc_reset, 0, s);
|
||||
ecc_reset(s);
|
||||
return s;
|
||||
}
|
||||
|
||||
+1
-1
@@ -1771,7 +1771,7 @@ static void nic_init(PCIDevice *pci_dev, uint32_t device)
|
||||
|
||||
qemu_format_nic_info_str(s->vc, s->macaddr);
|
||||
|
||||
qemu_register_reset(nic_reset, s);
|
||||
qemu_register_reset(nic_reset, 0, s);
|
||||
|
||||
register_savevm(s->vc->model, -1, 3, nic_save, nic_load, s);
|
||||
}
|
||||
|
||||
+1
-1
@@ -1055,7 +1055,7 @@ int es1370_init (PCIBus *bus)
|
||||
|
||||
pci_register_io_region (&d->dev, 0, 256, PCI_ADDRESS_SPACE_IO, es1370_map);
|
||||
register_savevm ("es1370", 0, 2, es1370_save, es1370_load, s);
|
||||
qemu_register_reset (es1370_on_reset, s);
|
||||
qemu_register_reset (es1370_on_reset, 0, s);
|
||||
|
||||
AUD_register_card ("es1370", &s->card);
|
||||
es1370_reset (s);
|
||||
|
||||
@@ -758,7 +758,7 @@ int escc_init(target_phys_addr_t base, qemu_irq irqA, qemu_irq irqB,
|
||||
register_savevm("escc", base, 2, escc_save, escc_load, s);
|
||||
else
|
||||
register_savevm("escc", -1, 2, escc_save, escc_load, s);
|
||||
qemu_register_reset(escc_reset, s);
|
||||
qemu_register_reset(escc_reset, 0, s);
|
||||
escc_reset(s);
|
||||
return escc_io_memory;
|
||||
}
|
||||
@@ -932,6 +932,6 @@ void slavio_serial_ms_kbd_init(target_phys_addr_t base, qemu_irq irq,
|
||||
"QEMU Sun Mouse");
|
||||
qemu_add_kbd_event_handler(sunkbd_event, &s->chn[1]);
|
||||
register_savevm("slavio_serial_mouse", base, 2, escc_save, escc_load, s);
|
||||
qemu_register_reset(escc_reset, s);
|
||||
qemu_register_reset(escc_reset, 0, s);
|
||||
escc_reset(s);
|
||||
}
|
||||
|
||||
@@ -682,7 +682,7 @@ static void esp_init1(SysBusDevice *dev)
|
||||
esp_reset(s);
|
||||
|
||||
register_savevm("esp", -1, 3, esp_save, esp_load, s);
|
||||
qemu_register_reset(esp_reset, s);
|
||||
qemu_register_reset(esp_reset, 0, s);
|
||||
|
||||
qdev_init_irq_sink(&dev->qdev, parent_esp_reset, 1);
|
||||
|
||||
|
||||
+1
-1
@@ -64,7 +64,7 @@ void bareetraxfs_init (ram_addr_t ram_size,
|
||||
cpu_model = "crisv32";
|
||||
}
|
||||
env = cpu_init(cpu_model);
|
||||
qemu_register_reset(main_cpu_reset, env);
|
||||
qemu_register_reset(main_cpu_reset, 0, env);
|
||||
|
||||
/* allocate RAM */
|
||||
phys_ram = qemu_ram_alloc(ram_size);
|
||||
|
||||
+1
-1
@@ -327,7 +327,7 @@ static void etraxfs_timer_init(SysBusDevice *dev)
|
||||
timer_regs = cpu_register_io_memory(0, timer_read, timer_write, t);
|
||||
sysbus_init_mmio(dev, 0x5c, timer_regs);
|
||||
|
||||
qemu_register_reset(etraxfs_timer_reset, t);
|
||||
qemu_register_reset(etraxfs_timer_reset, 0, t);
|
||||
}
|
||||
|
||||
static void etraxfs_timer_register(void)
|
||||
|
||||
@@ -1883,7 +1883,7 @@ static fdctrl_t *fdctrl_init_common (qemu_irq irq, int dma_chann,
|
||||
}
|
||||
fdctrl_external_reset(fdctrl);
|
||||
register_savevm("fdc", io_base, 2, fdc_save, fdc_load, fdctrl);
|
||||
qemu_register_reset(fdctrl_external_reset, fdctrl);
|
||||
qemu_register_reset(fdctrl_external_reset, 0, fdctrl);
|
||||
for (i = 0; i < MAX_FD; i++) {
|
||||
fd_revalidate(&fdctrl->drives[i]);
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user