Merge tag 'fbdev-for-6.6-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/deller...
[platform/kernel/linux-rpi.git] / io_uring / io_uring.h
index 547c305..0bc1456 100644 (file)
@@ -86,20 +86,33 @@ bool __io_alloc_req_refill(struct io_ring_ctx *ctx);
 bool io_match_task_safe(struct io_kiocb *head, struct task_struct *task,
                        bool cancel_all);
 
-#define io_lockdep_assert_cq_locked(ctx)                               \
-       do {                                                            \
-               lockdep_assert(in_task());                              \
-                                                                       \
-               if (ctx->flags & IORING_SETUP_IOPOLL) {                 \
-                       lockdep_assert_held(&ctx->uring_lock);          \
-               } else if (!ctx->task_complete) {                       \
-                       lockdep_assert_held(&ctx->completion_lock);     \
-               } else if (ctx->submitter_task->flags & PF_EXITING) {   \
-                       lockdep_assert(current_work());                 \
-               } else {                                                \
-                       lockdep_assert(current == ctx->submitter_task); \
-               }                                                       \
-       } while (0)
+#if defined(CONFIG_PROVE_LOCKING)
+static inline void io_lockdep_assert_cq_locked(struct io_ring_ctx *ctx)
+{
+       lockdep_assert(in_task());
+
+       if (ctx->flags & IORING_SETUP_IOPOLL) {
+               lockdep_assert_held(&ctx->uring_lock);
+       } else if (!ctx->task_complete) {
+               lockdep_assert_held(&ctx->completion_lock);
+       } else if (ctx->submitter_task) {
+               /*
+                * ->submitter_task may be NULL and we can still post a CQE,
+                * if the ring has been setup with IORING_SETUP_R_DISABLED.
+                * Not from an SQE, as those cannot be submitted, but via
+                * updating tagged resources.
+                */
+               if (ctx->submitter_task->flags & PF_EXITING)
+                       lockdep_assert(current_work());
+               else
+                       lockdep_assert(current == ctx->submitter_task);
+       }
+}
+#else
+static inline void io_lockdep_assert_cq_locked(struct io_ring_ctx *ctx)
+{
+}
+#endif
 
 static inline void io_req_task_work_add(struct io_kiocb *req)
 {