Skip to content

Commit fc2a093

Browse files
committed
Merge branch 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6
* 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6: drm/radeon: Fix 3 regressions - since buffer rework
2 parents 9fc282b + c9ff04c commit fc2a093

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

drivers/gpu/drm/radeon/radeon_state.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
424424
if ((*cmd & RADEON_GMC_SRC_PITCH_OFFSET_CNTL) &&
425425
(*cmd & RADEON_GMC_DST_PITCH_OFFSET_CNTL)) {
426426
u32 *cmd3 = drm_buffer_pointer_to_dword(cmdbuf->buffer, 3);
427-
offset = *cmd << 10;
427+
offset = *cmd3 << 10;
428428
if (radeon_check_and_fixup_offset
429429
(dev_priv, file_priv, &offset)) {
430430
DRM_ERROR("Invalid second packet offset\n");
@@ -2895,18 +2895,20 @@ static int radeon_cp_cmdbuf(struct drm_device *dev, void *data,
28952895
return rv;
28962896
rv = drm_buffer_copy_from_user(cmdbuf->buffer, buffer,
28972897
cmdbuf->bufsz);
2898-
if (rv)
2898+
if (rv) {
2899+
drm_buffer_free(cmdbuf->buffer);
28992900
return rv;
2900-
}
2901+
}
2902+
} else
2903+
goto done;
29012904

29022905
orig_nbox = cmdbuf->nbox;
29032906

29042907
if (dev_priv->microcode_version == UCODE_R300) {
29052908
int temp;
29062909
temp = r300_do_cp_cmdbuf(dev, file_priv, cmdbuf);
29072910

2908-
if (cmdbuf->bufsz != 0)
2909-
drm_buffer_free(cmdbuf->buffer);
2911+
drm_buffer_free(cmdbuf->buffer);
29102912

29112913
return temp;
29122914
}
@@ -3012,16 +3014,15 @@ static int radeon_cp_cmdbuf(struct drm_device *dev, void *data,
30123014
}
30133015
}
30143016

3015-
if (cmdbuf->bufsz != 0)
3016-
drm_buffer_free(cmdbuf->buffer);
3017+
drm_buffer_free(cmdbuf->buffer);
30173018

3019+
done:
30183020
DRM_DEBUG("DONE\n");
30193021
COMMIT_RING();
30203022
return 0;
30213023

30223024
err:
3023-
if (cmdbuf->bufsz != 0)
3024-
drm_buffer_free(cmdbuf->buffer);
3025+
drm_buffer_free(cmdbuf->buffer);
30253026
return -EINVAL;
30263027
}
30273028

0 commit comments

Comments
 (0)