Re: [Qemu-devel] [PATCH v2] qxl: async I/O

2011-07-08 Thread Alon Levy
On Fri, Jul 08, 2011 at 09:17:50AM +0200, Gerd Hoffmann wrote: > >+void qxl_spice_update_area_async(PCIQXLDevice *qxl, uint32_t surface_id, > >+ struct QXLRect *area, struct QXLRect > >*dirty_rects, > >+ uint32_t num_dirty_rects, uint32_t > >cle

Re: [Qemu-devel] [PATCH v2] qxl: async I/O

2011-07-08 Thread Alon Levy
On Fri, Jul 08, 2011 at 09:17:50AM +0200, Gerd Hoffmann wrote: > >+void qxl_spice_update_area_async(PCIQXLDevice *qxl, uint32_t surface_id, > >+ struct QXLRect *area, struct QXLRect > >*dirty_rects, > >+ uint32_t num_dirty_rects, uint32_t > >cle

Re: [Qemu-devel] [PATCH v2] qxl: async I/O

2011-07-08 Thread Gerd Hoffmann
btw, I'm looking at "#if.*MINOR" code like #if SPICE_INTERFACE_CORE_MINOR>= 3 (ui/spice-core.c) Shouldn't that be checking the MAJOR as well? major changing means a incompatible change. I doubt we ever will do that. But if you feel better checking that it probably should just be a #if

Re: [Qemu-devel] [PATCH v2] qxl: async I/O

2011-07-08 Thread Gerd Hoffmann
The above two lines change was a mistake. What about: qxl_spice_update_area_async(...) { #ifdef .. if (async) { qxl->ssd.worker->update_area_async(...) } else { qxl_spice_update_area(...) } #else qxl_spice_update_area(...) #endif } I would do if (async) { #if ... worker->fo

Re: [Qemu-devel] [PATCH v2] qxl: async I/O

2011-07-08 Thread Gerd Hoffmann
+void qxl_spice_update_area_async(PCIQXLDevice *qxl, uint32_t surface_id, + struct QXLRect *area, struct QXLRect *dirty_rects, + uint32_t num_dirty_rects, uint32_t clear_dirty_region, + int async) +{ +if (async) { +

[Qemu-devel] [PATCH v2] qxl: async I/O

2011-07-07 Thread Alon Levy
Some of the QXL port i/o commands are waiting for the spice server to complete certain actions. Add async versions for these commands, so we don't block the vcpu while the spice server processses the command. Instead the qxl device will raise an IRQ when done. The async command processing relies