From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 75A98373BFE for ; Fri, 26 Jun 2026 11:58:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.50 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782475116; cv=none; b=Zff6UBGynhobAPoVnEQSgSnUJ+U8XB8JKCT7uRVwcEOw7D8kRcspMA9P3ZXzxYotpd9iQq3h5eZ1pV8XZMGZIA9ipZoSj3Xmh6jVtB8ZbYVh5/OcuTD7fcaC06aNyvxWwmlwf1OxHv+h9U7b3A1KOFcQmjqdEXYyy1cKKCTvk+k= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782475116; c=relaxed/simple; bh=QpB2EkO4z5hxlsl4V4Q7E8QVaYCMXQCl9n7PcVkHg1I=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=NF5zcALJG7jHNMdtdh7or5+iIOtz3pBDQ0f3tTvjUmVKeJvd3EzyLTWSM+etKTg7BcLh/9A+/wkbpwPX9+Rcx0BhRu6wqoN4mWW9TjctttfoWyMDNALtP7AQzYNKEsSxGY2GVZ6EqtylD/MX3zzRHGWRnWcAZGji11pW/jjRGd8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=PIzjfjFX; arc=none smtp.client-ip=209.85.208.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PIzjfjFX" Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-697de335c18so1497372a12.2 for ; Fri, 26 Jun 2026 04:58:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782475114; x=1783079914; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=i0Ps5tEtd22JyPLt5Txw4hpkbL4qYP5JlG6cYEFGqrA=; b=PIzjfjFXty2zoTzKBSftWUu6PQYdNtp3AkQCx9c0XK+5c3SyWqHWRbsUovxf91p6ip 57Yylx579A9PtrJjFSE4a1tz0bKGnTjd6uSHIHFqx4xj0u7uPyI/2qpjp0rU+z6KB5hp nCOiRA7nB3F63jaHV1cbZTdYhiK+JJFsadEqb/e6D5+6YwS3cbZv2msySvDeTWVrNj1+ eQ3t5gHRbHWZAaecppV5VYmneodrduJqye4zfCKa/spANliCrk+JYzAxU8+jEZUkbV40 YOafnO05gExcpD+XSBvvoyJHYY4fItMg01hcVguPvjjMBCqtzOJCNQjR43DhJ6c38+99 kqpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782475114; x=1783079914; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=i0Ps5tEtd22JyPLt5Txw4hpkbL4qYP5JlG6cYEFGqrA=; b=Bu2ncmxr7/pJdX0At5DHFcBKj75Mdk6kBDtuFdhwnz6lmVgSkYxJOpq6qx81G/VHnU 1b2ifkuhjCvJWy/0SirLA+1ZKSMDvTsn8xJMB6MVybhH1+tg7Ol9zrk/CJCIsJmudKDk RRmhN+Ig9B6QbIpFRdmHcGxGjGn8ViVhf6HcX5Fd9gR+KscRHacndQ/qHqo99wICc51S SbdyCD2COVpSBw+H/YedbPYzAt07UGI61wHSIEXejsaimBZ7bKTp6scciewSoTHWebQv JO7ivZ8tw+p5T3QOavbf/TVDU1nSxwMGrUp0cfnz/f2E19x5ChsOMnRYertxqHChgr2n EMYg== X-Forwarded-Encrypted: i=1; AHgh+RpAPEIGnpaZNegnFc2B38ipSv4ONs3frZqOTD/GYhCQ3Pbcvv2XA8/aSjfDXnFD8KsgVbf6XNyGgsnFscQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yx0K9uFLtB1Ue5cAIomb16zqOc6fl0wmz3h23TFCHcqrWRe5aYx H3yw1XL0dZaEqEFtJnVhJM128ErfFhefWWL+3/1mXDrOKnwGROUks+Fm X-Gm-Gg: AfdE7cnXGS5uLZ5aIYrR5/7Er8hw+Lp9FoBwAimmN6CKecpL0nx8FKfHURlnUQggAae iNa3+ufVpUig5UWRKxRUMMmDc8lwYeQWi6TKHHZe5ANowGHz0x7prvEGhK/wyIDhI/apCD5F3aO 5bmH1BUAbnNLJDgVObLhDqbVN88ceun0Jx7Zyflp9gMymOwL/ZAtqpYVa8wqvRoWzVZetbZJNbN Ich0MDFSjzZL3EMew7xvOsXlTmZ0ieA842jCWKPiyeCsPaywZopqwCTnAB4a3eo+JCIUy/LkaNh HkZICk/XoDpSRuwdCB1+/5Pw4XVevnEKjl9sC/85OwekS41L2Krcd51nX024xfdkYKsU33nW6ts NPAIluqcn8cUWD8nj9Ka8ajn9RsWNKkF9YF+ecWEQLYSr6y12kMGBk7pxwtOQr4eYE5nJwGixMg 9uN6hnQCbD2oP/x5K3jtPHBdoz6OfZjKvGqnZytTTTS0AMzebIPVJjBpSU8Ra6EscE5ojySuiMr siUPteQiL7sjzoQX3xEE57p5p746CFN1Q== X-Received: by 2002:a17:907:7ba1:b0:bd0:df77:98bb with SMTP id a640c23a62f3a-c1205d4fd16mr415304166b.9.1782475113560; Fri, 26 Jun 2026 04:58:33 -0700 (PDT) Received: from fedora ([154.66.167.183]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c122e9ae635sm37986266b.20.2026.06.26.04.58.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Jun 2026 04:58:33 -0700 (PDT) From: aquiles To: matthew.brost@intel.com, thomas.hellstrom@linux.intel.com, rodrigo.vivi@intel.com Cc: airlied@gmail.com, simona@ffwll.ch, intel-xe@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, aquiles Subject: [PATCH v2 2/2] drm/xe: skip resv fence wait in xe_svm_invalidate if no ranges are bound Date: Fri, 26 Jun 2026 11:58:08 +0000 Message-ID: <20260626115808.2072258-1-achillezongo07@gmail.com> X-Mailer: git-send-email 2.54.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit xe_svm_invalidate() waited on the VM's reservation object fences before processing MMU notifier events, even when no range in the affected address region had active GPU bindings (tile_present == 0). Add a pre-scan over the affected ranges and skip dma_resv_wait_timeout() when no range needs invalidation and all BOOKKEEP fences are already signaled. The fence check is necessary because tile_present is cleared when an unbind is submitted, not when the GPU job completes — skipping the wait without it risks unmapping DMA while an unbind is still in flight. Signed-off-by: aquiles --- drivers/gpu/drm/xe/xe_svm.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/xe/xe_svm.c b/drivers/gpu/drm/xe/xe_svm.c index e1651e70c..447c5c965 100644 --- a/drivers/gpu/drm/xe/xe_svm.c +++ b/drivers/gpu/drm/xe/xe_svm.c @@ -233,6 +233,7 @@ static void xe_svm_invalidate(struct drm_gpusvm *gpusvm, ktime_t start = xe_gt_stats_ktime_get(); u64 adj_start = mmu_range->start, adj_end = mmu_range->end; u8 tile_mask = 0, id; + bool needs_inval = false; long err; xe_svm_assert_in_notifier(vm); @@ -258,11 +259,22 @@ static void xe_svm_invalidate(struct drm_gpusvm *gpusvm, if (xe_vm_is_closed(vm)) goto range_notifier_event_end; - /* - * XXX: Less than ideal to always wait on VM's resv slots if an - * invalidation is not required. Could walk range list twice to figure - * out if an invalidations is need, but also not ideal. - */ + /* Pre-scan: skip fence wait if no range has active GPU bindings. */ + + r = first; + drm_gpusvm_for_each_range(r, notifier, adj_start, adj_end) { + struct xe_svm_range *range = to_xe_range(r); + + if (!range->base.pages.flags.unmapped && range->tile_present) { + needs_inval = true; + break; + } + + } + if (!needs_inval && + dma_resv_test_signaled(xe_vm_resv(vm), DMA_RESV_USAGE_BOOKKEEP)) + goto range_notifier_event_end; + err = dma_resv_wait_timeout(xe_vm_resv(vm), DMA_RESV_USAGE_BOOKKEEP, false, MAX_SCHEDULE_TIMEOUT); -- 2.54.0