[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [QEMU][RFC PATCH 3/6] memory: Add xen memory hook



On 03/26/2012 12:02 PM, Avi Kivity wrote:
On 03/26/2012 01:01 PM, Stefano Stabellini wrote:
On Sun, 25 Mar 2012, Avi Kivity wrote:
On 03/23/2012 06:37 PM, Jan Kiszka wrote:
On 2012-03-23 16:08, Julien Grall wrote:
On 03/22/2012 05:44 PM, Jan Kiszka wrote:
   static void core_region_nop(MemoryListener *listener,
diff --git a/ioport.c b/ioport.c
index 78a3b89..073ed75 100644
--- a/ioport.c
+++ b/ioport.c
@@ -28,6 +28,7 @@
   #include "ioport.h"
   #include "trace.h"
   #include "memory.h"
+#include "hw/xen.h"

   /***********************************************************/
   /* IO Port */
@@ -155,6 +156,11 @@ int register_ioport_read(pio_addr_t start, int
length, int size,
                        i);
           ioport_opaque[i] = opaque;
       }
+
+    if (xen_enabled()) {
+        xen_map_iorange(start, length, 0);
+    }
+
       return 0;
   }

@@ -175,7 +181,13 @@ int register_ioport_write(pio_addr_t start, int
length, int size,
                        i);
           ioport_opaque[i] = opaque;
       }
+
+    if (xen_enabled()) {
+        xen_map_iorange(start, length, 0);
+    }
+
       return 0;
+
   }

   static uint32_t ioport_readb_thunk(void *opaque, uint32_t addr)
@@ -260,6 +272,11 @@ void isa_unassign_ioport(pio_addr_t start, int
length)
           ioport_destructor_table[start](ioport_opaque[start]);
           ioport_destructor_table[start] = NULL;
       }
+
+    if (xen_enabled()) {
+        xen_unmap_iorange(start, length, 0);
+    }
+
       for(i = start; i<   start + length; i++) {
           ioport_read_table[0][i] = NULL;
           ioport_read_table[1][i] = NULL;

memory_listener_register(xen_hooks, system_io)?

QEMU doesn't seem to call region_add/region_del for ioport.
Moreover, some of ioport are directly register without
using memory hook (for example cirrus vga).

What is the best way to do it ?
I haven't looked at details. Maybe it is just a combination of "use case
not yet considered, but can easily be added" and "need to switch legacy
code to new scheme". Then this still remains the better option than this
hook. Avi?
Just the second - region_add/del will be called, but only for ioports
registered via the MemoryRegion APIs.
It looks like there are quite a few register_ioport_read/write left
around, especially in the following files:

hw/acpi_piix4.c
hw/cirrus_vga.c
hw/serial.c
hw/pckbd.c
hw/pc.c

I guess they should all be converted to memory_region_init_io, right?
Right
I will modify theses files and send a different patch series.

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.