rpms/xorg-x11-drv-ati/F-10 radeon-modeset.patch, 1.33, 1.34 xorg-x11-drv-ati.spec, 1.145, 1.146 radeon-modeset-gtt-map.patch, 1.1, NONE

Dave Airlie airlied at fedoraproject.org
Fri Nov 14 06:08:22 UTC 2008


Author: airlied

Update of /cvs/pkgs/rpms/xorg-x11-drv-ati/F-10
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv10877

Modified Files:
	radeon-modeset.patch xorg-x11-drv-ati.spec 
Removed Files:
	radeon-modeset-gtt-map.patch 
Log Message:
* Fri Nov 14 2008 Dave Airlie <airlied at redhat.com> 6.9.0-46
- fix rebooting on low memory cards.


radeon-modeset.patch:

Index: radeon-modeset.patch
===================================================================
RCS file: /cvs/pkgs/rpms/xorg-x11-drv-ati/F-10/radeon-modeset.patch,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- radeon-modeset.patch	10 Nov 2008 05:06:38 -0000	1.33
+++ radeon-modeset.patch	14 Nov 2008 06:07:52 -0000	1.34
@@ -1,3 +1,33 @@
+commit 912a135fa66d50174ed925676ebcbaeae7bd8556
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Fri Nov 14 15:56:16 2008 +1000
+
+    radeon: make space accounting a lot smarter
+
+commit 1163200d644744bbfc72c205f47bf00a92446c68
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Fri Nov 14 15:55:12 2008 +1000
+
+    radeon: retry on CS2 EAGAIN
+
+commit 9f16d36104d242385e2a14916a66cdc95fca96ca
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Fri Nov 14 15:20:59 2008 +1000
+
+    radeon: add src/mask/dest to fallbacks
+
+commit 38b1f12d268f5a3213380e3b4fbd730d17ba073c
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Fri Nov 14 15:20:37 2008 +1000
+
+    radeon_memory: align all allocations
+
+commit 40804bd0927833048fd92ec7a1332f10f9d6a850
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Fri Nov 14 11:03:34 2008 +1000
+
+    radeon: force gtt for mmap after fallbacks
+
 commit a9bd6835e8f41a1ceb2a62bd1c4a8f92051cb620
 Author: Dave Airlie <airlied at redhat.com>
 Date:   Mon Nov 10 14:18:17 2008 +1000
@@ -1871,7 +1901,7 @@
  do {									\
      if (RADEON_VERBOSE)							\
 diff --git a/src/radeon_accel.c b/src/radeon_accel.c
-index a6e332d..d7c70c5 100644
+index a6e332d..d40da24 100644
 --- a/src/radeon_accel.c
 +++ b/src/radeon_accel.c
 @@ -311,6 +311,9 @@ void RADEONEngineRestore(ScrnInfoPtr pScrn)
@@ -2007,7 +2037,7 @@
  
      switch (info->CurrentLayout.pixel_code) {
      case 8:  datatype = 2; break;
-@@ -550,6 +556,148 @@ int RADEONCPStop(ScrnInfoPtr pScrn, RADEONInfoPtr info)
+@@ -550,6 +556,153 @@ int RADEONCPStop(ScrnInfoPtr pScrn, RADEONInfoPtr info)
      }
  }
  
@@ -2040,6 +2070,7 @@
 +    struct drm_radeon_cs2 args;
 +    struct drm_radeon_cs_chunk chunk[2];
 +    uint64_t chunk_array[2];
++    int retry = 0;
 +    int ret;
 +    RING_LOCALS;
 +
@@ -2069,12 +2100,16 @@
 +    args.num_chunks = 2;
 +    args.chunks = (uint64_t)(unsigned long)chunk_array;
 +
-+    ret = drmCommandWriteRead(info->dri->drmFD, DRM_RADEON_CS2,
-+			      &args, sizeof(args));
-+
++    do {
++	ret = drmCommandWriteRead(info->dri->drmFD, DRM_RADEON_CS2,
++				  &args, sizeof(args));
++	if (ret)
++	    ErrorF("DRM Command submission failure %d\n", ret);
++	retry++;
++    } while (ret == -EAGAIN && retry < 1000);
 +    if (ret) {
-+      FatalError("DRM Command submission failure %d\n", ret);
-+      return;
++	FatalError("DRM Command submission failure %d\n", ret);
++	return;
 +    }
 +
 +
@@ -2156,7 +2191,7 @@
  /* Get an indirect buffer for the CP 2D acceleration commands  */
  drmBufPtr RADEONCPGetBuffer(ScrnInfoPtr pScrn)
  {
-@@ -560,6 +708,9 @@ drmBufPtr RADEONCPGetBuffer(ScrnInfoPtr pScrn)
+@@ -560,6 +713,9 @@ drmBufPtr RADEONCPGetBuffer(ScrnInfoPtr pScrn)
      int            size = 0;
      int            i = 0;
      int            ret;
@@ -2166,7 +2201,7 @@
  
  #if 0
      /* FIXME: pScrn->pScreen has not been initialized when this is first
-@@ -625,6 +776,11 @@ void RADEONCPFlushIndirect(ScrnInfoPtr pScrn, int discard)
+@@ -625,6 +781,11 @@ void RADEONCPFlushIndirect(ScrnInfoPtr pScrn, int discard)
      if (!buffer) return;
      if (start == buffer->used && !discard) return;
  
@@ -2178,7 +2213,7 @@
      if (RADEON_VERBOSE) {
  	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Flushing buffer %d\n",
  		   buffer->idx);
-@@ -659,10 +815,16 @@ void RADEONCPReleaseIndirect(ScrnInfoPtr pScrn)
+@@ -659,10 +820,16 @@ void RADEONCPReleaseIndirect(ScrnInfoPtr pScrn)
      int                start  = info->cp->indirectStart;
      drm_radeon_indirect_t  indirect;
  
@@ -2195,7 +2230,7 @@
  
      if (RADEON_VERBOSE) {
  	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Releasing buffer %d\n",
-@@ -789,6 +951,7 @@ RADEONHostDataBlit(
+@@ -789,6 +956,7 @@ RADEONHostDataBlit(
      ret = ( uint8_t* )&__head[__count];
  
      __count += dwords;
@@ -2203,7 +2238,7 @@
      ADVANCE_RING();
  
      *y += *hpass;
-@@ -926,7 +1089,7 @@ Bool RADEONAccelInit(ScreenPtr pScreen)
+@@ -926,7 +1094,7 @@ Bool RADEONAccelInit(ScreenPtr pScreen)
  #ifdef USE_EXA
      if (info->useEXA) {
  # ifdef XF86DRI
@@ -2212,7 +2247,7 @@
  	    if (!RADEONDrawInitCP(pScreen))
  		return FALSE;
  	} else
-@@ -947,7 +1110,7 @@ Bool RADEONAccelInit(ScreenPtr pScreen)
+@@ -947,7 +1115,7 @@ Bool RADEONAccelInit(ScreenPtr pScreen)
  	}
  
  #ifdef XF86DRI
@@ -2221,7 +2256,7 @@
  	    RADEONAccelInitCP(pScreen, a);
  	else
  #endif /* XF86DRI */
-@@ -969,11 +1132,13 @@ void RADEONInit3DEngine(ScrnInfoPtr pScrn)
+@@ -969,11 +1137,13 @@ void RADEONInit3DEngine(ScrnInfoPtr pScrn)
      RADEONInfoPtr info = RADEONPTR (pScrn);
  
  #ifdef XF86DRI
@@ -2239,7 +2274,7 @@
  	RADEONInit3DEngineCP(pScrn);
      } else
  #endif
-@@ -981,7 +1146,7 @@ void RADEONInit3DEngine(ScrnInfoPtr pScrn)
+@@ -981,7 +1151,7 @@ void RADEONInit3DEngine(ScrnInfoPtr pScrn)
  
      info->accel_state->XInited3D = TRUE;
  }
@@ -2281,10 +2316,10 @@
 +#endif
 diff --git a/src/radeon_bufmgr_gem.c b/src/radeon_bufmgr_gem.c
 new file mode 100644
-index 0000000..a8bc465
+index 0000000..92fbaa8
 --- /dev/null
 +++ b/src/radeon_bufmgr_gem.c
-@@ -0,0 +1,547 @@
+@@ -0,0 +1,600 @@
 +/**************************************************************************
 + *
 + * Copyright © 2007-2008 Red Hat Inc.
@@ -2359,10 +2394,10 @@
 +	const char *name;
 +	struct _dri_bo_gem *next;
 +	int in_vram; /* have we migrated this bo to VRAM ever */
++	int force_gtt;
 +	int pinned;
 +	int touched;
-+	int space_accounted;
-+
++	uint32_t space_accounted;
 +} dri_bo_gem;
 +
 +typedef struct _dri_bufmgr_gem {
@@ -2525,15 +2560,27 @@
 +{
 +	dri_bufmgr_gem *bufmgr_gem = (dri_bufmgr_gem *)buf->bufmgr;
 +	struct drm_radeon_gem_wait_rendering args;
++	struct drm_radeon_gem_set_domain sd_args;
 +	dri_bo_gem *gem_bo = (dri_bo_gem *)buf;
 +	int ret;
 +
-+	args.handle = gem_bo->gem_handle;
++	/* do a set domain */
++	if (gem_bo->force_gtt) {
++		sd_args.handle = gem_bo->gem_handle;
++		sd_args.read_domains = RADEON_GEM_DOMAIN_GTT;
++		sd_args.write_domain = 0;
 +
-+	do {
-+	ret = drmCommandWriteRead(bufmgr_gem->fd, DRM_RADEON_GEM_WAIT_RENDERING,
-+				  &args, sizeof(args));
-+	} while (ret == -EAGAIN);
++		ret = drmCommandWriteRead(bufmgr_gem->fd, DRM_RADEON_GEM_SET_DOMAIN,
++					  &sd_args, sizeof(sd_args));
++
++	} else {
++		args.handle = gem_bo->gem_handle;
++
++		do {
++		ret = drmCommandWriteRead(bufmgr_gem->fd, DRM_RADEON_GEM_WAIT_RENDERING,
++					  &args, sizeof(args));
++		} while (ret == -EAGAIN);
++	}
 +	return;
 +}
 +
@@ -2613,6 +2660,9 @@
 +		}
 +	}
 +
++	if (gem_bo->force_gtt && (read_domains & RADEON_GEM_DOMAIN_VRAM))
++		read_domains = RADEON_GEM_DOMAIN_GTT;
++
 +	if (have_reloc != -1) {
 +		uint32_t old_write, old_read;
 +
@@ -2712,32 +2762,63 @@
 +{
 +	dri_bufmgr_gem *bufmgr_gem = (dri_bufmgr_gem *)buf->bufmgr;
 + 	dri_bo_gem *gem_bo = (dri_bo_gem *)buf;
++	int old_accounted = 0;
 +
 +	if (gem_bo->pinned)
 +		return 0;
 +
-+	if (gem_bo->space_accounted == 1)
++	if (write_domain && (write_domain == gem_bo->space_accounted))
 +		return 0;
 +
-+	if (write_domain == RADEON_GEM_DOMAIN_VRAM) {
-+		bufmgr_gem->vram_write_used += buf->size;
++	if (read_domains && ((read_domains << 16) == gem_bo->space_accounted))
++		return 0;
++
++	old_accounted = gem_bo->space_accounted;
++
++	if (gem_bo->space_accounted == 0) {
++		gem_bo->space_accounted = (read_domains << 16) | write_domain;
++		if (write_domain == RADEON_GEM_DOMAIN_VRAM) {
++			bufmgr_gem->vram_write_used += buf->size;
++		} else {
++			bufmgr_gem->read_used += buf->size;
++		}
 +	} else {
-+		bufmgr_gem->read_used += buf->size;
-+	}
++		uint16_t old_read, old_write;
++
++		old_read = gem_bo->space_accounted >> 16;
++		old_write = gem_bo->space_accounted & 0xffff;
 +
++		if (write_domain && (old_read & write_domain)) {
++			gem_bo->space_accounted = write_domain;
++			/* moving from read to a write domain */
++			if (write_domain == RADEON_GEM_DOMAIN_VRAM) {
++				bufmgr_gem->read_used -= buf->size;
++				bufmgr_gem->vram_write_used += buf->size;
++			}
++		} else if (read_domains & old_write) {
++			gem_bo->space_accounted &= 0xffff;
++		} else {
++			/* rewrite the domains */
++			if (write_domain != old_write)
++				ErrorF("WRITE DOMAIN RELOC FAILURE 0x%x %d %d\n", gem_bo->gem_handle, write_domain, old_write);
++			if (read_domains != old_read)
++				ErrorF("READ DOMAIN RELOC FAILURE 0x%x %d %d\n", gem_bo->gem_handle, read_domains, old_read);
++		}
++	}
++	
 +	if (bufmgr_gem->vram_write_used > bufmgr_gem->vram_limit) {
 +		bufmgr_gem->vram_write_used = 0;
 +		bufmgr_gem->read_used = 0;
++		gem_bo->space_accounted = old_accounted;
 +		return -1;
 +	}
 +
 +	if (bufmgr_gem->read_used > bufmgr_gem->gart_limit) {
 +		bufmgr_gem->vram_write_used = 0;
 +		bufmgr_gem->read_used = 0;
++		gem_bo->space_accounted = old_accounted;
 +		return -1;
-+	    }
-+	    
-+	gem_bo->space_accounted = 1;
++	}
 +
 +	return 0;
 +}
@@ -2832,12 +2913,19 @@
 +	    bufmgr_gem->gart_limit = limit;
 +
 +}
++
++void radeon_bufmgr_gem_force_gtt(dri_bo *buf)
++{
++	dri_bo_gem *gem_bo = (dri_bo_gem *)buf;
++
++	gem_bo->force_gtt = 1;
++}
 diff --git a/src/radeon_bufmgr_gem.h b/src/radeon_bufmgr_gem.h
 new file mode 100644
-index 0000000..c40a24e
+index 0000000..b13a642
 --- /dev/null
 +++ b/src/radeon_bufmgr_gem.h
-@@ -0,0 +1,15 @@
+@@ -0,0 +1,18 @@
 +#ifndef RADEON_BUFMGR_GEM_H
 +#define RADEON_BUFMGR_GEM_H
 +
@@ -2851,7 +2939,10 @@
 +void radeon_bufmgr_unpin(dri_bo *buf);
 +uint32_t radeon_bufmgr_get_handle(dri_bo *buf);
 +int radeon_bufmgr_gem_has_references(dri_bo *buf);
++int radeon_bufmgr_gem_force_gtt(dri_bo *buf);
 +void radeon_bufmgr_gem_set_limit(dri_bufmgr *bufmgr, uint32_t domain, uint32_t limit);
++
++
 +#endif
 diff --git a/src/radeon_commonfuncs.c b/src/radeon_commonfuncs.c
 index dba197e..10d146e 100644
@@ -6231,7 +6322,7 @@
  }
  #endif
 diff --git a/src/radeon_exa_funcs.c b/src/radeon_exa_funcs.c
-index 62224d0..fe104c4 100644
+index 62224d0..17b90dc 100644
 --- a/src/radeon_exa_funcs.c
 +++ b/src/radeon_exa_funcs.c
 @@ -74,21 +74,71 @@ FUNC_NAME(RADEONSync)(ScreenPtr pScreen, int marker)
@@ -6325,7 +6416,7 @@
 +	    RADEONCPFlushIndirect(pScrn, 1);
 +	    retry_count++;
 +	    if (retry_count == 2)
-+	        RADEON_FALLBACK(("Not enough Video RAM\n"));
++	        RADEON_FALLBACK(("Not enough Video RAM for dst\n"));
 +	    goto retry;
 +	}
 +    }
@@ -6461,7 +6552,7 @@
 +		RADEONCPFlushIndirect(pScrn, 1);
 +		retry_count++;
 +		if (retry_count == 2)
-+		    RADEON_FALLBACK(("Not enough Video RAM\n"));
++		    RADEON_FALLBACK(("Not enough Video RAM for src\n"));
 +		goto retry;
 +	    }
 +	    info->state_2d.src_bo = driver_priv->bo;
@@ -6473,7 +6564,7 @@
 +		    RADEONCPFlushIndirect(pScrn, 1);
 +		    retry_count++;
 +		    if (retry_count == 2)
-+		        RADEON_FALLBACK(("Not enough Video RAM\n"));
++		        RADEON_FALLBACK(("Not enough Video RAM for dst\n"));
 +		    goto retry;
 +		}
 +		info->state_2d.dst_bo = driver_priv->bo;
@@ -6795,7 +6886,7 @@
      xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Setting EXA maxPitchBytes\n");
  
 diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c
-index 97199ae..c19ca0b 100644
+index 97199ae..0de7666 100644
 --- a/src/radeon_exa_render.c
 +++ b/src/radeon_exa_render.c
 @@ -355,12 +355,14 @@ static Bool FUNC_NAME(R100TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
@@ -7029,7 +7120,37 @@
  
      OUT_ACCEL_REG(R200_SE_VTX_FMT_0, R200_VTX_XY);
      if (pMask)
-@@ -999,15 +1065,19 @@ static Bool FUNC_NAME(R300TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
+@@ -941,6 +1007,10 @@ static Bool R300CheckCompositeTexture(PicturePtr pPict,
+ 				      int unit,
+ 				      Bool is_r500)
+ {
++    ScreenPtr pScreen = pDstPict->pDrawable->pScreen;
++    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
++    RADEONInfoPtr info = RADEONPTR(pScrn);
++
+     int w = pPict->pDrawable->width;
+     int h = pPict->pDrawable->height;
+     int i;
+@@ -966,8 +1036,17 @@ static Bool R300CheckCompositeTexture(PicturePtr pPict,
+ 	RADEON_FALLBACK(("Unsupported picture format 0x%x\n",
+ 			 (int)pPict->format));
+ 
+-    if (!RADEONCheckTexturePOT(pPict, unit == 0))
++    if (!RADEONCheckTexturePOT(pPict, unit == 0)) {
++	if (info->new_cs) {
++    		struct radeon_exa_pixmap_priv *driver_priv;
++		PixmapPtr pPix;
++
++    		pPix = RADEONGetDrawablePixmap(pPict->pDrawable);
++		driver_priv = exaGetPixmapDriverPrivate(pPix);
++		radeon_bufmgr_gem_force_gtt(driver_priv->bo);
++	}
+ 	return FALSE;
++    }
+ 
+     if (pPict->filter != PictFilterNearest &&
+ 	pPict->filter != PictFilterBilinear)
+@@ -999,15 +1078,19 @@ static Bool FUNC_NAME(R300TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
      int w = pPict->pDrawable->width;
      int h = pPict->pDrawable->height;
      int i, pixel_shift;
@@ -7052,7 +7173,7 @@
      if ((txpitch & 0x1f) != 0)
  	RADEON_FALLBACK(("Bad texture pitch 0x%x\n", (int)txpitch));
  
-@@ -1068,13 +1138,26 @@ static Bool FUNC_NAME(R300TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
+@@ -1068,13 +1151,26 @@ static Bool FUNC_NAME(R300TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
  	RADEON_FALLBACK(("Bad filter 0x%x\n", pPict->filter));
      }
  
@@ -7081,7 +7202,7 @@
      if (!pPict->repeat)
  	OUT_ACCEL_REG(R300_TX_BORDER_COLOR_0 + (unit * 4), 0);
      FINISH_ACCEL();
-@@ -1173,6 +1256,7 @@ static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
+@@ -1173,6 +1269,7 @@ static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
      return TRUE;
  
  }
@@ -7089,7 +7210,7 @@
  #endif /* ONLY_ONCE */
  
  static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
-@@ -1184,10 +1268,52 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
+@@ -1184,10 +1281,52 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
      uint32_t txenable, colorpitch;
      uint32_t blendcntl;
      int pixel_shift;
@@ -7108,7 +7229,7 @@
 +	    RADEONCPFlushIndirect(pScrn, 1);
 +	    retry_count++;
 +	    if (retry_count == 2)
-+	        RADEON_FALLBACK(("Not enough Video RAM\n"));
++	        RADEON_FALLBACK(("Not enough Video RAM for src\n"));
 +	    goto retry;
 +	}
 +
@@ -7119,7 +7240,7 @@
 +		RADEONCPFlushIndirect(pScrn, 1);
 +		retry_count++;
 +		if (retry_count == 2)
-+		    RADEON_FALLBACK(("Not enough Video RAM\n"));
++		    RADEON_FALLBACK(("Not enough Video RAM for mask\n"));
 +		goto retry;
 +	    }
 +	}
@@ -7131,7 +7252,7 @@
 +		RADEONCPFlushIndirect(pScrn, 1);
 +		retry_count++;
 +		if (retry_count == 2)
-+		    RADEON_FALLBACK(("Not enough Video RAM\n"));
++		    RADEON_FALLBACK(("Not enough Video RAM for dst\n"));
 +		goto retry;
 +	    }
 +	}
@@ -7142,7 +7263,7 @@
      if (!info->accel_state->XInited3D)
  	RADEONInit3DEngine(pScrn);
  
-@@ -1201,7 +1327,7 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
+@@ -1201,7 +1340,7 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
  
      pixel_shift = pDst->drawable.bitsPerPixel >> 4;
  
@@ -7151,7 +7272,7 @@
      dst_pitch = exaGetPixmapPitch(pDst);
      colorpitch = dst_pitch >> pixel_shift;
  
-@@ -1210,7 +1336,7 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
+@@ -1210,7 +1349,7 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
  
      colorpitch |= dst_format;
  
@@ -7160,7 +7281,7 @@
  	RADEON_FALLBACK(("Bad destination offset 0x%x\n", (int)dst_offset));
      if (((dst_pitch >> pixel_shift) & 0x7) != 0)
  	RADEON_FALLBACK(("Bad destination pitch 0x%x\n", (int)dst_pitch));
-@@ -1829,9 +1955,18 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
+@@ -1829,9 +1968,18 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
  	FINISH_ACCEL();
      }
  
@@ -7219,10 +7340,10 @@
  	ExaOffscreenArea *area = mem_struct;
 diff --git a/src/radeon_memory.c b/src/radeon_memory.c
 new file mode 100644
-index 0000000..273b8f9
+index 0000000..c613ade
 --- /dev/null
 +++ b/src/radeon_memory.c
-@@ -0,0 +1,410 @@
+@@ -0,0 +1,415 @@
 +
 +#include <errno.h>
 +#include <sys/ioctl.h>
@@ -7488,7 +7609,7 @@
 +    int stride = pScrn->displayWidth * cpp;
 +    int total_size_bytes = 0, remain_size_bytes;
 +    int fb_size_bytes;
-+
++    int pagesize = 4096;
 +    
 +    screen_size = RADEON_ALIGN(pScrn->virtualY, 16) * stride;
 +
@@ -7498,6 +7619,7 @@
 +	int cursor_size = 64 * 4 * 64;
 +	int c;
 +
++    	cursor_size = RADEON_ALIGN(cursor_size, pagesize);
 +	for (c = 0; c < xf86_config->num_crtc; c++) {
 +	    /* cursor objects */
 +	    info->mm.cursor[c] = radeon_allocate_memory(pScrn, RADEON_POOL_VRAM, cursor_size, 0, 1, "Cursor", 1);
@@ -7522,6 +7644,7 @@
 +	}
 +    }
 +
++    screen_size = RADEON_ALIGN(screen_size, pagesize);
 +    /* keep area front front buffer - but don't allocate it yet */
 +    total_size_bytes += screen_size;
 +
@@ -7538,6 +7661,7 @@
 +	{
 +	    int depthCpp = (info->dri->depthBits - 8) / 4;
 +	    int depth_size = RADEON_ALIGN(pScrn->virtualY, 16) * info->dri->depthPitch * depthCpp;
++    	    depth_size = RADEON_ALIGN(depth_size, pagesize);
 +	    info->mm.depth_buffer = radeon_allocate_memory(pScrn, RADEON_POOL_VRAM, depth_size, 0, 1, "Depth Buffer", 1);
 +	    if (!info->mm.depth_buffer) {
 +		return FALSE;
@@ -7555,6 +7679,8 @@
 +    else
 +    	info->dri->textureSize = remain_size_bytes / 2;
 +
++    info->dri->textureSize = RADEON_ALIGN(info->dri->textureSize, pagesize);
++
 +    remain_size_bytes -= info->dri->textureSize;
 +
 +    ErrorF("texture size is %dK, exa is %dK\n", info->dri->textureSize / 1024, remain_size_bytes/1024);


Index: xorg-x11-drv-ati.spec
===================================================================
RCS file: /cvs/pkgs/rpms/xorg-x11-drv-ati/F-10/xorg-x11-drv-ati.spec,v
retrieving revision 1.145
retrieving revision 1.146
diff -u -r1.145 -r1.146
--- xorg-x11-drv-ati.spec	14 Nov 2008 04:59:59 -0000	1.145
+++ xorg-x11-drv-ati.spec	14 Nov 2008 06:07:52 -0000	1.146
@@ -5,7 +5,7 @@
 Summary:   Xorg X11 ati video driver
 Name:      xorg-x11-drv-ati
 Version:   6.9.0
-Release:   45%{?dist}
+Release:   46%{?dist}
 URL:       http://www.x.org
 License:   MIT
 Group:     User Interface/X Hardware Support
@@ -22,7 +22,6 @@
 Patch7:	    radeon-6.9.0-add-hd3300.patch
 Patch8:     radeon-6.9.0-quirk-agp.patch
 Patch9:	    radeon-6.9.0-dig1-hdmi.patch
-Patch10:    radeon-modeset-gtt-map.patch
 
 ExcludeArch: s390 s390x
 
@@ -52,7 +51,6 @@
 %patch7 -p1 -b .pciid
 %patch8 -p1 -b .quirk
 %patch9 -p1 -b .hdmi
-%patch10 -p1 -b .gtt
 
 %build
 autoreconf
@@ -84,6 +82,9 @@
 %{_mandir}/man4/radeon.4*
 
 %changelog
+* Fri Nov 14 2008 Dave Airlie <airlied at redhat.com> 6.9.0-46
+- fix rebooting on low memory cards.
+
 * Fri Nov 14 2008 Dave Airlie <airlied at redhat.com> 6.9.0-45
 - try and speed up fallback cases a bit
 


--- radeon-modeset-gtt-map.patch DELETED ---




More information about the fedora-extras-commits mailing list