From b74acc7363ae55c3da6eb2759ec3de06155f128d Mon Sep 17 00:00:00 2001 From: LwhJesse <256257451+LwhJesse@users.noreply.github.com> Date: Mon, 11 May 2026 02:18:07 +0800 Subject: [PATCH] uvm: avoid over-reserving tracker entries --- kernel-open/nvidia-uvm/uvm_tracker.c | 6 +++++- kernel-open/nvidia-uvm/uvm_tracker_test.c | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/kernel-open/nvidia-uvm/uvm_tracker.c b/kernel-open/nvidia-uvm/uvm_tracker.c index fec231309e..8333c3677a 100644 --- a/kernel-open/nvidia-uvm/uvm_tracker.c +++ b/kernel-open/nvidia-uvm/uvm_tracker.c @@ -211,7 +211,11 @@ NV_STATUS uvm_tracker_add_tracker(uvm_tracker_t *dst, uvm_tracker_t *src) if (uvm_tracker_is_empty(src)) return NV_OK; - status = uvm_tracker_reserve(dst, src->size); + if (dst->size + src->size > dst->max_size) + status = reserve_for_entries_from_tracker(dst, src); + else + status = NV_OK; + if (status == NV_ERR_NO_MEMORY) { uvm_tracker_remove_completed(dst); uvm_tracker_remove_completed(src); diff --git a/kernel-open/nvidia-uvm/uvm_tracker_test.c b/kernel-open/nvidia-uvm/uvm_tracker_test.c index f5eae8aba2..5c31b9b6c9 100644 --- a/kernel-open/nvidia-uvm/uvm_tracker_test.c +++ b/kernel-open/nvidia-uvm/uvm_tracker_test.c @@ -388,6 +388,13 @@ static NV_STATUS test_tracker_add_tracker(uvm_va_space_t *va_space) TEST_CHECK_RET(uvm_tracker_get_entries(&dup_tracker)[0].channel == entry.channel); TEST_CHECK_RET(uvm_tracker_get_entries(&dup_tracker)[0].value == entry.value); + status = uvm_tracker_add_tracker(&dup_tracker, &tracker); + TEST_CHECK_GOTO(status == NV_OK, done); + TEST_CHECK_RET(dup_tracker.size == 1); + TEST_CHECK_RET(dup_tracker.max_size == ARRAY_SIZE(dup_tracker.static_entries)); + TEST_CHECK_RET(uvm_tracker_get_entries(&dup_tracker)[0].channel == entry.channel); + TEST_CHECK_RET(uvm_tracker_get_entries(&dup_tracker)[0].value == entry.value); + for_each_va_space_gpu(gpu, va_space) { uvm_channel_pool_t *pool;