Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp370485ybt; Wed, 24 Jun 2020 01:04:39 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyq+7BvNt1oNXhCBEy11KapwJwo+gQrVV/p5N4YxNt3WcThjdeglywtLaC1wz450UBq1zuj X-Received: by 2002:a17:906:2b81:: with SMTP id m1mr23126033ejg.488.1592985879795; Wed, 24 Jun 2020 01:04:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592985879; cv=none; d=google.com; s=arc-20160816; b=rQI64rq0Qe8dlUa/+vH7btE1dFy1Qyf5thdr/+J51TFUURLnVo6cxAKfo99K2xRNPh V1jX4nf4XJuSb95JxV5bgLiIm+CbS3nNNVW49y/gvy1fqtD532FleG3Ep3yt+axEOKDx H+urlULqzkiOZiDKG5pmEagEiQfuHIRkCUNZTdrLKYyq4qfbMggvSVdW0AqRc0Y3rTRt BY95j2dJyUcHeApRNFwYtoph+ANnGs1JZMIl7SHHvcV/BvKVDlo2qZedQ9bELtTOSyFE bIuyCo9ZM9AUBAoL8eMMEwP+r4SI4clEt7e69KuLzBMtN/vtUTDOwRwZelF/5rYwQqjU tMQQ== 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=BzQQBJ2jpJMAVhe6JwxzB5S30e1Gb/V/E/WqaATbPr8=; b=lUFAUe86eY59TLZI+ygYE7NH1y8sG90LADRWRsk1ymyWJJauQUAoPyJLcXhtNf0/s+ jrjrOMWosB+Po7i174Urr2j++JQyo3j5Dz5OOSHT3sT5nlVUEwLkMtPHiL9FkIBZ5pDe XU0CqaSXGDyTvKCadzDqEYciBD3StJn2Ba6usdTbb7o2A1qUKK1liL0pKiubTrLtbC5/ sDfzkBU7R8ra+rTI8pjkqr6C6H+RdG/iLMzGzOSVuRhwvTAzlkBdtuN2wCkgN8EeUPU5 GsuEpZfnszbxhrBM0F4h5Fw1T0rmk4okUvBQXEwpj6K5zB2OXF5+afLseq9R10gcbtvN M8tg== 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 v1si13296774ejd.509.2020.06.24.01.04.15; Wed, 24 Jun 2020 01:04:39 -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 S2390256AbgFXID1 (ORCPT + 99 others); Wed, 24 Jun 2020 04:03:27 -0400 Received: from mail.fireflyinternet.com ([109.228.58.192]:62453 "EHLO fireflyinternet.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2387606AbgFXID1 (ORCPT ); Wed, 24 Jun 2020 04:03:27 -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 21599206-1500050 for multiple; Wed, 24 Jun 2020 09:03:20 +0100 From: Chris Wilson To: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, intel-gfx@lists.freedesktop.org, Chris Wilson Subject: [PATCH 2/2] drm/i915/gem: Use mmu_notifier_range_mayfail() to avoid waiting inside reclaim Date: Wed, 24 Jun 2020 09:02:48 +0100 Message-Id: <20200624080248.3701-2-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200624080248.3701-1-chris@chris-wilson.co.uk> References: <20200624080248.3701-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 The direct reclaim path may trigger the mmu_notifier callback as part of try_to_unmap_one. As this is purely an opportunitistic attempt to reclaim pages, and will be called from any allocation context under unknown conditions (that include attempting to allocate pages for the userptr object itself and subsequently trying to reclaim parts of the partially acquired object) we have to be careful never to wait on anything being held by the calling context. Since that is unknown, we have to avoid waiting from inside direct reclaim. Signed-off-by: Chris Wilson --- drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c index 9c53eb883400..72cfb91230ea 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c @@ -103,6 +103,7 @@ userptr_mn_invalidate_range_start(struct mmu_notifier *_mn, it = interval_tree_iter_first(&mn->objects, range->start, end); while (it) { struct drm_i915_gem_object *obj; + unsigned int flags; if (!mmu_notifier_range_blockable(range)) { ret = -EAGAIN; @@ -126,9 +127,12 @@ userptr_mn_invalidate_range_start(struct mmu_notifier *_mn, } spin_unlock(&mn->lock); - ret = i915_gem_object_unbind(obj, - I915_GEM_OBJECT_UNBIND_ACTIVE | - I915_GEM_OBJECT_UNBIND_BARRIER); + flags = (I915_GEM_OBJECT_UNBIND_ACTIVE | + I915_GEM_OBJECT_UNBIND_BARRIER); + if (mmu_notifier_range_mayfail(range)) + flags = 0; + + ret = i915_gem_object_unbind(obj, flags); if (ret == 0) ret = __i915_gem_object_put_pages(obj); i915_gem_object_put(obj); -- 2.20.1