Re: [PATCH xf86-video-ati 2/2] Improve drmmode_fb_reference debugging code

2017-06-27 Thread Alex Deucher
On Tue, Jun 27, 2017 at 5:38 AM, Michel Dänzer  wrote:
> From: Michel Dänzer 
>
> 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).
>
> (Ported from amdgpu commit 1b6ff5fd9933c00ec1ec90dfc62e0b531927749b)
>
> Signed-off-by: Michel Dänzer 

Series is:
Reviewed-by: Alex Deucher 

> ---
>  src/drmmode_display.h | 29 ++---
>  1 file changed, 18 insertions(+), 11 deletions(-)
>
> diff --git a/src/drmmode_display.h b/src/drmmode_display.h
> index db68054a7..dde27a009 100644
> --- a/src/drmmode_display.h
> +++ b/src/drmmode_display.h
> @@ -141,29 +141,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++;
> +   if (new->refcnt <= 0) {
> +   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(RADEONEntPtr pRADEONEnt,
>  drmmode_crtc_private_ptr 
> drmmode_crtc,
> --
> 2.13.1
>
> ___
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
___
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx


[PATCH xf86-video-ati 2/2] Improve drmmode_fb_reference debugging code

2017-06-27 Thread Michel Dänzer
From: Michel Dänzer 

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).

(Ported from amdgpu commit 1b6ff5fd9933c00ec1ec90dfc62e0b531927749b)

Signed-off-by: Michel Dänzer 
---
 src/drmmode_display.h | 29 ++---
 1 file changed, 18 insertions(+), 11 deletions(-)

diff --git a/src/drmmode_display.h b/src/drmmode_display.h
index db68054a7..dde27a009 100644
--- a/src/drmmode_display.h
+++ b/src/drmmode_display.h
@@ -141,29 +141,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++;
+   if (new->refcnt <= 0) {
+   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(RADEONEntPtr pRADEONEnt,
 drmmode_crtc_private_ptr 
drmmode_crtc,
-- 
2.13.1

___
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx