From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (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 C46FD42BC54 for ; Tue, 14 Jul 2026 22:21:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784067714; cv=none; b=Q9wY6FgMKgFjtOoPdTBUce6pxt42074XHmlDxr+M6LiKS4vglhdpOfzp95cLmq2rIirPWXBsd1EtgN280nhDMAg89g1AOSWrDfOmJX5CKkomfFB9Gh3oGNOOXX9MPxULtA4BwGx/BhJ5XgtdAHxp6/9V9nE7Em4At+QvfuFbIVE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784067714; c=relaxed/simple; bh=Q8uBbE9XdPRVXQaZ0ExTI42TK7zcMOJJhXBlrcrT8a4=; h=Subject:From:To:Cc:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=TVZzsm5AtdUeMZ/1lawPsNK70Mnb/kanVh/VBBDdu3XB6JhxOI24ZHpLsNfEqxCONsu1jgMKllf7BI1ZHzFsvwgdGOO47fhmOXv12d5XW5l5yk/eIBlnsetfqCR5QmgZXfNzC4JZxR71VihjvNSnxYRWQaH/1vmPl8JbMk5UVYY= 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=bCcqBd6p; arc=none smtp.client-ip=209.85.214.182 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="bCcqBd6p" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-2cedda2ce6fso17383785ad.1 for ; Tue, 14 Jul 2026 15:21:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784067712; x=1784672512; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:user-agent :references:in-reply-to:message-id:date:cc:to:from:subject:from:to :cc:subject:date:message-id:reply-to:content-type; bh=EUZJ2b06rpE59kyPt/lRc7T/ATHNB4Peeih6JEYSOE8=; b=bCcqBd6pLM1VKsXErISfU78JfZjhPvwtrPLKWjhOTWaMKlw3MkCu6iNgjz3nvZ8Y5I GP55kEVQPhUwQn4WehX6KPsxRiyraoW0q1ySXyPEWHL4NBQ23BAX6CsWVmdzcV2ZgAdp aZCp/AvReu1EG1gm8RsE5U08mCNNsa5AfntU5TOVoTceDeRTv1Vo68SSKmIR7E6SKVHC gZEQ3+1AMnpYRI3WXOpLobTzLIdIA51HznWH7crClBm2IiiKrRTBivXZ49MTwkrSb4Nw KbG5UQd4WpH6FWp277B6k6OR8PfZ+mHEiUls7Et9WM8WyxgzSUSyJqkk2rLsf8BcTtH9 AOHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784067712; x=1784672512; h=content-transfer-encoding:content-type:mime-version:user-agent :references:in-reply-to:message-id:date:cc:to:from:subject:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=EUZJ2b06rpE59kyPt/lRc7T/ATHNB4Peeih6JEYSOE8=; b=G+8OrjrCdAjVR6V7IYPpKJNOcQRl0wslJ9XRdbNcCO8P/dzr+SOM+rsw5e6NdOR1h1 H1OTVTL/tLzvgeRNofEs9Z1gIx2H2AuBIB7tHJKRxrb95bEqMRsg76x6CiLwV34gNVkj atSTt7ge/jp6xumACIn85NUkE1cK86KELb/ZXJMlc8a1D3XRwge+Hu4MRHZyCMJoHheT Eq/5SAbyEz2z0KqSGm71VJ3RiweJiB+NWkaRQk3NoUxft/tCJOmgrerA2LtsXfkNAZ+x Ru+kKw4uZaheGtfJ5Bee/Z4B2qI6BTYQBYN3K6BYmUqh6UbWY+pMDURx0ReSU7SxAtvX Ecww== X-Forwarded-Encrypted: i=1; AHgh+Rr/vy7z6Bp2v+DtHd688vkkRR5cmZgullwx7M5gDmWNVegtxfLb3ORPtfXZwHQvKRrSqwHtiq9PhWfR78k=@vger.kernel.org X-Gm-Message-State: AOJu0YzJDxVlJz2fKKgXzkmD+oALFkDcG5ZKQAbEzorLokYLiTsC3sJf 2Bzq8Sf5otVlBjQr9AhMRDpYM3CaOxq94WCrm4eZiDyOe87wTvg4Nen6 X-Gm-Gg: AfdE7cn/MZoi/kMBWAB84h040gpufElsV9WasiKxAmaJH8umuHLGrDggSJn2VMrzYfm AQKRcU8fuoQBF9gt4OQkZj44qE6PPpI3qiMux4cIXpOsYBnVtrsGgvxVTeuWF74h+DeTerdrZmY iGQaeaRwQ5CTyrwb2g0pKJCbxdbL5xp5oPIXbE1aBffKGUyCDVpy7w3YNPg5/JR1OAzNLVqlYwy /COt0Ppb4cmXVbIMr/BboQpAkiUlaRJB5LGX/oVazbLIAaNOeTOPHeU95AQQqdBcJ5WsYB57vvv Cn+W2rWvJThoIUN067J1VlJiaeVli78WVLod5HnevrBTww+crt48YwfdJb+eY/L3QBE85Ts/h9J Gh7ohjSECUrJcKSYVr2GC9VUfKyTqUj986IG3KIrHGZcQ/HEHluRabA4QeC+BVkdDvGL7Zmf9tI hAx7XlxEX2pPFYJa8JF+rAba7bDUvsx1ZHEJofKre+Pm+Oo1P6k0JUCALvwVc= X-Received: by 2002:a17:902:e751:b0:2cc:307c:51f2 with SMTP id d9443c01a7336-2cef143aec1mr42102315ad.22.1784067712200; Tue, 14 Jul 2026 15:21:52 -0700 (PDT) Received: from [192.168.0.160] (c-98-225-44-182.hsd1.wa.comcast.net. [98.225.44.182]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d1f030sm122554955ad.51.2026.07.14.15.21.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Jul 2026 15:21:51 -0700 (PDT) Subject: [PATCH v2 4/4] fixup! drm/gpusvm: use hmm_range_fault_unlocked_timeout() for range faults From: Stanislav Kinsburskii To: airlied@gmail.com, akhilesh@ee.iitb.ac.in, akpm@linux-foundation.org, corbet@lwn.net, dakr@kernel.org, david@kernel.org, jgg@ziepe.ca, kees@kernel.org, leon@kernel.org, liam@infradead.org, lizhi.hou@amd.com, ljs@kernel.org, lyude@redhat.com, maarten.lankhorst@linux.intel.com, mamin506@gmail.com, mhocko@suse.com, mripard@kernel.org, nouveau@lists.freedesktop.org, ogabbay@kernel.org, oleg@redhat.com, rppt@kernel.org, shuah@kernel.org, simona@ffwll.ch, skhan@linuxfoundation.org, skinsburskii@gmail.com, surenb@google.com, tzimmermann@suse.de, vbabka@kernel.org Cc: dri-devel@lists.freedesktop.org, linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-rdma@vger.kernel.org Date: Tue, 14 Jul 2026 15:21:49 -0700 Message-ID: <178406770964.1106335.10099816010446253543.stgit@skinsburskii> In-Reply-To: <178406760622.1106335.2379450382728057793.stgit@skinsburskii> References: <178406760622.1106335.2379450382728057793.stgit@skinsburskii> User-Agent: StGit/0.19 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: 7bit The timeout passed to hmm_range_fault_unlocked_timeout() is a relative retry budget for HMM's internal mmu-notifier retry loop. drm_gpusvm was still keeping an absolute deadline around the outer driver retry logic and passing the remaining time into HMM. Pass HMM_RANGE_DEFAULT_TIMEOUT directly to hmm_range_fault_unlocked_timeout() on each HMM fault attempt instead. If HMM succeeds but the later drm_gpusvm-side mmu_interval_read_retry() check observes an invalidation, retry with a fresh HMM retry budget. This keeps the timeout focused on repeated notifier retries inside HMM, while avoiding an outer deadline that also accounts unrelated driver-side work after HMM has made progress. Signed-off-by: Stanislav Kinsburskii --- drivers/gpu/drm/drm_gpusvm.c | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/drm_gpusvm.c b/drivers/gpu/drm/drm_gpusvm.c index b8f2dd9982f5..76e8a0028c7f 100644 --- a/drivers/gpu/drm/drm_gpusvm.c +++ b/drivers/gpu/drm/drm_gpusvm.c @@ -852,8 +852,7 @@ enum drm_gpusvm_scan_result drm_gpusvm_scan_mm(struct drm_gpusvm_range *range, .end = end, .dev_private_owner = dev_private_owner, }; - unsigned long timeout = - jiffies + msecs_to_jiffies(HMM_RANGE_DEFAULT_TIMEOUT); + unsigned long timeout = msecs_to_jiffies(HMM_RANGE_DEFAULT_TIMEOUT); enum drm_gpusvm_scan_result state = DRM_GPUSVM_SCAN_UNPOPULATED, new_state; unsigned long *pfns; unsigned long npages = npages_in_range(start, end); @@ -867,8 +866,7 @@ enum drm_gpusvm_scan_result drm_gpusvm_scan_mm(struct drm_gpusvm_range *range, hmm_range.hmm_pfns = pfns; retry: - err = hmm_range_fault_unlocked_timeout(&hmm_range, - max(timeout - jiffies, 1L)); + err = hmm_range_fault_unlocked_timeout(&hmm_range, timeout); if (err) goto err_free; @@ -1459,8 +1457,7 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, .dev_private_owner = ctx->device_private_page_owner, }; void *zdd; - unsigned long timeout = - jiffies + msecs_to_jiffies(HMM_RANGE_DEFAULT_TIMEOUT); + unsigned long timeout = msecs_to_jiffies(HMM_RANGE_DEFAULT_TIMEOUT); unsigned long i, j; unsigned long npages = npages_in_range(pages_start, pages_end); unsigned long num_dma_mapped; @@ -1478,9 +1475,6 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, return -EINVAL; retry: - if (time_after(jiffies, timeout)) - return -EBUSY; - hmm_range.notifier_seq = mmu_interval_read_begin(notifier); if (drm_gpusvm_pages_valid_unlocked(gpusvm, svm_pages)) goto set_seqno; @@ -1495,8 +1489,7 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, } hmm_range.hmm_pfns = pfns; - err = hmm_range_fault_unlocked_timeout(&hmm_range, - max_t(long, timeout - jiffies, 1)); + err = hmm_range_fault_unlocked_timeout(&hmm_range, timeout); mmput(mm); if (err) goto err_free; @@ -1718,8 +1711,7 @@ int drm_gpusvm_range_evict(struct drm_gpusvm *gpusvm, .end = drm_gpusvm_range_end(range), .dev_private_owner = NULL, }; - unsigned long timeout = - jiffies + msecs_to_jiffies(HMM_RANGE_DEFAULT_TIMEOUT); + unsigned long timeout = msecs_to_jiffies(HMM_RANGE_DEFAULT_TIMEOUT); unsigned long *pfns; unsigned long npages = npages_in_range(drm_gpusvm_range_start(range), drm_gpusvm_range_end(range)); @@ -1734,8 +1726,7 @@ int drm_gpusvm_range_evict(struct drm_gpusvm *gpusvm, return -ENOMEM; hmm_range.hmm_pfns = pfns; - err = hmm_range_fault_unlocked_timeout(&hmm_range, - max_t(long, timeout - jiffies, 1)); + err = hmm_range_fault_unlocked_timeout(&hmm_range, timeout); kvfree(pfns); mmput(mm);