Fix build with DRM and INVARIANTS enabled.
The DRM drivers use the lockdep assertion macros with spinlock_t locks which are backed by mutexes, not sx locks. This causes compile failures since you can't use sx_assert with a mutex. Instead, change the lockdep macros to use lock_class methods. This works by assuming that each LinuxKPI locking primitive embeds a FreeBSD lock as its first structure and uses a cast to get to the underlying 'struct lock_object'. Reviewed by: hselasky MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D20992
This commit is contained in:
parent
5a0d467f5f
commit
e28024fbad
@ -40,13 +40,34 @@ struct lock_class_key {
|
||||
#define lockdep_set_current_reclaim_state(g) do { } while (0)
|
||||
#define lockdep_clear_current_reclaim_state() do { } while (0)
|
||||
|
||||
#define lockdep_assert_held(m) \
|
||||
sx_assert(&(m)->sx, SA_XLOCKED)
|
||||
#ifdef INVARIANTS
|
||||
#define lockdep_assert_held(m) do { \
|
||||
struct lock_object *__lock = (struct lock_object *)(m); \
|
||||
LOCK_CLASS(__lock)->lc_assert(__lock, LA_LOCKED); \
|
||||
} while (0)
|
||||
|
||||
#define lockdep_assert_held_once(m) \
|
||||
sx_assert(&(m)->sx, SA_XLOCKED | SA_NOTRECURSED)
|
||||
#define lockdep_assert_held_once(m) do { \
|
||||
struct lock_object *__lock = (struct lock_object *)(m); \
|
||||
LOCK_CLASS(__lock)->lc_assert(__lock, LA_LOCKED | LA_NOTRECURSED); \
|
||||
} while (0)
|
||||
|
||||
#define lockdep_is_held(m) (sx_xholder(&(m)->sx) == curthread)
|
||||
static __inline bool
|
||||
lockdep_is_held(void *__m)
|
||||
{
|
||||
struct lock_object *__lock;
|
||||
struct thread *__td;
|
||||
|
||||
__lock = __m;
|
||||
return (LOCK_CLASS(__lock)->lc_owner(__lock, &__td) != 0);
|
||||
}
|
||||
|
||||
#else
|
||||
#define lockdep_assert_held(m) do { } while (0)
|
||||
|
||||
#define lockdep_assert_held_once(m) do { } while (0)
|
||||
|
||||
#define lockdep_is_held(m) 1
|
||||
#endif
|
||||
|
||||
#define might_lock(m) do { } while (0)
|
||||
#define might_lock_read(m) do { } while (0)
|
||||
|
Loading…
Reference in New Issue
Block a user