[Qemu-devel] [RFC 1/2] hw/qxl: ignore guest from guestbug until reset

2012-05-21 Thread Alon Levy
reset only by a guest QXL_IO_RESET

Signed-off-by: Alon Levy al...@redhat.com
---
 hw/qxl.c |9 -
 hw/qxl.h |2 ++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/hw/qxl.c b/hw/qxl.c
index 6c11e70..a9a7778 100644
--- a/hw/qxl.c
+++ b/hw/qxl.c
@@ -141,6 +141,7 @@ static void qxl_ring_set_dirty(PCIQXLDevice *qxl);
 void qxl_guest_bug(PCIQXLDevice *qxl, const char *msg, ...)
 {
 qxl_send_events(qxl, QXL_INTERRUPT_ERROR);
+qxl-guest_bug = 1;
 if (qxl-guestdebug) {
 va_list ap;
 va_start(ap, msg);
@@ -571,7 +572,7 @@ static int interface_get_command(QXLInstance *sin, struct 
QXLCommandExt *ext)
 case QXL_MODE_NATIVE:
 case QXL_MODE_UNDEFINED:
 ring = qxl-ram-cmd_ring;
-if (SPICE_RING_IS_EMPTY(ring)) {
+if (qxl-guest_bug || SPICE_RING_IS_EMPTY(ring)) {
 return false;
 }
 SPICE_RING_CONS_ITEM(qxl, ring, cmd);
@@ -1291,6 +1292,10 @@ static void ioport_write(void *opaque, 
target_phys_addr_t addr,
 qxl_async_io async = QXL_SYNC;
 uint32_t orig_io_port = io_port;
 
+if (d-guest_bug  !io_port == QXL_IO_RESET) {
+return;
+}
+
 switch (io_port) {
 case QXL_IO_RESET:
 case QXL_IO_SET_MODE:
@@ -1399,6 +1404,7 @@ async_common:
 }
 break;
 case QXL_IO_RESET:
+d-guest_bug = 0;
 qxl_hard_reset(d, 0);
 break;
 case QXL_IO_MEMSLOT_ADD:
@@ -1742,6 +1748,7 @@ static int qxl_init_common(PCIQXLDevice *qxl)
 qemu_mutex_init(qxl-track_lock);
 qemu_mutex_init(qxl-async_lock);
 qxl-current_async = QXL_UNDEFINED_IO;
+qxl-guest_bug = 0;
 
 switch (qxl-revision) {
 case 1: /* spice 0.4 -- qxl-1 */
diff --git a/hw/qxl.h b/hw/qxl.h
index ec0cb1a..4e14643 100644
--- a/hw/qxl.h
+++ b/hw/qxl.h
@@ -35,6 +35,8 @@ typedef struct PCIQXLDevice {
 uint32_t   cmdlog;
 uint32_t   revision;
 
+uint32_t   guest_bug;
+
 enum qxl_mode  mode;
 uint32_t   cmdflags;
 intgeneration;
-- 
1.7.10.1




Re: [Qemu-devel] [RFC 1/2] hw/qxl: ignore guest from guestbug until reset

2012-05-21 Thread Gerd Hoffmann
On 05/21/12 11:04, Alon Levy wrote:
 reset only by a guest QXL_IO_RESET

Looks sensible.  I guess you want clear guest_bug in the guest touched
vga registers code path too.

cheers,
  Gerd




Re: [Qemu-devel] [RFC 1/2] hw/qxl: ignore guest from guestbug until reset

2012-05-21 Thread Alon Levy
On Mon, May 21, 2012 at 11:12:35AM +0200, Gerd Hoffmann wrote:
 On 05/21/12 11:04, Alon Levy wrote:
  reset only by a guest QXL_IO_RESET
 
 Looks sensible.  I guess you want clear guest_bug in the guest touched
 vga registers code path too.

good point, will fix for v2.

 
 cheers,
   Gerd