Ensure that dma_resv_held() and dma_resv_assert_held() operate on individual reservation objects within a WW transaction rather than on the reservation WW class.
Signed-off-by: Thomas Hellström thomas.hellstrom@linux.intel.com --- include/linux/dma-resv.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/include/linux/dma-resv.h b/include/linux/dma-resv.h index c5ab6fd9ebe8..001de3880fde 100644 --- a/include/linux/dma-resv.h +++ b/include/linux/dma-resv.h @@ -308,8 +308,11 @@ static inline bool dma_resv_iter_is_restarted(struct dma_resv_iter *cursor) fence = dma_resv_iter_first(cursor); fence; \ fence = dma_resv_iter_next(cursor))
-#define dma_resv_held(obj) lockdep_is_held(&(obj)->lock.base) -#define dma_resv_assert_held(obj) lockdep_assert_held(&(obj)->lock.base) +#define dma_resv_held(obj) (lockdep_is_held(&(obj)->lock.base) && ww_mutex_held(&(obj)->lock)) +#define dma_resv_assert_held(obj) do { \ + lockdep_assert_held(&(obj)->lock.base); \ + ww_mutex_assert_held(&(obj)->lock); \ + } while (0)
#ifdef CONFIG_DEBUG_MUTEXES void dma_resv_reset_max_fences(struct dma_resv *obj);