@@ -424,7 +424,7 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
424
424
if ((* cmd & RADEON_GMC_SRC_PITCH_OFFSET_CNTL ) &&
425
425
(* cmd & RADEON_GMC_DST_PITCH_OFFSET_CNTL )) {
426
426
u32 * cmd3 = drm_buffer_pointer_to_dword (cmdbuf -> buffer , 3 );
427
- offset = * cmd << 10 ;
427
+ offset = * cmd3 << 10 ;
428
428
if (radeon_check_and_fixup_offset
429
429
(dev_priv , file_priv , & offset )) {
430
430
DRM_ERROR ("Invalid second packet offset\n" );
@@ -2895,18 +2895,20 @@ static int radeon_cp_cmdbuf(struct drm_device *dev, void *data,
2895
2895
return rv ;
2896
2896
rv = drm_buffer_copy_from_user (cmdbuf -> buffer , buffer ,
2897
2897
cmdbuf -> bufsz );
2898
- if (rv )
2898
+ if (rv ) {
2899
+ drm_buffer_free (cmdbuf -> buffer );
2899
2900
return rv ;
2900
- }
2901
+ }
2902
+ } else
2903
+ goto done ;
2901
2904
2902
2905
orig_nbox = cmdbuf -> nbox ;
2903
2906
2904
2907
if (dev_priv -> microcode_version == UCODE_R300 ) {
2905
2908
int temp ;
2906
2909
temp = r300_do_cp_cmdbuf (dev , file_priv , cmdbuf );
2907
2910
2908
- if (cmdbuf -> bufsz != 0 )
2909
- drm_buffer_free (cmdbuf -> buffer );
2911
+ drm_buffer_free (cmdbuf -> buffer );
2910
2912
2911
2913
return temp ;
2912
2914
}
@@ -3012,16 +3014,15 @@ static int radeon_cp_cmdbuf(struct drm_device *dev, void *data,
3012
3014
}
3013
3015
}
3014
3016
3015
- if (cmdbuf -> bufsz != 0 )
3016
- drm_buffer_free (cmdbuf -> buffer );
3017
+ drm_buffer_free (cmdbuf -> buffer );
3017
3018
3019
+ done :
3018
3020
DRM_DEBUG ("DONE\n" );
3019
3021
COMMIT_RING ();
3020
3022
return 0 ;
3021
3023
3022
3024
err :
3023
- if (cmdbuf -> bufsz != 0 )
3024
- drm_buffer_free (cmdbuf -> buffer );
3025
+ drm_buffer_free (cmdbuf -> buffer );
3025
3026
return - EINVAL ;
3026
3027
}
3027
3028
0 commit comments