diff options
| author | Lespiau, Damien <damien.lespiau@intel.com> | 2014-03-24 11:53:15 -0400 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2014-03-27 22:57:36 -0400 |
| commit | a73d4e91fbb5ed6821ec5b906028e0e94868ef79 (patch) | |
| tree | 23c53972b71fc5dae0ed7e28a45b23ff3d928c19 /include/drm | |
| parent | 8fa6a9e7e23ff163235d86b4d6f30692092dd1b5 (diff) | |
drm: Pull the test on drm_debug in the logging macros
In the logging code, we are currently checking is we need to output in
drm_ut_debug_printk(). This is too late. The problem is that when we write
something like:
DRM_DEBUG_DRIVER("ELD on [CONNECTOR:%d:%s], [ENCODER:%d:%s]\n",
connector->base.id,
drm_get_connector_name(connector),
connector->encoder->base.id,
drm_get_encoder_name(connector->encoder));
We start by evaluating the arguments (so call drm_get_connector_name() and
drm_get_connector_name()) before ending up in drm_ut_debug_printk() which will
then does nothing.
This means we execute a lot of instructions (drm_get_connector_name(), in turn,
calls snprintf() for example) to happily discard them in the normal case,
drm.debug=0.
So, let's put the test on drm_debug earlier, in the macros themselves.
Sprinkle an unlikely() as well for good measure.
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'include/drm')
| -rw-r--r-- | include/drm/drmP.h | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/include/drm/drmP.h b/include/drm/drmP.h index 665176e68b48..cde156293d9d 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h | |||
| @@ -121,9 +121,8 @@ struct videomode; | |||
| 121 | #define DRM_UT_KMS 0x04 | 121 | #define DRM_UT_KMS 0x04 |
| 122 | #define DRM_UT_PRIME 0x08 | 122 | #define DRM_UT_PRIME 0x08 |
| 123 | 123 | ||
| 124 | extern __printf(4, 5) | 124 | extern __printf(3, 4) |
| 125 | void drm_ut_debug_printk(unsigned int request_level, | 125 | void drm_ut_debug_printk(const char *prefix, |
| 126 | const char *prefix, | ||
| 127 | const char *function_name, | 126 | const char *function_name, |
| 128 | const char *format, ...); | 127 | const char *format, ...); |
| 129 | extern __printf(2, 3) | 128 | extern __printf(2, 3) |
| @@ -209,24 +208,28 @@ int drm_err(const char *func, const char *format, ...); | |||
| 209 | #if DRM_DEBUG_CODE | 208 | #if DRM_DEBUG_CODE |
| 210 | #define DRM_DEBUG(fmt, args...) \ | 209 | #define DRM_DEBUG(fmt, args...) \ |
| 211 | do { \ | 210 | do { \ |
| 212 | drm_ut_debug_printk(DRM_UT_CORE, DRM_NAME, \ | 211 | if (unlikely(drm_debug & DRM_UT_CORE)) \ |
| 213 | __func__, fmt, ##args); \ | 212 | drm_ut_debug_printk(DRM_NAME, __func__, \ |
| 213 | fmt, ##args); \ | ||
| 214 | } while (0) | 214 | } while (0) |
| 215 | 215 | ||
| 216 | #define DRM_DEBUG_DRIVER(fmt, args...) \ | 216 | #define DRM_DEBUG_DRIVER(fmt, args...) \ |
| 217 | do { \ | 217 | do { \ |
| 218 | drm_ut_debug_printk(DRM_UT_DRIVER, DRM_NAME, \ | 218 | if (unlikely(drm_debug & DRM_UT_DRIVER)) \ |
| 219 | __func__, fmt, ##args); \ | 219 | drm_ut_debug_printk(DRM_NAME, __func__, \ |
| 220 | fmt, ##args); \ | ||
| 220 | } while (0) | 221 | } while (0) |
| 221 | #define DRM_DEBUG_KMS(fmt, args...) \ | 222 | #define DRM_DEBUG_KMS(fmt, args...) \ |
| 222 | do { \ | 223 | do { \ |
| 223 | drm_ut_debug_printk(DRM_UT_KMS, DRM_NAME, \ | 224 | if (unlikely(drm_debug & DRM_UT_KMS)) \ |
| 224 | __func__, fmt, ##args); \ | 225 | drm_ut_debug_printk(DRM_NAME, __func__, \ |
| 226 | fmt, ##args); \ | ||
| 225 | } while (0) | 227 | } while (0) |
| 226 | #define DRM_DEBUG_PRIME(fmt, args...) \ | 228 | #define DRM_DEBUG_PRIME(fmt, args...) \ |
| 227 | do { \ | 229 | do { \ |
| 228 | drm_ut_debug_printk(DRM_UT_PRIME, DRM_NAME, \ | 230 | if (unlikely(drm_debug & DRM_UT_PRIME)) \ |
| 229 | __func__, fmt, ##args); \ | 231 | drm_ut_debug_printk(DRM_NAME, __func__, \ |
| 232 | fmt, ##args); \ | ||
| 230 | } while (0) | 233 | } while (0) |
| 231 | #else | 234 | #else |
| 232 | #define DRM_DEBUG_DRIVER(fmt, args...) do { } while (0) | 235 | #define DRM_DEBUG_DRIVER(fmt, args...) do { } while (0) |
