aboutsummaryrefslogtreecommitdiffstats
path: root/include/drm/drm_util.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/drm/drm_util.h')
-rw-r--r--include/drm/drm_util.h53
1 files changed, 52 insertions, 1 deletions
diff --git a/include/drm/drm_util.h b/include/drm/drm_util.h
index 88abdca89baa..8163d35f8327 100644
--- a/include/drm/drm_util.h
+++ b/include/drm/drm_util.h
@@ -26,7 +26,58 @@
26#ifndef _DRM_UTIL_H_ 26#ifndef _DRM_UTIL_H_
27#define _DRM_UTIL_H_ 27#define _DRM_UTIL_H_
28 28
29/* helper for handling conditionals in various for_each macros */ 29/**
30 * DOC: drm utils
31 *
32 * Macros and inline functions that does not naturally belong in other places
33 */
34
35#include <linux/interrupt.h>
36#include <linux/kgdb.h>
37#include <linux/preempt.h>
38#include <linux/smp.h>
39
40/*
41 * Use EXPORT_SYMBOL_FOR_TESTS_ONLY() for functions that shall
42 * only be visible for drmselftests.
43 */
44#if defined(CONFIG_DRM_DEBUG_SELFTEST_MODULE)
45#define EXPORT_SYMBOL_FOR_TESTS_ONLY(x) EXPORT_SYMBOL(x)
46#else
47#define EXPORT_SYMBOL_FOR_TESTS_ONLY(x)
48#endif
49
50/**
51 * for_each_if - helper for handling conditionals in various for_each macros
52 * @condition: The condition to check
53 *
54 * Typical use::
55 *
56 * #define for_each_foo_bar(x, y) \'
57 * list_for_each_entry(x, y->list, head) \'
58 * for_each_if(x->something == SOMETHING)
59 *
60 * The for_each_if() macro makes the use of for_each_foo_bar() less error
61 * prone.
62 */
30#define for_each_if(condition) if (!(condition)) {} else 63#define for_each_if(condition) if (!(condition)) {} else
31 64
65/**
66 * drm_can_sleep - returns true if currently okay to sleep
67 *
68 * This function shall not be used in new code.
69 * The check for running in atomic context may not work - see linux/preempt.h.
70 *
71 * FIXME: All users of drm_can_sleep should be removed (see todo.rst)
72 *
73 * Returns:
74 * True if kgdb is active or we are in an atomic context or irqs are disabled
75 */
76static inline bool drm_can_sleep(void)
77{
78 if (in_atomic() || in_dbg_master() || irqs_disabled())
79 return false;
80 return true;
81}
82
32#endif 83#endif