]> www.infradead.org Git - users/hch/misc.git/commitdiff
drm/amdgpu: Fix missing drain retry fault the last entry
authorEmily Deng <Emily.Deng@amd.com>
Mon, 3 Mar 2025 07:10:22 +0000 (15:10 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 7 Mar 2025 17:53:30 +0000 (12:53 -0500)
While the entry get in svm_range_unmap_from_cpu is the last entry, and
the entry is page fault, it also need to be dropped. So for equal case,
it also need to be dropped.

v2:
Only modify the svm_range_restore_pages.

Signed-off-by: Emily Deng <Emily.Deng@amd.com>
Reviewed-by: Xiaogang Chen<xiaogang.chen@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h
drivers/gpu/drm/amd/amdkfd/kfd_svm.c

index 7d4395a5d8ac9f3194a50e296304b1bec862ad47..b0a88f92cd821d6546c05361128dc005b562214c 100644 (file)
@@ -78,6 +78,9 @@ struct amdgpu_ih_ring {
 #define amdgpu_ih_ts_after(t1, t2) \
                (((int64_t)((t2) << 16) - (int64_t)((t1) << 16)) > 0LL)
 
+#define amdgpu_ih_ts_after_or_equal(t1, t2) \
+               (((int64_t)((t2) << 16) - (int64_t)((t1) << 16)) >= 0LL)
+
 /* provided by the ih block */
 struct amdgpu_ih_funcs {
        /* ring read/write ptr handling, called from interrupt context */
index db3034b00dac24c3b2d79faa555bc9ca1504933a..1a38ac75abbd434b511e577d028b9874293a52d8 100644 (file)
@@ -3011,7 +3011,7 @@ svm_range_restore_pages(struct amdgpu_device *adev, unsigned int pasid,
 
        /* check if this page fault time stamp is before svms->checkpoint_ts */
        if (svms->checkpoint_ts[gpuidx] != 0) {
-               if (amdgpu_ih_ts_after(ts,  svms->checkpoint_ts[gpuidx])) {
+               if (amdgpu_ih_ts_after_or_equal(ts,  svms->checkpoint_ts[gpuidx])) {
                        pr_debug("draining retry fault, drop fault 0x%llx\n", addr);
                        r = 0;
                        goto out;