From dcf0b1dd20c1b054440084b30d360d015f740bfe Mon Sep 17 00:00:00 2001 From: tracycam Date: Mon, 17 Aug 2026 01:21:40 +0800 Subject: [PATCH 1/2] Avoid device spans in DMA address limit check --- kernel-open/nvidia/nv-vm.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/kernel-open/nvidia/nv-vm.c b/kernel-open/nvidia/nv-vm.c index e36654744e..8c6c5a4ff7 100644 --- a/kernel-open/nvidia/nv-vm.c +++ b/kernel-open/nvidia/nv-vm.c @@ -227,12 +227,21 @@ static inline void nv_set_memory_type(nv_alloc_t *at, NvU32 type) static NvU64 nv_get_max_sysmem_address(void) { NvU64 global_max_pfn = 0ULL; + struct zone *zone; int node_id; + int zone_id; for_each_online_node(node_id) { - // node_end_pfn() returns the next PFN after the last PFN in the node. - global_max_pfn = max(global_max_pfn, (NvU64)node_end_pfn(node_id)); + for (zone_id = 0; zone_id <= ZONE_NORMAL; zone_id++) + { + zone = &NODE_DATA(node_id)->node_zones[zone_id]; + + if (!populated_zone(zone)) + continue; + + global_max_pfn = max(global_max_pfn, (NvU64)zone_end_pfn(zone)); + } } return (global_max_pfn << PAGE_SHIFT) - 1; From c21c75a3ac72682e52d5f4adbcb22fe3e8424ba9 Mon Sep 17 00:00:00 2001 From: tracycam Date: Mon, 17 Aug 2026 01:46:49 +0800 Subject: [PATCH 2/2] Use managed zones for DMA address limit --- kernel-open/nvidia/nv-vm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel-open/nvidia/nv-vm.c b/kernel-open/nvidia/nv-vm.c index 8c6c5a4ff7..3a5ee8d5cc 100644 --- a/kernel-open/nvidia/nv-vm.c +++ b/kernel-open/nvidia/nv-vm.c @@ -237,7 +237,7 @@ static NvU64 nv_get_max_sysmem_address(void) { zone = &NODE_DATA(node_id)->node_zones[zone_id]; - if (!populated_zone(zone)) + if (!managed_zone(zone)) continue; global_max_pfn = max(global_max_pfn, (NvU64)zone_end_pfn(zone));