FAILED: patch "[PATCH] drm/gpusvm: Add timeslicing support to GPU SVM" failed to apply to 6.16-stable tree
Subsystems (4)
[email protected]
maintainerThe patch below does not apply to the 6.16-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.16.y
git checkout FETCH_HEAD
git cherry-pick -x 8dc1812b5b3a42311d28eb385eed88e2053ad3cb
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2025082118-unhook-drinking-9926@gregkh' --subject-prefix 'PATCH 6.16.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 8dc1812b5b3a42311d28eb385eed88e2053ad3cb Mon Sep 17 00:00:00 2001
From: Matthew Brost <[email protected]>
Date: Mon, 12 May 2025 06:54:57 -0700
Subject: [PATCH] drm/gpusvm: Add timeslicing support to GPU SVM
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.
Required for shared CPU and GPU atomics on certain devices.
drivers/gpu/drm/drm_gpusvm.c +9 -0
@@ -1783,6 +1783,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:
@@ -2003,6 +2005,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);
include/drm/drm_gpusvm.h +5 -0
@@ -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; };/**
@@ -295,6 +297,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
@@ -304,6 +308,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 ;