[Spice-devel] [PATCH qxl-win v3] display: add FlushRelease and FlushSurfaces for alternative V06 (2) revision implementation
Alon Levy
alevy at redhat.com
Sun Jul 10 00:12:16 PDT 2011
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.
>
More information about the Spice-devel
mailing list