[bug report] drm/i915/gvt: Introduce per object locking in GVT scheduler.

Dan Carpenter dan.carpenter at oracle.com
Fri Jul 30 15:14:45 UTC 2021


Hello Zhi Wang,

The patch 67f1120381df: "drm/i915/gvt: Introduce per object locking
in GVT scheduler." from Jan 10, 2021, leads to the following static
checker warning:

	drivers/gpu/drm/i915/gvt/scheduler.c:646 prepare_shadow_wa_ctx()
	warn: inconsistent returns 'wa_ctx->indirect_ctx.obj->base.resv'.

drivers/gpu/drm/i915/gvt/scheduler.c
    605 static int prepare_shadow_wa_ctx(struct intel_shadow_wa_ctx *wa_ctx)
    606 {
    607 	struct i915_vma *vma;
    608 	unsigned char *per_ctx_va =
    609 		(unsigned char *)wa_ctx->indirect_ctx.shadow_va +
    610 		wa_ctx->indirect_ctx.size;
    611 	struct i915_gem_ww_ctx ww;
    612 	int ret;
    613 
    614 	if (wa_ctx->indirect_ctx.size == 0)
    615 		return 0;
    616 
    617 	i915_gem_ww_ctx_init(&ww, false);
    618 retry:
    619 	i915_gem_object_lock(wa_ctx->indirect_ctx.obj, &ww);
    620 
    621 	vma = i915_gem_object_ggtt_pin_ww(wa_ctx->indirect_ctx.obj, &ww, NULL,
    622 					  0, CACHELINE_BYTES, 0);
    623 	if (IS_ERR(vma)) {
    624 		ret = PTR_ERR(vma);
    625 		if (ret == -EDEADLK) {
    626 			ret = i915_gem_ww_ctx_backoff(&ww);
    627 			if (!ret)
    628 				goto retry;
    629 		}

Call i915_gem_object_unlock(wa_ctx->indirect_ctx.obj); before returning?

    630 		return ret;
    631 	}
    632 
    633 	i915_gem_object_unlock(wa_ctx->indirect_ctx.obj);
    634 
    635 	/* FIXME: we are not tracking our pinned VMA leaving it
    636 	 * up to the core to fix up the stray pin_count upon
    637 	 * free.
    638 	 */
    639 
    640 	wa_ctx->indirect_ctx.shadow_gma = i915_ggtt_offset(vma);
    641 
    642 	wa_ctx->per_ctx.shadow_gma = *((unsigned int *)per_ctx_va + 1);
    643 	memset(per_ctx_va, 0, CACHELINE_BYTES);
    644 
    645 	update_wa_ctx_2_shadow_ctx(wa_ctx);
--> 646 	return 0;
    647 }

regards,
dan carpenter


More information about the intel-gvt-dev mailing list