Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: "Ghimiray, Himal Prasad" <himal.prasad.ghimiray@intel.com>
To: Matthew Brost <matthew.brost@intel.com>
Cc: <intel-xe@lists.freedesktop.org>, <thomas.hellstrom@linux.intel.com>
Subject: Re: [PATCH v5 17/20] drm/gpusvm: Introduce drm_gpusvm_range_find_or_insert_start() function
Date: Wed, 30 Apr 2025 09:10:33 +0530	[thread overview]
Message-ID: <3b35e81c-d043-4852-bd09-3ded44c28780@intel.com> (raw)
In-Reply-To: <aBEb3eB36nXXLIds@lstrano-desk.jf.intel.com>



On 30-04-2025 00:05, Matthew Brost wrote:
> On Tue, Apr 29, 2025 at 04:12:30PM +0530, Himal Prasad Ghimiray wrote:
>> The drm_gpusvm_range_find_or_insert_start() function is used to
>> determine the starting address of a CPU VMA within a specified user
>> range. If the range does not contain any VMA, the function returns
>> ULONG_MAX.
>>
>> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
>> ---
>>   drivers/gpu/drm/drm_gpusvm.c | 29 +++++++++++++++++++++++++++++
>>   include/drm/drm_gpusvm.h     |  5 +++++
>>   2 files changed, 34 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/drm_gpusvm.c b/drivers/gpu/drm/drm_gpusvm.c
>> index 40a56f38ff8e..bb7c589b8d15 100644
>> --- a/drivers/gpu/drm/drm_gpusvm.c
>> +++ b/drivers/gpu/drm/drm_gpusvm.c
>> @@ -980,6 +980,35 @@ static void drm_gpusvm_driver_lock_held(struct drm_gpusvm *gpusvm)
>>   }
>>   #endif
>>   
>> +/**
>> + * drm_gpusvm_range_find_or_insert_start() - Find or insert start address for range
>> + * @gpusvm: Pointer to the GPU SVM structure
>> + * @start: The inclusive start user address.
>> + * @end: The exclusive end user address.
>> + *
>> + * Returns: The start address of first VMA within the provided range,
>> + * ULONG_MAX otherwise. Assumes start_addr < end_addr.
>> + */
>> +unsigned long
>> +drm_gpusvm_range_find_or_insert_start(struct drm_gpusvm *gpusvm,
>> +				      unsigned long start,
>> +				      unsigned long end)
> 
> We don't really do an insertion here, so maybe:
> 
> s/drm_gpusvm_range_find_or_insert_start/drm_gpusvm_find_vma_start

Sure.

> 
>> +{
>> +	struct mm_struct *mm = gpusvm->mm;
>> +	struct vm_area_struct *vma;
>> +	unsigned long addr = ULONG_MAX;

Does this return in case of no vma found makes sense to you ?
Initially I thought of returning 0, but wasn't sure whether under any 
scenario cpu vma can start at 0 or not.

>> +
> 
> Hmm, do you think we need a mmget here? I'd expect this be called from a
> user context where we'd have a MM ref but maybe to be safe add a
> mmget/put?
Yup, mmget/mmput makes it more reliable. Will add it

> 
> Matt
> 
>> +	mmap_read_lock(mm);
>> +
>> +	vma = find_vma_intersection(mm, start, end);
>> +	if (vma)
>> +		addr =  vma->vm_start;
>> +
>> +	mmap_read_unlock(mm);
>> +	return addr;
>> +}
>> +EXPORT_SYMBOL_GPL(drm_gpusvm_range_find_or_insert_start);
>> +
>>   /**
>>    * drm_gpusvm_range_find_or_insert() - Find or insert GPU SVM range
>>    * @gpusvm: Pointer to the GPU SVM structure
>> diff --git a/include/drm/drm_gpusvm.h b/include/drm/drm_gpusvm.h
>> index cce217bc136f..b0e9ee5c6226 100644
>> --- a/include/drm/drm_gpusvm.h
>> +++ b/include/drm/drm_gpusvm.h
>> @@ -315,6 +315,11 @@ void drm_gpusvm_fini(struct drm_gpusvm *gpusvm);
>>   
>>   void drm_gpusvm_free(struct drm_gpusvm *gpusvm);
>>   
>> +unsigned long
>> +drm_gpusvm_range_find_or_insert_start(struct drm_gpusvm *gpusvm,
>> +				      unsigned long start,
>> +				      unsigned long end);
>> +
>>   struct drm_gpusvm_range *
>>   drm_gpusvm_range_find_or_insert(struct drm_gpusvm *gpusvm,
>>   				unsigned long fault_addr,
>> -- 
>> 2.34.1
>>


  reply	other threads:[~2025-04-30  3:41 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 ` [PATCH v5 03/20] drm/gpusvm: Add timeslicing support to GPU SVM Himal Prasad Ghimiray
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 [this message]
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=3b35e81c-d043-4852-bd09-3ded44c28780@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox