|
Lines 125-130
static void qxl_reset_memslots(PCIQXLDevice *d);
Link Here
|
| 125 |
static void qxl_reset_surfaces(PCIQXLDevice *d); |
125 |
static void qxl_reset_surfaces(PCIQXLDevice *d); |
| 126 |
static void qxl_ring_set_dirty(PCIQXLDevice *qxl); |
126 |
static void qxl_ring_set_dirty(PCIQXLDevice *qxl); |
| 127 |
|
127 |
|
|
|
128 |
/* qemu-kvm locking ... */ |
| 129 |
void qxl_unlock_iothread(SimpleSpiceDisplay *ssd) |
| 130 |
{ |
| 131 |
if (cpu_single_env) { |
| 132 |
assert(ssd->env == NULL); |
| 133 |
ssd->env = cpu_single_env; |
| 134 |
cpu_single_env = NULL; |
| 135 |
} |
| 136 |
qemu_mutex_unlock_iothread(); |
| 137 |
} |
| 138 |
|
| 139 |
void qxl_lock_iothread(SimpleSpiceDisplay *ssd) |
| 140 |
{ |
| 141 |
qemu_mutex_lock_iothread(); |
| 142 |
if (ssd->env) { |
| 143 |
assert(cpu_single_env == NULL); |
| 144 |
cpu_single_env = ssd->env; |
| 145 |
ssd->env = NULL; |
| 146 |
} |
| 147 |
} |
| 148 |
|
| 128 |
static inline uint32_t msb_mask(uint32_t val) |
149 |
static inline uint32_t msb_mask(uint32_t val) |
| 129 |
{ |
150 |
{ |
| 130 |
uint32_t mask; |
151 |
uint32_t mask; |
|
Lines 662-671
static void qxl_hard_reset(PCIQXLDevice *d, int loadvm)
Link Here
|
| 662 |
dprint(d, 1, "%s: start%s\n", __FUNCTION__, |
683 |
dprint(d, 1, "%s: start%s\n", __FUNCTION__, |
| 663 |
loadvm ? " (loadvm)" : ""); |
684 |
loadvm ? " (loadvm)" : ""); |
| 664 |
|
685 |
|
| 665 |
qemu_mutex_unlock_iothread(); |
686 |
qxl_unlock_iothread(&d->ssd); |
| 666 |
d->ssd.worker->reset_cursor(d->ssd.worker); |
687 |
d->ssd.worker->reset_cursor(d->ssd.worker); |
| 667 |
d->ssd.worker->reset_image_cache(d->ssd.worker); |
688 |
d->ssd.worker->reset_image_cache(d->ssd.worker); |
| 668 |
qemu_mutex_lock_iothread(); |
689 |
qxl_lock_iothread(&d->ssd); |
| 669 |
qxl_reset_surfaces(d); |
690 |
qxl_reset_surfaces(d); |
| 670 |
qxl_reset_memslots(d); |
691 |
qxl_reset_memslots(d); |
| 671 |
|
692 |
|
|
Lines 795-803
static void qxl_reset_surfaces(PCIQXLDevice *d)
Link Here
|
| 795 |
{ |
816 |
{ |
| 796 |
dprint(d, 1, "%s:\n", __FUNCTION__); |
817 |
dprint(d, 1, "%s:\n", __FUNCTION__); |
| 797 |
d->mode = QXL_MODE_UNDEFINED; |
818 |
d->mode = QXL_MODE_UNDEFINED; |
| 798 |
qemu_mutex_unlock_iothread(); |
819 |
qxl_unlock_iothread(&d->ssd); |
| 799 |
d->ssd.worker->destroy_surfaces(d->ssd.worker); |
820 |
d->ssd.worker->destroy_surfaces(d->ssd.worker); |
| 800 |
qemu_mutex_lock_iothread(); |
821 |
qxl_lock_iothread(&d->ssd); |
| 801 |
memset(&d->guest_surfaces.cmds, 0, sizeof(d->guest_surfaces.cmds)); |
822 |
memset(&d->guest_surfaces.cmds, 0, sizeof(d->guest_surfaces.cmds)); |
| 802 |
} |
823 |
} |
| 803 |
|
824 |
|
|
Lines 866-874
static void qxl_destroy_primary(PCIQXLDevice *d)
Link Here
|
| 866 |
dprint(d, 1, "%s\n", __FUNCTION__); |
887 |
dprint(d, 1, "%s\n", __FUNCTION__); |
| 867 |
|
888 |
|
| 868 |
d->mode = QXL_MODE_UNDEFINED; |
889 |
d->mode = QXL_MODE_UNDEFINED; |
| 869 |
qemu_mutex_unlock_iothread(); |
890 |
qxl_unlock_iothread(&d->ssd); |
| 870 |
d->ssd.worker->destroy_primary_surface(d->ssd.worker, 0); |
891 |
d->ssd.worker->destroy_primary_surface(d->ssd.worker, 0); |
| 871 |
qemu_mutex_lock_iothread(); |
892 |
qxl_lock_iothread(&d->ssd); |
| 872 |
} |
893 |
} |
| 873 |
|
894 |
|
| 874 |
static void qxl_set_mode(PCIQXLDevice *d, int modenr, int loadvm) |
895 |
static void qxl_set_mode(PCIQXLDevice *d, int modenr, int loadvm) |
|
Lines 938-947
static void ioport_write(void *opaque, uint32_t addr, uint32_t val)
Link Here
|
| 938 |
case QXL_IO_UPDATE_AREA: |
959 |
case QXL_IO_UPDATE_AREA: |
| 939 |
{ |
960 |
{ |
| 940 |
QXLRect update = d->ram->update_area; |
961 |
QXLRect update = d->ram->update_area; |
| 941 |
qemu_mutex_unlock_iothread(); |
962 |
qxl_unlock_iothread(&d->ssd); |
| 942 |
d->ssd.worker->update_area(d->ssd.worker, d->ram->update_surface, |
963 |
d->ssd.worker->update_area(d->ssd.worker, d->ram->update_surface, |
| 943 |
&update, NULL, 0, 0); |
964 |
&update, NULL, 0, 0); |
| 944 |
qemu_mutex_lock_iothread(); |
965 |
qxl_lock_iothread(&d->ssd); |
| 945 |
break; |
966 |
break; |
| 946 |
} |
967 |
} |
| 947 |
case QXL_IO_NOTIFY_CMD: |
968 |
case QXL_IO_NOTIFY_CMD: |