On 08/20/2010 09:54 PM, al...@redhat.com wrote:
From: Alexander Larsson<al...@redhat.com>

This is a bunch of changes I think we we need before the 0.6.0 release.

They do:

* Make SurfaceInfo global to fix potential memory corruption (#29053)
* Make malloc_sem global since it protects a the global mspace data
* always free all queued resources before allocating to keep down
   fragmentation
* Speed up surface id allocation

I additionally have some outstanding questions for the driver:

There are a lot of data that are not protected by any locks that
change during runtime. Both in the pdev (things like
e.g. FPUSave, update_surface_id and update_area) and in the DevRes
(like the caches and surfaces_used). With GDI apparently allowing
multiple concurrent calls to different surfaces this looks pretty
unsafe.


With surfaces_info global we avoid the problem with late resource
freeing accessing the wrong surface_info[id]. However, isn't there
also a possible problem where the pdev is not only inactive, but also
disabled. DrvDisablePDEV frees the pdev, which any outstanding
surface_info points to, so the late free would access a freed
pointer. Is there some way to have the surface resources ref the pdev
to make it not be disabled? Or is something else guaranteeing this
already?

In FreeDelSurface there is no problem, since you access surface_info through an active pdev. Regarding DrvDeleteDeviceBitmap: I understood from Izik, at least from his observations, that before disabling a pdev (DrvDisablePDEV), Windows calls DrvDeleteDeviceBitmap for all the previously created device bitmaps. Since all the calls to GetSurfaceId should be preformed on valid device bitmaps, I assume their pdev is still alive.

Alexander Larsson (8):
   Move SurfaceInfo structure
   Add helper functions for surface info<->  id mapping
   Move SurfaceInfo to global data
   Always release free resources when allocating
   Make malloc_sem global
   Move surface in use check to helper function
   Store surfaces_used in a bit-array
   Add simple cache to speed up surface allocation

  display/driver.c  |   40 ++++----------------
  display/qxldd.h   |   36 +++++++++---------
  display/res.c     |  103 +++++++++++++++++++++++++++++++----------------------
  display/surface.c |   10 +++---
  display/surface.h |   92 +++++++++++++++++++++++++++++++++++++++--------
  5 files changed, 168 insertions(+), 113 deletions(-)


_______________________________________________
Spice-devel mailing list
Spice-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/spice-devel

Reply via email to