Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/xe: Add debugfs knobs to control long running workload timeslicing

Add debugfs knobs to control timeslicing for long-running workloads,
allowing quick tuning of values when running benchmarks.

Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Link: https://patch.msgid.link/20251212182847.1683222-4-matthew.brost@intel.com

+83 -2
+74
drivers/gpu/drm/xe/xe_debugfs.c
··· 361 361 .write = atomic_svm_timeslice_ms_set, 362 362 }; 363 363 364 + static ssize_t min_run_period_lr_ms_show(struct file *f, char __user *ubuf, 365 + size_t size, loff_t *pos) 366 + { 367 + struct xe_device *xe = file_inode(f)->i_private; 368 + char buf[32]; 369 + int len = 0; 370 + 371 + len = scnprintf(buf, sizeof(buf), "%d\n", xe->min_run_period_lr_ms); 372 + 373 + return simple_read_from_buffer(ubuf, size, pos, buf, len); 374 + } 375 + 376 + static ssize_t min_run_period_lr_ms_set(struct file *f, const char __user *ubuf, 377 + size_t size, loff_t *pos) 378 + { 379 + struct xe_device *xe = file_inode(f)->i_private; 380 + u32 min_run_period_lr_ms; 381 + ssize_t ret; 382 + 383 + ret = kstrtouint_from_user(ubuf, size, 0, &min_run_period_lr_ms); 384 + if (ret) 385 + return ret; 386 + 387 + xe->min_run_period_lr_ms = min_run_period_lr_ms; 388 + 389 + return size; 390 + } 391 + 392 + static const struct file_operations min_run_period_lr_ms_fops = { 393 + .owner = THIS_MODULE, 394 + .read = min_run_period_lr_ms_show, 395 + .write = min_run_period_lr_ms_set, 396 + }; 397 + 398 + static ssize_t min_run_period_pf_ms_show(struct file *f, char __user *ubuf, 399 + size_t size, loff_t *pos) 400 + { 401 + struct xe_device *xe = file_inode(f)->i_private; 402 + char buf[32]; 403 + int len = 0; 404 + 405 + len = scnprintf(buf, sizeof(buf), "%d\n", xe->min_run_period_pf_ms); 406 + 407 + return simple_read_from_buffer(ubuf, size, pos, buf, len); 408 + } 409 + 410 + static ssize_t min_run_period_pf_ms_set(struct file *f, const char __user *ubuf, 411 + size_t size, loff_t *pos) 412 + { 413 + struct xe_device *xe = file_inode(f)->i_private; 414 + u32 min_run_period_pf_ms; 415 + ssize_t ret; 416 + 417 + ret = kstrtouint_from_user(ubuf, size, 0, &min_run_period_pf_ms); 418 + if (ret) 419 + return ret; 420 + 421 + xe->min_run_period_pf_ms = min_run_period_pf_ms; 422 + 423 + return size; 424 + } 425 + 426 + static const struct file_operations min_run_period_pf_ms_fops = { 427 + .owner = THIS_MODULE, 428 + .read = min_run_period_pf_ms_show, 429 + .write = min_run_period_pf_ms_set, 430 + }; 431 + 364 432 static ssize_t disable_late_binding_show(struct file *f, char __user *ubuf, 365 433 size_t size, loff_t *pos) 366 434 { ··· 495 427 496 428 debugfs_create_file("atomic_svm_timeslice_ms", 0600, root, xe, 497 429 &atomic_svm_timeslice_ms_fops); 430 + 431 + debugfs_create_file("min_run_period_lr_ms", 0600, root, xe, 432 + &min_run_period_lr_ms_fops); 433 + 434 + debugfs_create_file("min_run_period_pf_ms", 0600, root, xe, 435 + &min_run_period_pf_ms_fops); 498 436 499 437 debugfs_create_file("disable_late_binding", 0600, root, xe, 500 438 &disable_late_binding_fops);
+1
drivers/gpu/drm/xe/xe_device.c
··· 460 460 xe->info.revid = pdev->revision; 461 461 xe->info.force_execlist = xe_modparam.force_execlist; 462 462 xe->atomic_svm_timeslice_ms = 5; 463 + xe->min_run_period_lr_ms = 5; 463 464 464 465 err = xe_irq_init(xe); 465 466 if (err)
+6
drivers/gpu/drm/xe/xe_device_types.h
··· 627 627 /** @atomic_svm_timeslice_ms: Atomic SVM fault timeslice MS */ 628 628 u32 atomic_svm_timeslice_ms; 629 629 630 + /** @min_run_period_lr_ms: LR VM (preempt fence mode) timeslice */ 631 + u32 min_run_period_lr_ms; 632 + 633 + /** @min_run_period_pf_ms: LR VM (page fault mode) timeslice */ 634 + u32 min_run_period_pf_ms; 635 + 630 636 #ifdef TEST_VM_OPS_ERROR 631 637 /** 632 638 * @vm_inject_error_position: inject errors at different places in VM
+2 -2
drivers/gpu/drm/xe/xe_vm.c
··· 1509 1509 1510 1510 INIT_LIST_HEAD(&vm->preempt.exec_queues); 1511 1511 if (flags & XE_VM_FLAG_FAULT_MODE) 1512 - vm->preempt.min_run_period_ms = 0; 1512 + vm->preempt.min_run_period_ms = xe->min_run_period_pf_ms; 1513 1513 else 1514 - vm->preempt.min_run_period_ms = 5; 1514 + vm->preempt.min_run_period_ms = xe->min_run_period_lr_ms; 1515 1515 1516 1516 for_each_tile(tile, xe, id) 1517 1517 xe_range_fence_tree_init(&vm->rftree[id]);