Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp89564pxa; Fri, 21 Aug 2020 01:52:15 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyjaUcEQa2V561/lFxqL9l9hi1WahfexMicXkRKtgpwnpaftAr8VsYUD4OWsLJzxlaznay8 X-Received: by 2002:a17:906:c310:: with SMTP id s16mr1923539ejz.466.1597999935662; Fri, 21 Aug 2020 01:52:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1597999935; cv=none; d=google.com; s=arc-20160816; b=Uiako9BeefFxjeYE1NTDEn45T1qqXmdRRqIgpHgADBaboHoPelmBLoraJOU5v+Qhnl iuWvNO0l9csfy765h/bA0+w+j5ybPM1NVro9XnWBdis/kp6MvmAAFIvTkBUwUBv0qbtF VLR+D3QynE1uRnhgIhmtaMQcJsqxw1LKIAD2GedxPvxvgwkLj9M9MvcrhZpbWbg1OzRY b9u4RQSmzSptxMQ6v+7rlYe9wIGDME96PJJdC9MlpfBU/Az/KYq5RTg2xfhRcm5PUoZN HMOdFwcI5lMtdtBePXNo/U+P+DIfDmDnyHmDOwERWIndLvrfzjwxfzm2M8btg5TGWEFa dbEQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=mezwi/uwVHBUBvzJvv2xSRhfE1BYzplNwxQQDQOeu1Q=; b=Ul9brt4IXNrcRMHApSGiYNAq2s34j0k1NmJQth0z7zMesmf+/r4BckIt/MxMlVLKDy 059fg1/bokO+LG6ZkUpxOyJhc6HjDrz7uyysHy+v1/wRChMlGGnnowVn4pp1Um190UWa gy8Ji5UCEw9Cd3qaKQJnSl2d1rGYZ1m2byDXmjOI9pFG1XcuVw+9Dd82Pc3MhTggOBlC hMQKDlPp8H9kadK0U3TM98f4AOW7FBEWaGbmi5i0rWRxWiS9fW8hGR0SADHAHMn+RfSR ftGMytrcALDX58sA2zfVh4g1YQED72SdpxYPy9rbrZEGg9dcvge+acJvb/UXa0H8QvIo lMDw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d6si761622ejy.409.2020.08.21.01.51.52; Fri, 21 Aug 2020 01:52:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728180AbgHUIu0 (ORCPT + 99 others); Fri, 21 Aug 2020 04:50:26 -0400 Received: from mail.fireflyinternet.com ([77.68.26.236]:55722 "EHLO fireflyinternet.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1727868AbgHUIuZ (ORCPT ); Fri, 21 Aug 2020 04:50:25 -0400 X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Received: from build.alporthouse.com (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP id 22195100-1500050 for multiple; Fri, 21 Aug 2020 09:50:15 +0100 From: Chris Wilson To: linux-kernel@vger.kernel.org, intel-gfx@lists.freedesktop.org Cc: linux-mm@kvack.org, Chris Wilson , Pavel Machek , Joonas Lahtinen , stable@vger.kernel.org Subject: [PATCH 4/4] drm/i915/gem: Replace reloc chain with terminator on error unwind Date: Fri, 21 Aug 2020 09:50:11 +0100 Message-Id: <20200821085011.28878-4-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200821085011.28878-1-chris@chris-wilson.co.uk> References: <20200821085011.28878-1-chris@chris-wilson.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If we hit an error during construction of the reloc chain, we need to replace the chain into the next batch with the terminator so that upon flushing the relocations so far, we do not execute a hanging batch. Reported-by: Pavel Machek Fixes: 964a9b0f611e ("drm/i915/gem: Use chained reloc batches") Signed-off-by: Chris Wilson Cc: Joonas Lahtinen Cc: Pavel Machek Cc: # v5.8+ --- .../gpu/drm/i915/gem/i915_gem_execbuffer.c | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c index 24a1486d2dc5..a09f04eee417 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c @@ -972,21 +972,6 @@ static int reloc_gpu_chain(struct reloc_cache *cache) if (err) goto out_pool; - GEM_BUG_ON(cache->rq_size + RELOC_TAIL > PAGE_SIZE / sizeof(u32)); - cmd = cache->rq_cmd + cache->rq_size; - *cmd++ = MI_ARB_CHECK; - if (cache->gen >= 8) - *cmd++ = MI_BATCH_BUFFER_START_GEN8; - else if (cache->gen >= 6) - *cmd++ = MI_BATCH_BUFFER_START; - else - *cmd++ = MI_BATCH_BUFFER_START | MI_BATCH_GTT; - *cmd++ = lower_32_bits(batch->node.start); - *cmd++ = upper_32_bits(batch->node.start); /* Always 0 for gen<8 */ - i915_gem_object_flush_map(cache->rq_vma->obj); - i915_gem_object_unpin_map(cache->rq_vma->obj); - cache->rq_vma = NULL; - err = intel_gt_buffer_pool_mark_active(pool, rq); if (err == 0) { i915_vma_lock(batch); @@ -999,15 +984,31 @@ static int reloc_gpu_chain(struct reloc_cache *cache) if (err) goto out_pool; + GEM_BUG_ON(cache->rq_size + RELOC_TAIL > PAGE_SIZE / sizeof(u32)); + cmd = cache->rq_cmd + cache->rq_size; + *cmd++ = MI_ARB_CHECK; + if (cache->gen >= 8) + *cmd++ = MI_BATCH_BUFFER_START_GEN8; + else if (cache->gen >= 6) + *cmd++ = MI_BATCH_BUFFER_START; + else + *cmd++ = MI_BATCH_BUFFER_START | MI_BATCH_GTT; + *cmd++ = lower_32_bits(batch->node.start); + *cmd++ = upper_32_bits(batch->node.start); /* Always 0 for gen<8 */ + cmd = i915_gem_object_pin_map(batch->obj, cache->has_llc ? I915_MAP_FORCE_WB : I915_MAP_FORCE_WC); if (IS_ERR(cmd)) { + /* We will replace the BBS with BBE upon flushing the rq */ err = PTR_ERR(cmd); goto out_pool; } + i915_gem_object_flush_map(cache->rq_vma->obj); + i915_gem_object_unpin_map(cache->rq_vma->obj); + /* Return with batch mapping (cmd) still pinned */ cache->rq_cmd = cmd; cache->rq_size = 0; -- 2.20.1