@@ -672,6 +672,13 @@ static void fini_hash_table(struct intel_engine_cs *ring)
}
}
+#define DRM_ERROR_ON(cond, fmt, ...) ({ \
+ bool __cond = !!(cond); \
+ if (unlikely(__cond)) \
+ drm_err("assertion failed, %s: " fmt, #cond, ##__VA_ARGS__); \
+ unlikely(__cond); \
+})
+
/**
* i915_cmd_parser_init_ring() - set cmd parser related fields for a ringbuffer
* @ring: the ringbuffer to initialize
@@ -751,11 +758,16 @@ int i915_cmd_parser_init_ring(struct intel_engine_cs *ring)
default:
DRM_ERROR("CMD: cmd_parser_init with unknown ring: %d\n",
ring->id);
- BUG();
+ return -ENODEV;
}
- BUG_ON(!validate_cmds_sorted(ring, cmd_tables, cmd_table_count));
- BUG_ON(!validate_regs_sorted(ring));
+ if (DRM_ERROR_ON(!validate_cmds_sorted(ring, cmd_tables, cmd_table_count),
+ "command parser table is not sorted - required for bisetion searching\n"))
+ return -ENODEV;
+
+ if (DRM_ERROR_ON(!validate_regs_sorted(ring),
+ "register lists are not sorted - required for bisection searching\n"))
+ return -ENODEV;
WARN_ON(!hash_empty(ring->cmd_hash));