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