xf86-video-ati: Branch 'master'
Alex Deucher
agd5f at kemper.freedesktop.org
Fri Feb 10 14:42:27 PST 2012
src/drmmode_display.c | 60 +++++++++++++++++++++++++-------------------------
1 file changed, 31 insertions(+), 29 deletions(-)
New commits:
commit 7ff277e22c629308915307bbee96eb25ff77f8b9
Author: Alex Deucher <alexdeucher at gmail.com>
Date: Fri Feb 10 13:04:59 2012 -0500
radeon: fix crash in drmmode_create_bo_pixmap()
Only init surface on r6xx+. Return NULL rather than
FALSE.
Fixes:
https://bugs.freedesktop.org/show_bug.cgi?id=45829
Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 89ac6d7..7fa89de 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -71,35 +71,37 @@ static PixmapPtr drmmode_create_bo_pixmap(ScrnInfoPtr pScrn,
exaMoveInPixmap(pixmap);
radeon_set_pixmap_bo(pixmap, bo);
- surface = radeon_get_pixmap_surface(pixmap);
- if (surface) {
- memset(surface, 0, sizeof(struct radeon_surface));
- surface->npix_x = width;
- surface->npix_y = height;
- surface->npix_z = 1;
- surface->blk_w = 1;
- surface->blk_h = 1;
- surface->blk_d = 1;
- surface->array_size = 1;
- surface->last_level = 0;
- surface->bpe = bpp / 8;
- surface->nsamples = 1;
- surface->flags = RADEON_SURF_SCANOUT;
- surface->flags |= RADEON_SURF_SET(RADEON_SURF_TYPE_2D, TYPE);
- surface->flags |= RADEON_SURF_SET(RADEON_SURF_MODE_LINEAR, MODE);
- if (tiling & RADEON_TILING_MICRO) {
- surface->flags = RADEON_SURF_CLR(surface->flags, MODE);
- surface->flags |= RADEON_SURF_SET(RADEON_SURF_MODE_1D, MODE);
- }
- if (tiling & RADEON_TILING_MACRO) {
- surface->flags = RADEON_SURF_CLR(surface->flags, MODE);
- surface->flags |= RADEON_SURF_SET(RADEON_SURF_MODE_2D, MODE);
- }
- if (radeon_surface_best(info->surf_man, surface)) {
- return FALSE;
- }
- if (radeon_surface_init(info->surf_man, surface)) {
- return FALSE;
+ if (info->ChipFamily >= CHIP_FAMILY_R600) {
+ surface = radeon_get_pixmap_surface(pixmap);
+ if (surface) {
+ memset(surface, 0, sizeof(struct radeon_surface));
+ surface->npix_x = width;
+ surface->npix_y = height;
+ surface->npix_z = 1;
+ surface->blk_w = 1;
+ surface->blk_h = 1;
+ surface->blk_d = 1;
+ surface->array_size = 1;
+ surface->last_level = 0;
+ surface->bpe = bpp / 8;
+ surface->nsamples = 1;
+ surface->flags = RADEON_SURF_SCANOUT;
+ surface->flags |= RADEON_SURF_SET(RADEON_SURF_TYPE_2D, TYPE);
+ surface->flags |= RADEON_SURF_SET(RADEON_SURF_MODE_LINEAR, MODE);
+ if (tiling & RADEON_TILING_MICRO) {
+ surface->flags = RADEON_SURF_CLR(surface->flags, MODE);
+ surface->flags |= RADEON_SURF_SET(RADEON_SURF_MODE_1D, MODE);
+ }
+ if (tiling & RADEON_TILING_MACRO) {
+ surface->flags = RADEON_SURF_CLR(surface->flags, MODE);
+ surface->flags |= RADEON_SURF_SET(RADEON_SURF_MODE_2D, MODE);
+ }
+ if (radeon_surface_best(info->surf_man, surface)) {
+ return NULL;
+ }
+ if (radeon_surface_init(info->surf_man, surface)) {
+ return NULL;
+ }
}
}
More information about the xorg-commit
mailing list