[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