xf86-video-intel: 3 commits - src/sna/kgem.c src/sna/sna_display.c src/sna/sna_dri.c src/sna/sna_driver.c src/sna/sna_render.c

Chris Wilson ickle at kemper.freedesktop.org
Thu Aug 25 06:51:00 PDT 2011


 src/sna/kgem.c        |    2 --
 src/sna/sna_display.c |    5 +++++
 src/sna/sna_dri.c     |   19 +++++++++++++++++--
 src/sna/sna_driver.c  |   10 +++++-----
 src/sna/sna_render.c  |    2 ++
 5 files changed, 29 insertions(+), 9 deletions(-)

New commits:
commit bd98001a49be061f0f2cb008b515f5505c8a63a4
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Aug 25 14:49:30 2011 +0100

    sna: Clear structures across server reset
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index afd2a09..061ca74 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -310,9 +310,7 @@ void kgem_init(struct kgem *kgem, int fd, struct pci_device *dev, int gen)
 	struct drm_i915_gem_get_aperture aperture;
 	int i;
 
-	/* We presume we are partt of a zeroed structure
 	memset(kgem, 0, sizeof(*kgem));
-	*/
 
 	kgem->fd = fd;
 	kgem->gen = gen;
diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c
index 6274a3f..107659b 100644
--- a/src/sna/sna_driver.c
+++ b/src/sna/sna_driver.c
@@ -745,11 +745,7 @@ static Bool sna_close_screen(int scrnIndex, ScreenPtr screen)
 	xf86_cursors_fini(screen);
 
 	/* XXX unhook devPrivate otherwise fbCloseScreen frees it! */
-	if (sna->front) {
-		screen->DestroyPixmap(sna->front);
-		sna->front = NULL;
-		screen->devPrivate = NULL;
-	}
+	screen->devPrivate = NULL;
 
 	screen->CloseScreen = sna->CloseScreen;
 	(*screen->CloseScreen) (scrnIndex, screen);
@@ -760,6 +756,10 @@ static Bool sna_close_screen(int scrnIndex, ScreenPtr screen)
 	}
 
 	sna_mode_remove_fb(sna);
+	if (sna->front) {
+		screen->DestroyPixmap(sna->front);
+		sna->front = NULL;
+	}
 	xf86GARTCloseScreen(scrnIndex);
 
 	scrn->vtSema = FALSE;
diff --git a/src/sna/sna_render.c b/src/sna/sna_render.c
index 41e7694..4a38f39 100644
--- a/src/sna/sna_render.c
+++ b/src/sna/sna_render.c
@@ -200,6 +200,8 @@ void no_render_init(struct sna *sna)
 {
 	struct sna_render *render = &sna->render;
 
+	memset (render,0, sizeof (*render));
+
 	render->composite = no_render_composite;
 
 	render->copy_boxes = no_render_copy_boxes;
commit 0865acb3ad03239ffdf8cbf3c9fc204b6c97121b
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Aug 25 12:47:27 2011 +0100

    sna/dri2: Add some debug around the use of the Resource database
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_dri.c b/src/sna/sna_dri.c
index 9b0ce20..0a01f8a 100644
--- a/src/sna/sna_dri.c
+++ b/src/sna/sna_dri.c
@@ -567,6 +567,9 @@ get_resource(XID id, RESTYPE type)
 		return NULL;
 	}
 
+	DBG(("%s(%ld): new(%ld)=%p\n", __FUNCTION__,
+	     (long)id, (long)type, resource));
+
 	list_init(resource);
 	return resource;
 }
@@ -576,7 +579,7 @@ sna_dri_frame_event_client_gone(void *data, XID id)
 {
 	struct list *resource = data;
 
-	DBG(("%s(%ld)\n", __FUNCTION__, (long)id));
+	DBG(("%s(%ld): %p\n", __FUNCTION__, (long)id, data));
 
 	while (!list_is_empty(resource)) {
 		struct sna_dri_frame_event *info =
@@ -584,6 +587,9 @@ sna_dri_frame_event_client_gone(void *data, XID id)
 					 struct sna_dri_frame_event,
 					 client_resource);
 
+		DBG(("%s: marking client gone [%p]: %p\n",
+		     __FUNCTION__, info, info->client));
+
 		list_del(&info->client_resource);
 		info->client = NULL;
 	}
@@ -597,7 +603,7 @@ sna_dri_frame_event_drawable_gone(void *data, XID id)
 {
 	struct list *resource = data;
 
-	DBG(("%s(%ld)\n", __FUNCTION__, (long)id));
+	DBG(("%s(%ld): resource=%p\n", __FUNCTION__, (long)id, resource));
 
 	while (!list_is_empty(resource)) {
 		struct sna_dri_frame_event *info =
@@ -605,6 +611,9 @@ sna_dri_frame_event_drawable_gone(void *data, XID id)
 					 struct sna_dri_frame_event,
 					 drawable_resource);
 
+		DBG(("%s: marking drawable gone [%p]: %ld\n",
+		     __FUNCTION__, info, info->drawable_id));
+
 		list_del(&info->drawable_resource);
 		info->drawable_id = None;
 	}
@@ -668,12 +677,18 @@ sna_dri_add_frame_event(struct sna_dri_frame_event *info)
 
 	list_add(&info->drawable_resource, resource);
 
+	DBG(("%s: add[%p] (%p, %ld)\n", __FUNCTION__,
+	     info, info->client, info->drawable_id));
+
 	return TRUE;
 }
 
 static void
 sna_dri_frame_event_info_free(struct sna_dri_frame_event *info)
 {
+	DBG(("%s: del[%p] (%p, %ld)\n", __FUNCTION__,
+	     info, info->client, info->drawable_id));
+
 	list_del(&info->client_resource);
 	list_del(&info->drawable_resource);
 
commit 98b67457caea583de50bff1b11a3c5a2bd694e26
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Aug 25 12:45:43 2011 +0100

    sna/display: Destroy shadow data
    
    Under certain circumstances the shadow can be destroy after being
    allocated but before being created. The pixmap is a NULL pointer at that
    time, but we know that its value should be data, so just use the data
    pointer instead.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 0809eba..5aee104 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -764,6 +764,11 @@ sna_crtc_shadow_destroy(xf86CrtcPtr crtc, PixmapPtr pixmap, void *data)
 	struct sna *sna = to_sna(crtc->scrn);
 	struct sna_crtc *sna_crtc = crtc->driver_private;
 
+	/* We may have not called shadow_create() on the data yet and
+	 * be cleaning up a NULL shadow_pixmap.
+	 */
+	pixmap = data;
+
 	DBG(("%s(fb=%d, handle=%d)\n", __FUNCTION__,
 	     sna_crtc->shadow_fb_id, sna_pixmap_get_bo(pixmap)->handle));
 


More information about the xorg-commit mailing list