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