[Spice-devel] [RfC PATCH 4/7] move qemu_spice_add_memslot call out of qxl_add_memslot

Gerd Hoffmann kraxel at redhat.com
Wed Jun 22 01:46:03 PDT 2011


---
 hw/qxl.c |   40 ++++++++++++++++++++++++----------------
 1 files changed, 24 insertions(+), 16 deletions(-)

diff --git a/hw/qxl.c b/hw/qxl.c
index 39a4542..538f51e 100644
--- a/hw/qxl.c
+++ b/hw/qxl.c
@@ -704,7 +704,8 @@ static void qxl_vga_ioport_write(void *opaque, uint32_t addr, uint32_t val)
     vga_ioport_write(opaque, addr, val);
 }
 
-static void qxl_add_memslot(PCIQXLDevice *d, uint32_t slot_id, uint64_t delta)
+static void qxl_add_memslot(PCIQXLDevice *d, uint32_t slot_id, uint64_t delta,
+                            QXLDevMemSlot *memslot)
 {
     static const int regions[] = {
         QXL_RAM_RANGE_INDEX,
@@ -716,7 +717,6 @@ static void qxl_add_memslot(PCIQXLDevice *d, uint32_t slot_id, uint64_t delta)
     pcibus_t pci_start;
     pcibus_t pci_end;
     intptr_t virt_start;
-    QXLDevMemSlot memslot;
     int i;
 
     guest_start = le64_to_cpu(d->guest_slots[slot_id].slot.mem_start);
@@ -762,21 +762,20 @@ static void qxl_add_memslot(PCIQXLDevice *d, uint32_t slot_id, uint64_t delta)
         abort();
     }
 
-    memslot.slot_id = slot_id;
-    memslot.slot_group_id = MEMSLOT_GROUP_GUEST; /* guest group */
-    memslot.virt_start = virt_start + (guest_start - pci_start);
-    memslot.virt_end   = virt_start + (guest_end   - pci_start);
-    memslot.addr_delta = memslot.virt_start - delta;
-    memslot.generation = d->rom->slot_generation = 0;
+    memslot->slot_id = slot_id;
+    memslot->slot_group_id = MEMSLOT_GROUP_GUEST; /* guest group */
+    memslot->virt_start = virt_start + (guest_start - pci_start);
+    memslot->virt_end   = virt_start + (guest_end   - pci_start);
+    memslot->addr_delta = memslot->virt_start - delta;
+    memslot->generation = d->rom->slot_generation = 0;
     qxl_rom_set_dirty(d);
 
     dprint(d, 1, "%s: slot %d: host virt 0x%" PRIx64 " - 0x%" PRIx64 "\n",
-           __FUNCTION__, memslot.slot_id,
-           memslot.virt_start, memslot.virt_end);
+           __FUNCTION__, memslot->slot_id,
+           memslot->virt_start, memslot->virt_end);
 
-    qemu_spice_add_memslot(&d->ssd, &memslot);
-    d->guest_slots[slot_id].ptr = (void*)memslot.virt_start;
-    d->guest_slots[slot_id].size = memslot.virt_end - memslot.virt_start;
+    d->guest_slots[slot_id].ptr = (void*)memslot->virt_start;
+    d->guest_slots[slot_id].size = memslot->virt_end - memslot->virt_start;
     d->guest_slots[slot_id].delta = delta;
     d->guest_slots[slot_id].active = 1;
 }
@@ -881,6 +880,7 @@ static void qxl_set_mode(PCIQXLDevice *d, int modenr, int loadvm)
         .mem_start = start,
         .mem_end = end
     };
+    QXLDevMemSlot memslot;
     QXLSurfaceCreate surface = {
         .width      = mode->x_res,
         .height     = mode->y_res,
@@ -898,7 +898,8 @@ static void qxl_set_mode(PCIQXLDevice *d, int modenr, int loadvm)
     }
 
     d->guest_slots[0].slot = slot;
-    qxl_add_memslot(d, 0, devmem);
+    qxl_add_memslot(d, 0, devmem, &memslot);
+    qemu_spice_add_memslot(&d->ssd, &memslot);
 
     d->guest_primary.surface = surface;
     qxl_create_guest_primary(d, 0);
@@ -977,11 +978,16 @@ static void ioport_write(void *opaque, uint32_t addr, uint32_t val)
         qxl_hard_reset(d, 0);
         break;
     case QXL_IO_MEMSLOT_ADD:
+    {
+        QXLDevMemSlot memslot;
+
         PANIC_ON(val >= NUM_MEMSLOTS);
         PANIC_ON(d->guest_slots[val].active);
         d->guest_slots[val].slot = d->ram->mem_slot;
-        qxl_add_memslot(d, val, 0);
+        qxl_add_memslot(d, val, 0, &memslot);
+        qemu_spice_add_memslot(&d->ssd, &memslot);
         break;
+    }
     case QXL_IO_MEMSLOT_DEL:
         qxl_del_memslot(d, val);
         break;
@@ -1360,6 +1366,7 @@ static int qxl_post_load(void *opaque, int version)
     PCIQXLDevice* d = opaque;
     uint8_t *ram_start = d->vga.vram_ptr;
     QXLCommandExt *cmds;
+    QXLDevMemSlot memslot;
     int in, out, i, newmode;
 
     dprint(d, 1, "%s: start\n", __FUNCTION__);
@@ -1387,7 +1394,8 @@ static int qxl_post_load(void *opaque, int version)
             if (!d->guest_slots[i].active) {
                 continue;
             }
-            qxl_add_memslot(d, i, 0);
+            qxl_add_memslot(d, i, 0, &memslot);
+            qemu_spice_add_memslot(&d->ssd, &memslot);
         }
         qxl_create_guest_primary(d, 1);
 
-- 
1.7.1



More information about the Spice-devel mailing list