Re: [RFC 13/29] drm/gpuvm: Introduce MADVISE Operations

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



(Cc: dri-devel@xxxxxxxxxxxxxxxxxxxxx, Boris)

Hi Himal,

Please make sure to copy in dri-devel for such patches.

On Fri, Mar 14, 2025 at 01:32:10PM +0530, Himal Prasad Ghimiray wrote:
> Introduce MADVISE operations that do not unmap the GPU VMA. These
> operations split VMAs if the start or end addresses fall within existing
> VMAs. The operations can create up to 2 REMAPS and 2 MAPs.

Can you please add some more motivation details for this patch? What exactly is
it used for?

> 
> If the input range is within the existing range, it creates REMAP:UNMAP,
> REMAP:PREV, REMAP:NEXT, and MAP operations for the input range.
>   Example:
>   Input Range: 0x00007f0a54000000 to 0x00007f0a54400000
>   GPU VMA: 0x0000000000000000 to 0x0000800000000000
>   Operations Result:
>   - REMAP:UNMAP: addr=0x0000000000000000, range=0x0000800000000000
>   - REMAP:PREV: addr=0x0000000000000000, range=0x00007f0a54000000
>   - REMAP:NEXT: addr=0x00007f0a54400000, range=0x000000f5abc00000
>   - MAP: addr=0x00007f0a54000000, range=0x0000000000400000

This would be much easier to read if you'd pick some more human readable
numbers.

> 
> If the input range starts at the beginning of one GPU VMA and ends at
> the end of another VMA, covering multiple VMAs, the operations do nothing.
>   Example:
>   Input Range: 0x00007fc898800000 to 0x00007fc899000000
>   GPU VMAs:
>   - 0x0000000000000000 to 0x00007fc898800000
>   - 0x00007fc898800000 to 0x00007fc898a00000
>   - 0x00007fc898a00000 to 0x00007fc898c00000
>   - 0x00007fc898c00000 to 0x00007fc899000000
>   - 0x00007fc899000000 to 0x00007fc899200000
>   Operations Result: None

Same here.

> 
> Cc: Danilo Krummrich <dakr@xxxxxxxxxx>
> Cc: Matthew Brost <matthew.brost@xxxxxxxxx>
> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@xxxxxxxxx>
> ---
>  drivers/gpu/drm/drm_gpuvm.c | 175 +++++++++++++++++++++++++++++++++++-
>  include/drm/drm_gpuvm.h     |   6 ++
>  2 files changed, 180 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/drm_gpuvm.c b/drivers/gpu/drm/drm_gpuvm.c
> index f9eb56f24bef..904a26641b21 100644
> --- a/drivers/gpu/drm/drm_gpuvm.c
> +++ b/drivers/gpu/drm/drm_gpuvm.c
> @@ -2230,7 +2230,7 @@ __drm_gpuvm_sm_map(struct drm_gpuvm *gpuvm,
>  				ret = op_remap_cb(ops, priv, NULL, &n, &u);
>  				if (ret)
>  					return ret;
> -				break;
> +				return 0;
>  			}
>  		}
>  	}
> @@ -2240,6 +2240,143 @@ __drm_gpuvm_sm_map(struct drm_gpuvm *gpuvm,
>  			 req_obj, req_offset);
>  }
>  
> +static int
> +__drm_gpuvm_skip_split_map(struct drm_gpuvm *gpuvm,
> +			   const struct drm_gpuvm_ops *ops, void *priv,
> +			   u64 req_addr, u64 req_range,
> +			   bool skip_gem_obj_va, u64 req_offset)

This looks like a full copy of __drm_gpuvm_sm_map(). I think you should extend
__drm_gpuvm_sm_map() instead and add an optional flags parameter, e.g.

	enum drm_gpuvm_madvise_flags {
		DRM_GPUVM_SKIP_GEM_OBJ_VA = BIT(0),
	}

Not sure whether "SKIP_GEM_OBJ_VA" is a good name, but I haven't gone through
this to such extend that I could propose something better.

> +struct drm_gpuva_ops *
> +drm_gpuvm_madvise_ops_create(struct drm_gpuvm *gpuvm,
> +			     u64 req_addr, u64 req_range,
> +			     bool skip_gem_obj_va, u64 req_offset)

Same here, I don't think we need a new function for this, but just the
corresponding flags argument to the existing one.

Besides that, when adding new functionality, please extend the documentation of
drm_gpuvm accordingly. It's fine you didn't do so for the RFC of course. :)



[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux