aboutsummaryrefslogtreecommitdiffstats
path: root/nvdebug_entry.c
diff options
context:
space:
mode:
Diffstat (limited to 'nvdebug_entry.c')
-rw-r--r--nvdebug_entry.c53
1 files changed, 33 insertions, 20 deletions
diff --git a/nvdebug_entry.c b/nvdebug_entry.c
index 5f99976..d5df7db 100644
--- a/nvdebug_entry.c
+++ b/nvdebug_entry.c
@@ -289,17 +289,45 @@ int __init nvdebug_init(void) {
289 snprintf(runlist_name, 12, "runlist%lu", last_runlist); 289 snprintf(runlist_name, 12, "runlist%lu", last_runlist);
290 if (!(rl_dir = proc_mkdir_data(runlist_name, 0555, dir, (void*)device_id))) 290 if (!(rl_dir = proc_mkdir_data(runlist_name, 0555, dir, (void*)device_id)))
291 goto out_nomem; 291 goto out_nomem;
292 // Create one file for each runlist on Ampere+, or one file for each GPU on older
293 if (g_nvdebug_state[res].chip_id >= NV_CHIP_ID_AMPERE || last_runlist == 0) {
294 struct proc_dir_entry *chram_scope;
295 // preempt_tsg, enable_channel, and disable_channel refer to a GPU-global channel
296 // RAM on pre-Ampere GPUs
297 if (g_nvdebug_state[res].chip_id >= NV_CHIP_ID_AMPERE)
298 chram_scope = rl_dir;
299 else
300 chram_scope = dir;
301 // Create file `/proc/gpu#/runlist#/preempt_tsg`, world writable
302 // On Turing and older, `/proc/gpu#/preempt_tsg`
303 if (!proc_create_data(
304 "preempt_tsg", 0222, chram_scope, compat_ops(&preempt_tsg_file_ops),
305 (void*)last_runlist))
306 goto out_nomem;
307 // Create file `/proc/gpu#/runlist#/disable_channel`, world writable
308 // On Turing and older, `/proc/gpu#/disable_channel`
309 if (!proc_create_data(
310 "disable_channel", 0222, chram_scope, compat_ops(&disable_channel_file_ops),
311 (void*)last_runlist))
312 goto out_nomem;
313 // Create file `/proc/gpu#/runlist#/enable_channel`, world writable
314 // On Turing and older, `/proc/gpu#/enable_channel`
315 if (!proc_create_data(
316 "enable_channel", 0222, chram_scope, compat_ops(&enable_channel_file_ops),
317 (void*)last_runlist))
318 goto out_nomem;
319 }
292 // Create file `/proc/gpu#/runlist#/runlist`, world readable 320 // Create file `/proc/gpu#/runlist#/runlist`, world readable
293 if (!proc_create_data( 321 if (!proc_create_data(
294 "runlist", 0444, rl_dir, compat_ops(&runlist_file_ops), 322 "runlist", 0444, rl_dir, compat_ops(&runlist_file_ops),
295 (void*)last_runlist)) 323 (void*)last_runlist))
296 goto out_nomem; 324 goto out_nomem;
325 // Create file `/proc/gpu#/runlist#/switch_to_tsg`, world writable
326 if (!proc_create_data(
327 "switch_to_tsg", 0222, rl_dir, compat_ops(&switch_to_tsg_file_ops),
328 (void*)last_runlist))
329 goto out_nomem;
297 } while (last_runlist-- > 0); 330 } while (last_runlist-- > 0);
298 // Create file `/proc/gpu#/preempt_tsg`, world writable
299 if (!proc_create_data(
300 "preempt_tsg", 0222, dir, compat_ops(&preempt_tsg_file_ops),
301 (void*)device_id))
302 goto out_nomem;
303 /* On the TU104, the context scheduler (contained in the Host, aka 331 /* On the TU104, the context scheduler (contained in the Host, aka
304 * PFIFO, unit) has been observed to sometimes to fail to schedule TSGs 332 * PFIFO, unit) has been observed to sometimes to fail to schedule TSGs
305 * containing re-enabled channels. Resubmitting the runlist 333 * containing re-enabled channels. Resubmitting the runlist
@@ -311,21 +339,6 @@ int __init nvdebug_init(void) {
311 "resubmit_runlist", 0222, dir, compat_ops(&resubmit_runlist_file_ops), 339 "resubmit_runlist", 0222, dir, compat_ops(&resubmit_runlist_file_ops),
312 (void*)device_id)) 340 (void*)device_id))
313 goto out_nomem; 341 goto out_nomem;
314 // Create file `/proc/gpu#/disable_channel`, world writable
315 if (!proc_create_data(
316 "disable_channel", 0222, dir, compat_ops(&disable_channel_file_ops),
317 (void*)device_id))
318 goto out_nomem;
319 // Create file `/proc/gpu#/enable_channel`, world writable
320 if (!proc_create_data(
321 "enable_channel", 0222, dir, compat_ops(&enable_channel_file_ops),
322 (void*)device_id))
323 goto out_nomem;
324 // Create file `/proc/gpu#/switch_to_tsg`, world writable
325 if (!proc_create_data(
326 "switch_to_tsg", 0222, dir, compat_ops(&switch_to_tsg_file_ops),
327 (void*)device_id))
328 goto out_nomem;
329 // Create file `/proc/gpu#/device_info`, world readable 342 // Create file `/proc/gpu#/device_info`, world readable
330 if (!proc_create_data( 343 if (!proc_create_data(
331 "device_info", 0444, dir, compat_ops(&device_info_file_ops), 344 "device_info", 0444, dir, compat_ops(&device_info_file_ops),