xf86-video-intel: 2 commits - src/drmmode_display.c src/intel_driver.c src/intel.h

Chris Wilson ickle at kemper.freedesktop.org
Fri Jul 9 06:13:52 PDT 2010


 src/drmmode_display.c |   20 ++++++++++++++++++--
 src/intel.h           |    3 +++
 src/intel_driver.c    |    2 ++
 3 files changed, 23 insertions(+), 2 deletions(-)

New commits:
commit 5ce3f536b7169a1ee9eadf830e61bab230dd7239
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Jul 9 14:06:43 2010 +0100

    drmmode: Destroy the output on shutdown
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 906cd71..37463ff 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -1194,6 +1194,7 @@ static const char *output_names[] = { "None",
 static void
 drmmode_output_init(ScrnInfoPtr scrn, drmmode_ptr drmmode, int num)
 {
+	intel_screen_private *intel = intel_get_screen_private(scrn);
 	xf86OutputPtr output;
 	drmModeConnectorPtr koutput;
 	drmModeEncoderPtr kencoder;
@@ -1256,7 +1257,8 @@ drmmode_output_init(ScrnInfoPtr scrn, drmmode_ptr drmmode, int num)
 
 	output->possible_crtcs = kencoder->possible_crtcs;
 	output->possible_clones = kencoder->possible_clones;
-	return;
+
+	intel->output = output;
 }
 
 static Bool
@@ -1494,6 +1496,11 @@ drmmode_close_screen(intel_screen_private *intel)
 		xf86CrtcDestroy(intel->crtc);
 		intel->crtc = NULL;
 	}
+
+	if (intel->output) {
+		xf86OutputDestroy(intel->output);
+		intel->output = NULL;
+	}
 }
 
 int
diff --git a/src/intel.h b/src/intel.h
index bd24708..5342dca 100644
--- a/src/intel.h
+++ b/src/intel.h
@@ -278,6 +278,7 @@ typedef struct intel_screen_private {
 	long FbMapSize;
 	long GTTMapSize;
 
+	xf86OutputPtr output;
 	xf86CrtcPtr crtc;
 	drm_intel_bo *front_buffer;
 
commit 6ff369cd2602497ee11273b50f76d1a7bf25991d
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Jul 9 14:00:31 2010 +0100

    drmmode: Destroy Crtc on screen shutdown
    
    Should fix:
    
      Bug 26946 - CRTC cursor BO leak in 2D
      https://bugs.freedesktop.org/show_bug.cgi?id=26946
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 40643b0..906cd71 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -643,7 +643,7 @@ drmmode_crtc_init(ScrnInfoPtr scrn, drmmode_ptr drmmode, int num)
 						  GTT_PAGE_SIZE);
 	drm_intel_bo_disable_reuse(drmmode_crtc->cursor);
 
-	return;
+	intel->crtc = crtc;
 }
 
 static xf86OutputStatus
@@ -1487,6 +1487,15 @@ Bool drmmode_pre_init(ScrnInfoPtr scrn, int fd, int cpp)
 	return TRUE;
 }
 
+void
+drmmode_close_screen(intel_screen_private *intel)
+{
+	if (intel->crtc) {
+		xf86CrtcDestroy(intel->crtc);
+		intel->crtc = NULL;
+	}
+}
+
 int
 drmmode_get_pipe_from_crtc_id(drm_intel_bufmgr *bufmgr, xf86CrtcPtr crtc)
 {
diff --git a/src/intel.h b/src/intel.h
index bdd89e5..bd24708 100644
--- a/src/intel.h
+++ b/src/intel.h
@@ -278,6 +278,7 @@ typedef struct intel_screen_private {
 	long FbMapSize;
 	long GTTMapSize;
 
+	xf86CrtcPtr crtc;
 	drm_intel_bo *front_buffer;
 
 	dri_bufmgr *bufmgr;
@@ -436,6 +437,7 @@ enum {
 };
 
 extern Bool drmmode_pre_init(ScrnInfoPtr pScrn, int fd, int cpp);
+extern void drmmode_close_screen(intel_screen_private *intel);
 extern int drmmode_get_pipe_from_crtc_id(drm_intel_bufmgr *bufmgr, xf86CrtcPtr crtc);
 extern int drmmode_output_dpms_status(xf86OutputPtr output);
 extern Bool drmmode_do_pageflip(ScreenPtr screen, dri_bo *new_front, void *data);
diff --git a/src/intel_driver.c b/src/intel_driver.c
index a69f7c1..2ced844 100644
--- a/src/intel_driver.c
+++ b/src/intel_driver.c
@@ -1139,6 +1139,8 @@ static Bool I830CloseScreen(int scrnIndex, ScreenPtr screen)
 	screen->CloseScreen = intel->CloseScreen;
 	(*screen->CloseScreen) (scrnIndex, screen);
 
+	drmmode_close_screen(intel);
+
 	if (intel->directRenderingOpen
 	    && intel->directRenderingType == DRI_DRI2) {
 		intel->directRenderingOpen = FALSE;


More information about the xorg-commit mailing list