BUG_ON(!validate_cmds_sorted(ring, cmd_tables, cmd_table_count));
        BUG_ON(!validate_regs_sorted(ring));
 
-       if (hash_empty(ring->cmd_hash)) {
-               ret = init_hash_table(ring, cmd_tables, cmd_table_count);
-               if (ret) {
-                       DRM_ERROR("CMD: cmd_parser_init failed!\n");
-                       fini_hash_table(ring);
-                       return ret;
-               }
+       WARN_ON(!hash_empty(ring->cmd_hash));
+
+       ret = init_hash_table(ring, cmd_tables, cmd_table_count);
+       if (ret) {
+               DRM_ERROR("CMD: cmd_parser_init failed!\n");
+               fini_hash_table(ring);
+               return ret;
        }
 
        ring->needs_cmd_parser = true;
 
 {
        int ret;
 
-       if (ring->scratch.obj)
-               return 0;
+       WARN_ON(ring->scratch.obj);
 
        ring->scratch.obj = i915_gem_alloc_object(ring->dev, 4096);
        if (ring->scratch.obj == NULL) {
 static int intel_init_ring_buffer(struct drm_device *dev,
                                  struct intel_engine_cs *ring)
 {
-       struct intel_ringbuffer *ringbuf = ring->buffer;
+       struct intel_ringbuffer *ringbuf;
        int ret;
 
-       if (ringbuf == NULL) {
-               ringbuf = kzalloc(sizeof(*ringbuf), GFP_KERNEL);
-               if (!ringbuf)
-                       return -ENOMEM;
-               ring->buffer = ringbuf;
-       }
+       WARN_ON(ring->buffer);
+
+       ringbuf = kzalloc(sizeof(*ringbuf), GFP_KERNEL);
+       if (!ringbuf)
+               return -ENOMEM;
+       ring->buffer = ringbuf;
 
        ring->dev = dev;
        INIT_LIST_HEAD(&ring->active_list);
                        goto error;
        }
 
-       if (ringbuf->obj == NULL) {
-               ret = intel_alloc_ringbuffer_obj(dev, ringbuf);
-               if (ret) {
-                       DRM_ERROR("Failed to allocate ringbuffer %s: %d\n",
-                                       ring->name, ret);
-                       goto error;
-               }
+       WARN_ON(ringbuf->obj);
 
-               ret = intel_pin_and_map_ringbuffer_obj(dev, ringbuf);
-               if (ret) {
-                       DRM_ERROR("Failed to pin and map ringbuffer %s: %d\n",
-                                       ring->name, ret);
-                       intel_destroy_ringbuffer_obj(ringbuf);
-                       goto error;
-               }
+       ret = intel_alloc_ringbuffer_obj(dev, ringbuf);
+       if (ret) {
+               DRM_ERROR("Failed to allocate ringbuffer %s: %d\n",
+                               ring->name, ret);
+               goto error;
+       }
+
+       ret = intel_pin_and_map_ringbuffer_obj(dev, ringbuf);
+       if (ret) {
+               DRM_ERROR("Failed to pin and map ringbuffer %s: %d\n",
+                               ring->name, ret);
+               intel_destroy_ringbuffer_obj(ringbuf);
+               goto error;
        }
 
        /* Workaround an erratum on the i830 which causes a hang if