diff --git a/radeon-modeset.patch b/radeon-modeset.patch index 6babf3e..ece1a7c 100644 --- a/radeon-modeset.patch +++ b/radeon-modeset.patch @@ -1,3 +1,21 @@ +commit 2a85b00b38da8f5419837a9b4504aa1ba69b2a32 +Author: Dave Airlie +Date: Thu Oct 30 10:00:10 2008 +1000 + + radeon: fixup name handling for bufmgr + +commit b57a389fa222ecb832bb72b30f2602bf086db892 +Author: Dave Airlie +Date: Thu Oct 30 09:59:11 2008 +1000 + + radeon: fix memory leak in CS2 code + +commit ffde9b0fa3157e956e6bc0580f10d21f191be327 +Author: Dave Airlie +Date: Tue Oct 28 20:35:19 2008 +1000 + + return on empty IBs, flush happen in the kernel + commit 1714b8e5443da01d838e9804166b67fcb3a6ec45 Author: Dave Airlie Date: Tue Oct 28 10:16:09 2008 +1000 @@ -1694,7 +1712,7 @@ index f7ae1a8..a437b55 100644 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 @@ index a6e332d..23c17ed 100644 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 @@ index a6e332d..23c17ed 100644 + 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 @@ index a6e332d..23c17ed 100644 + 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 @@ index a6e332d..23c17ed 100644 + + 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 @@ index a6e332d..23c17ed 100644 /* 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 @@ index a6e332d..23c17ed 100644 #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 @@ index a6e332d..23c17ed 100644 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 @@ index a6e332d..23c17ed 100644 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 @@ index a6e332d..23c17ed 100644 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 @@ index a6e332d..23c17ed 100644 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 @@ index a6e332d..23c17ed 100644 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 @@ index a6e332d..23c17ed 100644 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 @@ index 0000000..0d79b58 +#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 @@ index 0000000..8e8cad0 + 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 @@ index 0000000..8e8cad0 + trav = trav->next; + } + } ++ free(gem_bo->name); + free(gem_bo); +} + @@ -2717,8 +2740,11 @@ index 0000000..8e8cad0 +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 @@ index 0000000..8e8cad0 + 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; +} + diff --git a/xorg-x11-drv-ati.spec b/xorg-x11-drv-ati.spec index b2a39f8..67c74b0 100644 --- a/xorg-x11-drv-ati.spec +++ b/xorg-x11-drv-ati.spec @@ -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 @@ rm -rf $RPM_BUILD_ROOT %{_mandir}/man4/radeon.4* %changelog +* Thu Oct 30 2008 Dave Airlie 6.9.0-37 +- fix memory leak in -ati driver (#469024) + * Wed Oct 29 2008 Dave Airlie 6.9.0-36 - radeon-6.9.0-add-hd3300.patch - add missing pciid (#466706) - radeon-6.9.0-quirk-agp.patch - from Ubuntu.