rpms/xorg-x11-drv-ati/devel radeon-modeset.patch, 1.27, 1.28 xorg-x11-drv-ati.spec, 1.136, 1.137
Dave Airlie
airlied at fedoraproject.org
Thu Oct 30 00:11:27 UTC 2008
Author: airlied
Update of /cvs/pkgs/rpms/xorg-x11-drv-ati/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv10979
Modified Files:
radeon-modeset.patch xorg-x11-drv-ati.spec
Log Message:
- fix memory leak in -ati driver (#469024)
radeon-modeset.patch:
Index: radeon-modeset.patch
===================================================================
RCS file: /cvs/pkgs/rpms/xorg-x11-drv-ati/devel/radeon-modeset.patch,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- radeon-modeset.patch 28 Oct 2008 00:22:06 -0000 1.27
+++ radeon-modeset.patch 30 Oct 2008 00:10:56 -0000 1.28
@@ -1,3 +1,21 @@
+commit 2a85b00b38da8f5419837a9b4504aa1ba69b2a32
+Author: Dave Airlie <airlied at redhat.com>
+Date: Thu Oct 30 10:00:10 2008 +1000
+
+ radeon: fixup name handling for bufmgr
+
+commit b57a389fa222ecb832bb72b30f2602bf086db892
+Author: Dave Airlie <airlied at redhat.com>
+Date: Thu Oct 30 09:59:11 2008 +1000
+
+ radeon: fix memory leak in CS2 code
+
+commit ffde9b0fa3157e956e6bc0580f10d21f191be327
+Author: Dave Airlie <airlied at redhat.com>
+Date: Tue Oct 28 20:35:19 2008 +1000
+
+ return on empty IBs, flush happen in the kernel
+
commit 1714b8e5443da01d838e9804166b67fcb3a6ec45
Author: Dave Airlie <airlied at redhat.com>
Date: Tue Oct 28 10:16:09 2008 +1000
@@ -1694,7 +1712,7 @@
do { \
if (RADEON_VERBOSE) \
diff --git a/src/radeon_accel.c b/src/radeon_accel.c
-index a6e332d..23c17ed 100644
+index a6e332d..d7c70c5 100644
--- a/src/radeon_accel.c
+++ b/src/radeon_accel.c
@@ -311,6 +311,9 @@ void RADEONEngineRestore(ScrnInfoPtr pScrn)
@@ -1830,7 +1848,7 @@
switch (info->CurrentLayout.pixel_code) {
case 8: datatype = 2; break;
-@@ -550,6 +556,144 @@ int RADEONCPStop(ScrnInfoPtr pScrn, RADEONInfoPtr info)
+@@ -550,6 +556,148 @@ int RADEONCPStop(ScrnInfoPtr pScrn, RADEONInfoPtr info)
}
}
@@ -1866,6 +1884,9 @@
+ int ret;
+ RING_LOCALS;
+
++ if (info->cp->indirectBuffer->used == 0)
++ return;
++
+ /* always add the cache flushes to the end of the IB */
+ info->cp->indirectBuffer->total += RADEON_IB_RESERVE;
+
@@ -1875,9 +1896,6 @@
+ info->cs_used_depth = 0;
+ }
+
-+ RADEON_PURGE_CACHE();
-+ RADEON_WAIT_UNTIL_IDLE();
-+
+ chunk[0].chunk_data = (unsigned long)info->cp->ib_gem_fake.address;
+ chunk[0].length_dw = info->cp->indirectBuffer->used / sizeof(uint32_t);
+ chunk[0].chunk_id = RADEON_CHUNK_ID_IB;
@@ -1966,6 +1984,10 @@
+
+ if (!info->cp->indirectBuffer) return;
+ RADEONCSFlushIndirect(pScrn, 0);
++ xfree(info->cp->relocs.buf);
++ info->cp->relocs.buf = 0;
++ info->cp->relocs.size = 0;
++ info->cp->relocs.num_reloc = 0;
+ xfree(info->cp->ib_gem_fake.address);
+ info->cp->ib_gem_fake.address = NULL;
+ info->cp->indirectBuffer = NULL;
@@ -1975,7 +1997,7 @@
/* Get an indirect buffer for the CP 2D acceleration commands */
drmBufPtr RADEONCPGetBuffer(ScrnInfoPtr pScrn)
{
-@@ -560,6 +704,9 @@ drmBufPtr RADEONCPGetBuffer(ScrnInfoPtr pScrn)
+@@ -560,6 +708,9 @@ drmBufPtr RADEONCPGetBuffer(ScrnInfoPtr pScrn)
int size = 0;
int i = 0;
int ret;
@@ -1985,7 +2007,7 @@
#if 0
/* FIXME: pScrn->pScreen has not been initialized when this is first
-@@ -625,6 +772,11 @@ void RADEONCPFlushIndirect(ScrnInfoPtr pScrn, int discard)
+@@ -625,6 +776,11 @@ void RADEONCPFlushIndirect(ScrnInfoPtr pScrn, int discard)
if (!buffer) return;
if (start == buffer->used && !discard) return;
@@ -1997,7 +2019,7 @@
if (RADEON_VERBOSE) {
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Flushing buffer %d\n",
buffer->idx);
-@@ -659,10 +811,16 @@ void RADEONCPReleaseIndirect(ScrnInfoPtr pScrn)
+@@ -659,10 +815,16 @@ void RADEONCPReleaseIndirect(ScrnInfoPtr pScrn)
int start = info->cp->indirectStart;
drm_radeon_indirect_t indirect;
@@ -2014,7 +2036,7 @@
if (RADEON_VERBOSE) {
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Releasing buffer %d\n",
-@@ -789,6 +947,7 @@ RADEONHostDataBlit(
+@@ -789,6 +951,7 @@ RADEONHostDataBlit(
ret = ( uint8_t* )&__head[__count];
__count += dwords;
@@ -2022,7 +2044,7 @@
ADVANCE_RING();
*y += *hpass;
-@@ -926,7 +1085,7 @@ Bool RADEONAccelInit(ScreenPtr pScreen)
+@@ -926,7 +1089,7 @@ Bool RADEONAccelInit(ScreenPtr pScreen)
#ifdef USE_EXA
if (info->useEXA) {
# ifdef XF86DRI
@@ -2031,7 +2053,7 @@
if (!RADEONDrawInitCP(pScreen))
return FALSE;
} else
-@@ -947,7 +1106,7 @@ Bool RADEONAccelInit(ScreenPtr pScreen)
+@@ -947,7 +1110,7 @@ Bool RADEONAccelInit(ScreenPtr pScreen)
}
#ifdef XF86DRI
@@ -2040,7 +2062,7 @@
RADEONAccelInitCP(pScreen, a);
else
#endif /* XF86DRI */
-@@ -969,11 +1128,13 @@ void RADEONInit3DEngine(ScrnInfoPtr pScrn)
+@@ -969,11 +1132,13 @@ void RADEONInit3DEngine(ScrnInfoPtr pScrn)
RADEONInfoPtr info = RADEONPTR (pScrn);
#ifdef XF86DRI
@@ -2058,7 +2080,7 @@
RADEONInit3DEngineCP(pScrn);
} else
#endif
-@@ -981,7 +1142,7 @@ void RADEONInit3DEngine(ScrnInfoPtr pScrn)
+@@ -981,7 +1146,7 @@ void RADEONInit3DEngine(ScrnInfoPtr pScrn)
info->accel_state->XInited3D = TRUE;
}
@@ -2457,10 +2479,10 @@
+#endif
diff --git a/src/radeon_bufmgr_gem.c b/src/radeon_bufmgr_gem.c
new file mode 100644
-index 0000000..8e8cad0
+index 0000000..7a41852
--- /dev/null
+++ b/src/radeon_bufmgr_gem.c
-@@ -0,0 +1,532 @@
+@@ -0,0 +1,538 @@
+/**************************************************************************
+ *
+ * Copyright © 2007-2008 Red Hat Inc.
@@ -2585,7 +2607,7 @@
+ gem_bo->reloc_count = 0;
+ gem_bo->map_count = 0;
+ gem_bo->in_vram = 0;
-+ gem_bo->name = name;
++ gem_bo->name = strdup(name);
+ gem_bo->touched = 0;
+
+ gem_bo->next = bufmgr_gem->bo_list;
@@ -2631,6 +2653,7 @@
+ trav = trav->next;
+ }
+ }
++ free(gem_bo->name);
+ free(gem_bo);
+}
+
@@ -2717,8 +2740,11 @@
+radeon_bo_gem_create_from_handle(dri_bufmgr *bufmgr,
+ uint32_t handle, unsigned long size)
+{
++ dri_bufmgr_gem *bufmgr_gem = (dri_bufmgr_gem *)bufmgr;
+ dri_bo_gem *bo_gem;
++ char name[32];
+
++ sprintf(name, "handle:%8x", handle);
+ bo_gem = calloc(1, sizeof(*bo_gem));
+ if (!bo_gem)
+ return NULL;
@@ -2727,11 +2753,13 @@
+ bo_gem->bo.offset = 0;
+ bo_gem->bo.virtual = NULL;
+ bo_gem->bo.bufmgr = bufmgr;
-+ bo_gem->name = 0;
++ bo_gem->name = strdup(name);
+ bo_gem->refcount = 1;
+ bo_gem->pinned = 1;
+ bo_gem->gem_handle = handle;
+
++ bo_gem->next = bufmgr_gem->bo_list;
++ bufmgr_gem->bo_list = bo_gem;
+ return &bo_gem->bo;
+}
+
Index: xorg-x11-drv-ati.spec
===================================================================
RCS file: /cvs/pkgs/rpms/xorg-x11-drv-ati/devel/xorg-x11-drv-ati.spec,v
retrieving revision 1.136
retrieving revision 1.137
diff -u -r1.136 -r1.137
--- xorg-x11-drv-ati.spec 29 Oct 2008 05:59:59 -0000 1.136
+++ xorg-x11-drv-ati.spec 30 Oct 2008 00:10:56 -0000 1.137
@@ -5,7 +5,7 @@
Summary: Xorg X11 ati video driver
Name: xorg-x11-drv-ati
Version: 6.9.0
-Release: 36%{?dist}
+Release: 37%{?dist}
URL: http://www.x.org
License: MIT
Group: User Interface/X Hardware Support
@@ -80,6 +80,9 @@
%{_mandir}/man4/radeon.4*
%changelog
+* Thu Oct 30 2008 Dave Airlie <airlied at redhat.com> 6.9.0-37
+- fix memory leak in -ati driver (#469024)
+
* Wed Oct 29 2008 Dave Airlie <airlied at redhat.com> 6.9.0-36
- radeon-6.9.0-add-hd3300.patch - add missing pciid (#466706)
- radeon-6.9.0-quirk-agp.patch - from Ubuntu.
More information about the scm-commits
mailing list