From: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
To: intel-xe@lists.freedesktop.org
Cc: matthew.brost@intel.com, thomas.hellstrom@linux.intel.com,
Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Subject: [PATCH v5 03/20] drm/gpusvm: Add timeslicing support to GPU SVM
Date: Tue, 29 Apr 2025 16:12:16 +0530 [thread overview]
Message-ID: <20250429104233.215602-4-himal.prasad.ghimiray@intel.com> (raw)
In-Reply-To: <20250429104233.215602-1-himal.prasad.ghimiray@intel.com>
From: Matthew Brost <matthew.brost@intel.com>
Add timeslicing support to GPU SVM which will guarantee the GPU a
minimum execution time on piece of physical memory before migration back
to CPU. Intended to implement strict migration policies which require
memory to be in a certain placement for correct execution.
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/drm_gpusvm.c | 9 +++++++++
include/drm/drm_gpusvm.h | 5 +++++
2 files changed, 14 insertions(+)
diff --git a/drivers/gpu/drm/drm_gpusvm.c b/drivers/gpu/drm/drm_gpusvm.c
index edf107809d20..40a56f38ff8e 100644
--- a/drivers/gpu/drm/drm_gpusvm.c
+++ b/drivers/gpu/drm/drm_gpusvm.c
@@ -1770,6 +1770,8 @@ int drm_gpusvm_migrate_to_devmem(struct drm_gpusvm *gpusvm,
goto err_finalize;
/* Upon success bind devmem allocation to range and zdd */
+ devmem_allocation->timeslice_expiration = get_jiffies_64() +
+ msecs_to_jiffies(ctx->timeslice_ms);
zdd->devmem_allocation = devmem_allocation; /* Owns ref */
err_finalize:
@@ -1990,6 +1992,13 @@ static int __drm_gpusvm_migrate_to_ram(struct vm_area_struct *vas,
void *buf;
int i, err = 0;
+ if (page) {
+ zdd = page->zone_device_data;
+ if (time_before64(get_jiffies_64(),
+ zdd->devmem_allocation->timeslice_expiration))
+ return 0;
+ }
+
start = ALIGN_DOWN(fault_addr, size);
end = ALIGN(fault_addr + 1, size);
diff --git a/include/drm/drm_gpusvm.h b/include/drm/drm_gpusvm.h
index 9fd25fc880a4..cce217bc136f 100644
--- a/include/drm/drm_gpusvm.h
+++ b/include/drm/drm_gpusvm.h
@@ -89,6 +89,7 @@ struct drm_gpusvm_devmem_ops {
* @ops: Pointer to the operations structure for GPU SVM device memory
* @dpagemap: The struct drm_pagemap of the pages this allocation belongs to.
* @size: Size of device memory allocation
+ * @timeslice_expiration: Timeslice expiration in jiffies
*/
struct drm_gpusvm_devmem {
struct device *dev;
@@ -97,6 +98,7 @@ struct drm_gpusvm_devmem {
const struct drm_gpusvm_devmem_ops *ops;
struct drm_pagemap *dpagemap;
size_t size;
+ u64 timeslice_expiration;
};
/**
@@ -283,6 +285,8 @@ struct drm_gpusvm {
* @check_pages_threshold: Check CPU pages for present if chunk is less than or
* equal to threshold. If not present, reduce chunk
* size.
+ * @timeslice_ms: The timeslice MS which in minimum time a piece of memory
+ * remains with either exclusive GPU or CPU access.
* @in_notifier: entering from a MMU notifier
* @read_only: operating on read-only memory
* @devmem_possible: possible to use device memory
@@ -292,6 +296,7 @@ struct drm_gpusvm {
*/
struct drm_gpusvm_ctx {
unsigned long check_pages_threshold;
+ unsigned long timeslice_ms;
unsigned int in_notifier :1;
unsigned int read_only :1;
unsigned int devmem_possible :1;
--
2.34.1
next prev parent reply other threads:[~2025-04-29 10:17 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-29 10:42 [PATCH v5 00/20] Prefetch Support for svm ranges Himal Prasad Ghimiray
2025-04-29 10:36 ` ✓ CI.Patch_applied: success for Prefetch Support for svm ranges (rev4) Patchwork
2025-04-29 10:37 ` ✗ CI.checkpatch: warning " Patchwork
2025-04-29 10:38 ` ✓ CI.KUnit: success " Patchwork
2025-04-29 10:42 ` [PATCH v5 01/20] drm/gpusvm: Introduce devmem_only flag for allocation Himal Prasad Ghimiray
2025-04-29 10:42 ` [PATCH v5 02/20] drm/xe: Strict migration policy for atomic SVM faults Himal Prasad Ghimiray
2025-04-29 10:42 ` Himal Prasad Ghimiray [this message]
2025-04-29 10:42 ` [PATCH v5 04/20] drm/xe: Timeslice GPU on atomic SVM fault Himal Prasad Ghimiray
2025-04-29 10:42 ` [PATCH v5 05/20] drm/xe: Add atomic_svm_timeslice_ms debugfs entry Himal Prasad Ghimiray
2025-04-29 10:42 ` [PATCH v5 06/20] drm/xe: Introduce xe_vma_op_prefetch_range struct for prefetch of ranges Himal Prasad Ghimiray
2025-04-29 10:42 ` [PATCH v5 07/20] drm/xe: Make xe_svm_alloc_vram public Himal Prasad Ghimiray
2025-04-29 10:42 ` [PATCH v5 08/20] drm/xe/svm: Helper to add tile masks to svm ranges Himal Prasad Ghimiray
2025-04-29 10:42 ` [PATCH v5 09/20] drm/xe/svm: Make to_xe_range a public function Himal Prasad Ghimiray
2025-04-29 10:42 ` [PATCH v5 10/20] drm/xe/svm: Make xe_svm_range_* end/start/size public Himal Prasad Ghimiray
2025-04-29 10:42 ` [PATCH v5 11/20] drm/xe/vm: Update xe_vma_ops_incr_pt_update_ops to take an increment value Himal Prasad Ghimiray
2025-04-29 10:42 ` [PATCH v5 12/20] drm/xe/vm: Add an identifier in xe_vma_ops for svm prefetch Himal Prasad Ghimiray
2025-04-29 10:42 ` [PATCH v5 13/20] drm/xe: Rename lookup_vma function to xe_find_vma_by_addr Himal Prasad Ghimiray
2025-04-29 10:42 ` [PATCH v5 14/20] drm/xe/svm: Refactor usage of drm_gpusvm* function in xe_svm Himal Prasad Ghimiray
2025-04-29 10:42 ` [PATCH v5 15/20] drm/xe/svm: Make xe_svm_range_needs_migrate_to_vram() public Himal Prasad Ghimiray
2025-04-29 10:42 ` [PATCH v5 16/20] drm/xe/svm: Add xe_svm_range_validate_and_evict() function Himal Prasad Ghimiray
2025-04-29 18:42 ` Matthew Brost
[not found] ` <9f3f41e3-f3d0-49d6-ad3f-e725d86cd210@intel.com>
2025-04-30 3:45 ` Ghimiray, Himal Prasad
2025-04-30 3:49 ` Matthew Brost
2025-04-29 10:42 ` [PATCH v5 17/20] drm/gpusvm: Introduce drm_gpusvm_range_find_or_insert_start() function Himal Prasad Ghimiray
2025-04-29 18:35 ` Matthew Brost
2025-04-30 3:40 ` Ghimiray, Himal Prasad
2025-04-30 4:21 ` Matthew Brost
2025-04-29 10:42 ` [PATCH v5 18/20] drm/xe/svm: Add xe_svm_range_find_or_insert_start() Himal Prasad Ghimiray
2025-04-29 10:42 ` [PATCH v5 19/20] drm/xe/svm: Implement prefetch support for SVM ranges Himal Prasad Ghimiray
2025-04-29 10:42 ` [PATCH v5 20/20] drm/xe/vm: Add debug prints for SVM range prefetch Himal Prasad Ghimiray
2025-04-29 10:46 ` ✓ CI.Build: success for Prefetch Support for svm ranges (rev4) Patchwork
2025-04-29 10:49 ` ✓ CI.Hooks: " Patchwork
2025-04-29 10:51 ` ✓ CI.checksparse: " Patchwork
2025-04-29 12:47 ` ✗ Xe.CI.Full: failure " Patchwork
2025-05-06 7:14 ` ✗ Xe.CI.BAT: " Patchwork
2025-05-06 7:51 ` ✓ Xe.CI.BAT: success " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250429104233.215602-4-himal.prasad.ghimiray@intel.com \
--to=himal.prasad.ghimiray@intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=matthew.brost@intel.com \
--cc=thomas.hellstrom@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.