On Sun, Jul 10, 2011 at 08:39:55AM +0300, Yonit Halperin wrote: > On 07/07/2011 12:43 PM, Alon Levy wrote: > >--- > > display/driver.c | 44 ++++++++++++++++++++++++++++++++++++++++++-- > > 1 files changed, 42 insertions(+), 2 deletions(-) > > > >diff --git a/display/driver.c b/display/driver.c > >index fff462d..e77e32f 100644 > >--- a/display/driver.c > >+++ b/display/driver.c > >@@ -958,13 +958,53 @@ VOID DrvDisableSurface(DHPDEV in_pdev) > > DEBUG_PRINT((pdev, 1, "%s: 0x%lx exit\n", __FUNCTION__, pdev)); > > } > > > >+static void FlushSurfaces(PDev *pdev) > >+{ > >+ UINT32 surface_id; > >+ SurfaceInfo *surface_info; > >+ SURFOBJ *surf_obj; > >+ RECTL area = {0, 0, 0, 0}; > >+ > >+ if (pdev->pci_revision< QXL_REVISION_STABLE_V10) { > >+ DEBUG_PRINT((pdev, 1, "%s: revision too old for > >QXL_IO_FLUSH_SURFACES", __FUNCTION__)); > >+ for (surface_id = pdev->n_surfaces - 1 ; surface_id> 0 ; > >--surface_id) { > >+ surface_info = GetSurfaceInfo(pdev, surface_id); > >+ if (!surface_info->draw_area.base_mem) { > >+ continue; > >+ } > >+ surf_obj = surface_info->draw_area.surf_obj; > >+ if (!surf_obj) { > >+ continue; > >+ } > >+ area.right = surf_obj->sizlBitmap.cx; > >+ area.bottom = surf_obj->sizlBitmap.cy; > >+ UpdateArea(pdev,&area, surface_id); > >+ } > >+ } else { > >+ WRITE_PORT_UCHAR(pdev->flush_surfaces_port, 0); > >+ } > >+} > >+static void FlushRelease(PDev *pdev) > >+{ > >+ if (pdev->pci_revision< QXL_REVISION_STABLE_V10) { > >+ DEBUG_PRINT((pdev, 1, "%s: revision too old for > >QXL_IO_FLUSH_RELEASE", __FUNCTION__)); > >+ // ooming a few times causes the server to flush > >+ // all releasable resources > >+ WRITE_PORT_UCHAR(pdev->notify_oom_port, 0); > >+ WRITE_PORT_UCHAR(pdev->notify_oom_port, 0); > >+ WRITE_PORT_UCHAR(pdev->notify_oom_port, 0); > Hi, > since OOM is asynchronic, you should wait to display_event (first > SPICE_RING_CONS_WAIT on the release ring and then waiting on > display_event). Also, only one OOM call sould be enough, since all > the resources were already released by the wroker, and one OOM makes > it flush the release ring.
I've dropped this "revision 2 support for FlushRelease" since to work with revision 2 I just do the old gig (which is incorrect but works). > > Cheers, > Yonit. > _______________________________________________ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel