Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c1a17777 authored by Christian König's avatar Christian König Committed by Alex Deucher
Browse files

drm/amdgpu: fix huge page handling on Vega10



We accidentially set the huge flag on the parent instead of the childs.
This caused some VM faults under memory pressure.

Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Acked-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Tested-by: default avatarSamuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
parent 4d454e9f
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -1632,13 +1632,6 @@ static int amdgpu_vm_update_ptes(struct amdgpu_pte_update_params *params,
			continue;
		}

		/* First check if the entry is already handled */
		if (cursor.pfn < frag_start) {
			cursor.entry->huge = true;
			amdgpu_vm_pt_next(adev, &cursor);
			continue;
		}

		/* If it isn't already handled it can't be a huge page */
		if (cursor.entry->huge) {
			/* Add the entry to the relocated list to update it. */
@@ -1701,10 +1694,19 @@ static int amdgpu_vm_update_ptes(struct amdgpu_pte_update_params *params,
			}
		} while (frag_start < entry_end);

		if (frag >= shift)
		if (amdgpu_vm_pt_descendant(adev, &cursor)) {
			/* Mark all child entries as huge */
			while (cursor.pfn < frag_start) {
				cursor.entry->huge = true;
				amdgpu_vm_pt_next(adev, &cursor);
			}

		} else if (frag >= shift) {
			/* or just move on to the next on the same level. */
			amdgpu_vm_pt_next(adev, &cursor);
		}
	}

	return 0;
}