[PATCH xf86-video-amdgpu] Improve drmmode_fb_reference debugging code

Deucher, Alexander Alexander.Deucher at amd.com
Thu Jun 22 12:49:01 UTC 2017


> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf
> Of Michel Dänzer
> Sent: Thursday, June 22, 2017 4:03 AM
> To: amd-gfx at lists.freedesktop.org
> Subject: [PATCH xf86-video-amdgpu] Improve drmmode_fb_reference
> debugging code
> 
> From: Michel Dänzer <michel.daenzer at amd.com>
> 
> If a reference count is <= 0, call FatalError with the call location
> (in case it doesn't get resolved in the backtrace printed by
> FatalError).
> 
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>

Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  src/drmmode_display.h | 28 ++++++++++++++++------------
>  1 file changed, 16 insertions(+), 12 deletions(-)
> 
> diff --git a/src/drmmode_display.h b/src/drmmode_display.h
> index b64a938cd..f351bb09c 100644
> --- a/src/drmmode_display.h
> +++ b/src/drmmode_display.h
> @@ -133,32 +133,36 @@ enum drmmode_flip_sync {
> 
> 
>  static inline void
> -drmmode_fb_reference(int drm_fd, struct drmmode_fb **old, struct
> drmmode_fb *new)
> +drmmode_fb_reference_loc(int drm_fd, struct drmmode_fb **old, struct
> drmmode_fb *new,
> +			 const char *caller, unsigned line)
>  {
>  	if (new) {
>  		if (new->refcnt <= 0) {
> -			ErrorF("New FB's refcnt was %d in %s\n", new-
> >refcnt,
> -			       __func__);
> -		} else {
> -			new->refcnt++;
> +			FatalError("New FB's refcnt was %d at %s:%u",
> +				   new->refcnt, caller, line);
>  		}
> +
> +		new->refcnt++;
>  	}
> 
>  	if (*old) {
>  		if ((*old)->refcnt <= 0) {
> -			ErrorF("Old FB's refcnt was %d in %s\n",
> -			       (*old)->refcnt, __func__);
> -		} else {
> -			if (--(*old)->refcnt == 0) {
> -				drmModeRmFB(drm_fd, (*old)->handle);
> -				free(*old);
> -			}
> +			FatalError("Old FB's refcnt was %d at %s:%u",
> +				   (*old)->refcnt, caller, line);
> +		}
> +
> +		if (--(*old)->refcnt == 0) {
> +			drmModeRmFB(drm_fd, (*old)->handle);
> +			free(*old);
>  		}
>  	}
> 
>  	*old = new;
>  }
> 
> +#define drmmode_fb_reference(fd, old, new) \
> +	drmmode_fb_reference_loc(fd, old, new, __func__, __LINE__)
> +
> 
>  extern int drmmode_page_flip_target_absolute(AMDGPUEntPtr
> pAMDGPUEnt,
>  					     drmmode_crtc_private_ptr
> drmmode_crtc,
> --
> 2.11.0
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list