Patchwork gt64xxx: fix crash in gt64120_pci_mapping()

login
register
mail settings
Submitter Avi Kivity
Date Aug. 24, 2011, 7:09 p.m.
Message ID <1314212981-30211-1-git-send-email-avi@redhat.com>
Download mbox | patch
Permalink /patch/111412/
State New
Headers show

Comments

Avi Kivity - Aug. 24, 2011, 7:09 p.m.
The map/unmap code was assymetric - unmap used the local MemoryRegion while
map used isa_mmio_init(), which cannot handle dynamic mappings.

Fix by using isa_mmio_setup() and the local MemoryRegion.

Signed-off-by: Avi Kivity <avi@redhat.com>
---

Untested.

 hw/gt64xxx.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)
Edgar Iglesias - Aug. 24, 2011, 7:17 p.m.
On Wed, Aug 24, 2011 at 10:09:41PM +0300, Avi Kivity wrote:
> The map/unmap code was assymetric - unmap used the local MemoryRegion while
> map used isa_mmio_init(), which cannot handle dynamic mappings.
> 
> Fix by using isa_mmio_setup() and the local MemoryRegion.
> 
> Signed-off-by: Avi Kivity <avi@redhat.com>

Thanks, this works for me. I'll apply it in a moment.

Cheers

Patch

diff --git a/hw/gt64xxx.c b/hw/gt64xxx.c
index 6af9782..1c34253 100644
--- a/hw/gt64xxx.c
+++ b/hw/gt64xxx.c
@@ -297,7 +297,11 @@  static void gt64120_pci_mapping(GT64120State *s)
       s->PCI0IO_start = s->regs[GT_PCI0IOLD] << 21;
       s->PCI0IO_length = ((s->regs[GT_PCI0IOHD] + 1) - (s->regs[GT_PCI0IOLD] & 0x7f)) << 21;
       isa_mem_base = s->PCI0IO_start;
-      isa_mmio_init(s->PCI0IO_start, s->PCI0IO_length);
+      if (s->PCI0IO_length) {
+          isa_mmio_setup(&s->PCI0IO_mem, s->PCI0IO_length);
+          memory_region_add_subregion(get_system_memory(), s->PCI0IO_start,
+                                      &s->PCI0IO_mem);
+      }
     }
 }