On 2012-08-22 14:27, Julien Grall wrote: > This patch replaces all register_ioport* with the new memory API. It permits > to use the new Memory stuff like listener. > > Signed-off-by: Julien Grall <julien.gr...@citrix.com> > --- > hw/acpi_piix4.c | 160 ++++++++++++++++++++++++++++++++++++++++++------------ > 1 files changed, 124 insertions(+), 36 deletions(-) >
... > @@ -198,8 +212,10 @@ static void pm_io_space_update(PIIX4PMState *s) > > /* XXX: need to improve memory and ioport allocation */ > PIIX4_DPRINTF("PM: mapping to 0x%x\n", pm_io_base); > - iorange_init(&s->ioport, &pm_iorange_ops, pm_io_base, 64); > - ioport_register(&s->ioport); > + > + memory_region_init_io(&s->pm_io, &pm_io_ops, s, "piix4-pm", 64); > + memory_region_add_subregion(pci_address_space_io(&s->dev), > + pm_io_base, &s->pm_io); This was broken before, but now I'm worried a guest can even crash qemu by updating an existing mapping. So you will have to - initialize pm_io only once - track the active address - remove a registered region before registering a new one Didn't look at the spec, but I bet that (config[0x80] & 1) == 0 means disable this mapping. Should be fixed as well if that is true. Jan -- Siemens AG, Corporate Technology, CT RTC ITP SDP-DE Corporate Competence Center Embedded Linux