drm/i915/gvt: throw error basing on execlist submit result
authorBing Niu <bing.niu@intel.com>
Mon, 31 Oct 2016 09:35:12 +0000 (17:35 +0800)
committerZhenyu Wang <zhenyuw@linux.intel.com>
Thu, 27 Oct 2016 03:20:42 +0000 (11:20 +0800)
throw error message in elsp emulation handler basing on execlist
submit result. guest will trigger tdr process for recovering, gvt
just follow guest's desire.

v2: populate error to top of mmio emulation logic, comments from
zhenyu

Signed-off-by: Bing Niu <bing.niu@intel.com>
Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
drivers/gpu/drm/i915/gvt/handlers.c

index 4850cf3e0dbd94d114569f437a4a95610b4f3f82..9ab1f95dddc5dd73eb272d9f5806955841d6b1e9 100644 (file)
@@ -1320,7 +1320,7 @@ static int elsp_mmio_write(struct intel_vgpu *vgpu, unsigned int offset,
        int ring_id = render_mmio_to_ring_id(vgpu->gvt, offset);
        struct intel_vgpu_execlist *execlist;
        u32 data = *(u32 *)p_data;
-       int ret;
+       int ret = 0;
 
        if (WARN_ON(ring_id < 0 || ring_id > I915_NUM_ENGINES - 1))
                return -EINVAL;
@@ -1328,12 +1328,15 @@ static int elsp_mmio_write(struct intel_vgpu *vgpu, unsigned int offset,
        execlist = &vgpu->execlist[ring_id];
 
        execlist->elsp_dwords.data[execlist->elsp_dwords.index] = data;
-       if (execlist->elsp_dwords.index == 3)
+       if (execlist->elsp_dwords.index == 3) {
                ret = intel_vgpu_submit_execlist(vgpu, ring_id);
+               if(ret)
+                       gvt_err("fail submit workload on ring %d\n", ring_id);
+       }
 
        ++execlist->elsp_dwords.index;
        execlist->elsp_dwords.index &= 0x3;
-       return 0;
+       return ret;
 }
 
 static int ring_mode_mmio_write(struct intel_vgpu *vgpu, unsigned int offset,