Skip to content

Commit af31543

Browse files
committed
570.148.08
1 parent 8ec351a commit af31543

36 files changed

+376
-151
lines changed

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# NVIDIA Linux Open GPU Kernel Module Source
22

33
This is the source release of the NVIDIA Linux open GPU kernel modules,
4-
version 570.144.
4+
version 570.148.08.
55

66

77
## How to Build
@@ -17,7 +17,7 @@ as root:
1717

1818
Note that the kernel modules built here must be used with GSP
1919
firmware and user-space NVIDIA GPU driver components from a corresponding
20-
570.144 driver release. This can be achieved by installing
20+
570.148.08 driver release. This can be achieved by installing
2121
the NVIDIA GPU driver from the .run file using the `--no-kernel-modules`
2222
option. E.g.,
2323

@@ -185,7 +185,7 @@ table below).
185185
For details on feature support and limitations, see the NVIDIA GPU driver
186186
end user README here:
187187

188-
https://us.download.nvidia.com/XFree86/Linux-x86_64/570.144/README/kernel_open.html
188+
https://us.download.nvidia.com/XFree86/Linux-x86_64/570.148.08/README/kernel_open.html
189189

190190
For vGPU support, please refer to the README.vgpu packaged in the vGPU Host
191191
Package for more details.
@@ -964,6 +964,7 @@ Subsystem Device ID.
964964
| NVIDIA GeForce RTX 5080 Laptop GPU | 2C19 |
965965
| NVIDIA GeForce RTX 5090 Laptop GPU | 2C58 |
966966
| NVIDIA GeForce RTX 5080 Laptop GPU | 2C59 |
967+
| NVIDIA GeForce RTX 5060 Ti | 2D04 |
967968
| NVIDIA GeForce RTX 5070 | 2F04 |
968969
| NVIDIA GeForce RTX 5070 Ti Laptop GPU | 2F18 |
969970
| NVIDIA GeForce RTX 5070 Ti Laptop GPU | 2F58 |

kernel-open/Kbuild

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ EXTRA_CFLAGS += -I$(src)/common/inc
8686
EXTRA_CFLAGS += -I$(src)
8787
EXTRA_CFLAGS += -Wall $(DEFINES) $(INCLUDES) -Wno-cast-qual -Wno-format-extra-args
8888
EXTRA_CFLAGS += -D__KERNEL__ -DMODULE -DNVRM
89-
EXTRA_CFLAGS += -DNV_VERSION_STRING=\"570.144\"
89+
EXTRA_CFLAGS += -DNV_VERSION_STRING=\"570.148.08\"
9090

9191
ifneq ($(SYSSRCHOST1X),)
9292
EXTRA_CFLAGS += -I$(SYSSRCHOST1X)

kernel-open/conftest.sh

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3132,6 +3132,21 @@ compile_test() {
31323132
compile_check_conftest "$CODE" "NV_FOLL_LONGTERM_PRESENT" "" "types"
31333133
;;
31343134

3135+
has_enum_pidtype_tgid)
3136+
# Determine if PIDTYPE_TGID is present in the kernel as an enum
3137+
#
3138+
# Added by commit 6883f81aac6f ("pid: Implement PIDTYPE_TGID")
3139+
# in v4.19
3140+
#
3141+
CODE="
3142+
#include <linux/pid.h>
3143+
3144+
enum pid_type type = PIDTYPE_TGID;
3145+
"
3146+
3147+
compile_check_conftest "$CODE" "NV_HAS_ENUM_PIDTYPE_TGID" "" "types"
3148+
;;
3149+
31353150
vfio_pin_pages_has_vfio_device_arg)
31363151
#
31373152
# Determine if vfio_pin_pages() kABI accepts "struct vfio_device *"

kernel-open/nvidia-uvm/uvm_blackwell_host.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,3 +254,31 @@ void uvm_hal_blackwell_host_tlb_invalidate_test(uvm_push_t *push,
254254
HWVALUE(C96F, MEM_OP_D, TLB_INVALIDATE_PDB_ADDR_HI, pdb_hi));
255255
}
256256
}
257+
258+
uvm_access_counter_clear_op_t
259+
uvm_hal_blackwell_access_counter_query_clear_op_gb100(uvm_parent_gpu_t *parent_gpu,
260+
uvm_access_counter_buffer_entry_t **buffer_entries,
261+
NvU32 num_entries)
262+
{
263+
if (parent_gpu->rm_info.accessCntrBufferCount > 1) {
264+
NvU32 i;
265+
266+
for (i = 0; i < num_entries; i++) {
267+
const uvm_access_counter_buffer_entry_t *entry = buffer_entries[i];
268+
269+
// The LSb identifies the die ID.
270+
if ((entry->tag & 0x1) == 1)
271+
return UVM_ACCESS_COUNTER_CLEAR_OP_ALL;
272+
}
273+
}
274+
275+
return UVM_ACCESS_COUNTER_CLEAR_OP_TARGETED;
276+
}
277+
278+
uvm_access_counter_clear_op_t
279+
uvm_hal_blackwell_access_counter_query_clear_op_gb20x(uvm_parent_gpu_t *parent_gpu,
280+
uvm_access_counter_buffer_entry_t **buffer_entries,
281+
NvU32 num_entries)
282+
{
283+
return UVM_ACCESS_COUNTER_CLEAR_OP_TARGETED;
284+
}

kernel-open/nvidia-uvm/uvm_gpu.c

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1197,6 +1197,8 @@ static NV_STATUS alloc_parent_gpu(const NvProcessorUuid *gpu_uuid,
11971197
uvm_sema_init(&parent_gpu->isr.replayable_faults.service_lock, 1, UVM_LOCK_ORDER_ISR);
11981198
uvm_sema_init(&parent_gpu->isr.non_replayable_faults.service_lock, 1, UVM_LOCK_ORDER_ISR);
11991199
uvm_mutex_init(&parent_gpu->access_counters_enablement_lock, UVM_LOCK_ORDER_ACCESS_COUNTERS);
1200+
uvm_mutex_init(&parent_gpu->access_counters_clear_tracker_lock, UVM_LOCK_ACCESS_COUNTERS_CLEAR_OPS);
1201+
uvm_tracker_init(&parent_gpu->access_counters_clear_tracker);
12001202
uvm_spin_lock_irqsave_init(&parent_gpu->isr.interrupts_lock, UVM_LOCK_ORDER_LEAF);
12011203
uvm_spin_lock_init(&parent_gpu->instance_ptr_table_lock, UVM_LOCK_ORDER_LEAF);
12021204
uvm_rb_tree_init(&parent_gpu->instance_ptr_table);
@@ -1214,6 +1216,7 @@ static NV_STATUS alloc_parent_gpu(const NvProcessorUuid *gpu_uuid,
12141216
return NV_OK;
12151217

12161218
cleanup:
1219+
uvm_tracker_deinit(&parent_gpu->access_counters_clear_tracker);
12171220
uvm_kvfree(parent_gpu);
12181221

12191222
return status;
@@ -1644,19 +1647,12 @@ static void sync_parent_gpu_trackers(uvm_parent_gpu_t *parent_gpu,
16441647

16451648
// Sync the access counter clear tracker too.
16461649
if (parent_gpu->access_counters_supported && parent_gpu->access_counter_buffer) {
1647-
NvU32 notif_buf_index;
1648-
for (notif_buf_index = 0; notif_buf_index < parent_gpu->rm_info.accessCntrBufferCount; notif_buf_index++) {
1649-
uvm_access_counter_buffer_t *access_counters = &parent_gpu->access_counter_buffer[notif_buf_index];
1650+
uvm_mutex_lock(&parent_gpu->access_counters_clear_tracker_lock);
1651+
status = uvm_tracker_wait(&parent_gpu->access_counters_clear_tracker);
1652+
uvm_mutex_unlock(&parent_gpu->access_counters_clear_tracker_lock);
16501653

1651-
if (access_counters->rm_info.accessCntrBufferHandle != 0) {
1652-
uvm_access_counters_isr_lock(access_counters);
1653-
status = uvm_tracker_wait(&access_counters->clear_tracker);
1654-
uvm_access_counters_isr_unlock(access_counters);
1655-
1656-
if (status != NV_OK)
1657-
UVM_ASSERT(status == uvm_global_get_status());
1658-
}
1659-
}
1654+
if (status != NV_OK)
1655+
UVM_ASSERT(status == uvm_global_get_status());
16601656
}
16611657
}
16621658

@@ -1787,6 +1783,8 @@ static void uvm_parent_gpu_destroy(nv_kref_t *nv_kref)
17871783
for_each_sub_processor_index(sub_processor_index)
17881784
UVM_ASSERT(!parent_gpu->gpus[sub_processor_index]);
17891785

1786+
uvm_tracker_deinit(&parent_gpu->access_counters_clear_tracker);
1787+
17901788
uvm_kvfree(parent_gpu);
17911789
}
17921790

@@ -2881,6 +2879,9 @@ static NV_STATUS gpu_retain_by_uuid_locked(const NvProcessorUuid *gpu_uuid,
28812879
if (status != NV_OK)
28822880
goto error_unregister;
28832881

2882+
if (gpu_info->accessCntrBufferCount > 1)
2883+
gpu_info->accessCntrBufferCount = 1;
2884+
28842885
if (parent_gpu != NULL) {
28852886
// If the UUID has been seen before, and if SMC is enabled, then check
28862887
// if this specific partition has been seen previously. The UUID-based

kernel-open/nvidia-uvm/uvm_gpu.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -522,10 +522,6 @@ struct uvm_access_counter_buffer_struct
522522
// PCIe
523523
NvU32 cached_put;
524524

525-
// Tracker used to aggregate access counters clear operations, needed for
526-
// GPU removal
527-
uvm_tracker_t clear_tracker;
528-
529525
// Current access counter configuration. During normal operation this
530526
// information is computed once during GPU initialization. However, tests
531527
// may override it to try different configuration values.
@@ -1205,6 +1201,11 @@ struct uvm_parent_gpu_struct
12051201
uvm_access_counter_buffer_t *access_counter_buffer;
12061202
uvm_mutex_t access_counters_enablement_lock;
12071203

1204+
// Tracker used to aggregate access counters clear operations, needed for
1205+
// GPU removal. It is only used when supports_access_counters is set.
1206+
uvm_tracker_t access_counters_clear_tracker;
1207+
uvm_mutex_t access_counters_clear_tracker_lock;
1208+
12081209
// Number of uTLBs per GPC. This information is only valid on Pascal+ GPUs.
12091210
NvU32 utlb_per_gpc_count;
12101211

0 commit comments

Comments
 (0)