[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