dsb(ishst);
 }
 
-static void its_wait_for_range_completion(struct its_node *its,
-                                         struct its_cmd_block *from,
-                                         struct its_cmd_block *to)
+static int its_wait_for_range_completion(struct its_node *its,
+                                        struct its_cmd_block *from,
+                                        struct its_cmd_block *to)
 {
        u64 rd_idx, from_idx, to_idx;
        u32 count = 1000000;    /* 1s! */
 
                count--;
                if (!count) {
-                       pr_err_ratelimited("ITS queue timeout\n");
-                       return;
+                       pr_err_ratelimited("ITS queue timeout (%llu %llu %llu)\n",
+                                          from_idx, to_idx, rd_idx);
+                       return -1;
                }
                cpu_relax();
                udelay(1);
        }
+
+       return 0;
 }
 
 /* Warning, macro hell follows */
        next_cmd = its_post_commands(its);                              \
        raw_spin_unlock_irqrestore(&its->lock, flags);                  \
                                                                        \
-       its_wait_for_range_completion(its, cmd, next_cmd);              \
+       if (its_wait_for_range_completion(its, cmd, next_cmd))          \
+               pr_err_ratelimited("ITS cmd %ps failed\n", builder);    \
 }
 
 static void its_build_sync_cmd(struct its_cmd_block *sync_cmd,