浏览代码

Merge tag 'gvt-next-2016-11-30' of https://github.com/01org/gvt-linux into drm-intel-next-fixes

From Zhenyu Wang <zhenyuw@linux.intel.com>

gvt-next-2016-11-30

- initialize vgpu as primary for correct cfg space setting
- fix 64 bit bar emulation
- fix un-released lock issue on dispatch workload err path

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Jani Nikula 8 年之前
父节点
当前提交
cf30f5094a
共有 3 个文件被更改,包括 9 次插入4 次删除
  1. 2 0
      drivers/gpu/drm/i915/gvt/gvt.h
  2. 6 4
      drivers/gpu/drm/i915/gvt/scheduler.c
  3. 1 0
      drivers/gpu/drm/i915/gvt/vgpu.c

+ 2 - 0
drivers/gpu/drm/i915/gvt/gvt.h

@@ -361,6 +361,8 @@ static inline void intel_vgpu_write_pci_bar(struct intel_vgpu *vgpu,
 		 * leave the bit 3 - bit 0 unchanged.
 		 * leave the bit 3 - bit 0 unchanged.
 		 */
 		 */
 		*pval = (val & GENMASK(31, 4)) | (*pval & GENMASK(3, 0));
 		*pval = (val & GENMASK(31, 4)) | (*pval & GENMASK(3, 0));
+	} else {
+		*pval = val;
 	}
 	}
 }
 }
 
 

+ 6 - 4
drivers/gpu/drm/i915/gvt/scheduler.c

@@ -177,8 +177,8 @@ static int dispatch_workload(struct intel_vgpu_workload *workload)
 	rq = i915_gem_request_alloc(dev_priv->engine[ring_id], shadow_ctx);
 	rq = i915_gem_request_alloc(dev_priv->engine[ring_id], shadow_ctx);
 	if (IS_ERR(rq)) {
 	if (IS_ERR(rq)) {
 		gvt_err("fail to allocate gem request\n");
 		gvt_err("fail to allocate gem request\n");
-		workload->status = PTR_ERR(rq);
-		return workload->status;
+		ret = PTR_ERR(rq);
+		goto out;
 	}
 	}
 
 
 	gvt_dbg_sched("ring id %d get i915 gem request %p\n", ring_id, rq);
 	gvt_dbg_sched("ring id %d get i915 gem request %p\n", ring_id, rq);
@@ -212,7 +212,8 @@ out:
 	if (ret)
 	if (ret)
 		workload->status = ret;
 		workload->status = ret;
 
 
-	i915_add_request_no_flush(rq);
+	if (!IS_ERR_OR_NULL(rq))
+		i915_add_request_no_flush(rq);
 	mutex_unlock(&dev_priv->drm.struct_mutex);
 	mutex_unlock(&dev_priv->drm.struct_mutex);
 	return ret;
 	return ret;
 }
 }
@@ -460,7 +461,8 @@ complete:
 
 
 		complete_current_workload(gvt, ring_id);
 		complete_current_workload(gvt, ring_id);
 
 
-		i915_gem_request_put(fetch_and_zero(&workload->req));
+		if (workload->req)
+			i915_gem_request_put(fetch_and_zero(&workload->req));
 
 
 		if (need_force_wake)
 		if (need_force_wake)
 			intel_uncore_forcewake_put(gvt->dev_priv,
 			intel_uncore_forcewake_put(gvt->dev_priv,

+ 1 - 0
drivers/gpu/drm/i915/gvt/vgpu.c

@@ -378,6 +378,7 @@ struct intel_vgpu *intel_gvt_create_vgpu(struct intel_gvt *gvt,
 	struct intel_vgpu *vgpu;
 	struct intel_vgpu *vgpu;
 
 
 	param.handle = 0;
 	param.handle = 0;
+	param.primary = 1;
 	param.low_gm_sz = type->low_gm_size;
 	param.low_gm_sz = type->low_gm_size;
 	param.high_gm_sz = type->high_gm_size;
 	param.high_gm_sz = type->high_gm_size;
 	param.fence_sz = type->fence;
 	param.fence_sz = type->fence;