[Intel-xe] [PATCH v3 13/43] drm/xe/uapi: Separate bo_create placement from flags
Matthew Brost
matthew.brost at intel.com
Thu Nov 9 14:58:54 UTC 2023
On Thu, Nov 09, 2023 at 03:44:27PM +0000, Francois Dugast wrote:
> From: Rodrigo Vivi <rodrigo.vivi at intel.com>
>
> Although the flags are about the creation, the memory placement
> of the BO deserves a proper dedicated field in the uapi.
>
> Besides getting more clear, it also allows to remove the
> 'magic' shifts from the flags that was a concern during the
> uapi reviews.
>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
Reviewed-by: Matthew Brost <matthew.brost at intel.com>
> ---
> drivers/gpu/drm/xe/xe_bo.c | 15 +++++++--------
> include/uapi/drm/xe_drm.h | 12 ++++++------
> 2 files changed, 13 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
> index b955c89da42c..87971f4faa58 100644
> --- a/drivers/gpu/drm/xe/xe_bo.c
> +++ b/drivers/gpu/drm/xe/xe_bo.c
> @@ -1799,19 +1799,18 @@ int xe_gem_create_ioctl(struct drm_device *dev, void *data,
> u32 handle;
> int err;
>
> - if (XE_IOCTL_DBG(xe, args->extensions) || XE_IOCTL_DBG(xe, args->pad) ||
> + if (XE_IOCTL_DBG(xe, args->extensions) ||
> XE_IOCTL_DBG(xe, args->reserved[0] || args->reserved[1]))
> return -EINVAL;
>
> + /* at least one valid memory placement must be specified */
> + if (XE_IOCTL_DBG(xe, !(args->placement & xe->info.mem_region_mask)))
> + return -EINVAL;
> +
> if (XE_IOCTL_DBG(xe, args->flags &
> ~(DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING |
> DRM_XE_GEM_CREATE_FLAG_SCANOUT |
> - DRM_XE_GEM_CREATE_FLAG_NEEDS_VISIBLE_VRAM |
> - xe->info.mem_region_mask)))
> - return -EINVAL;
> -
> - /* at least one memory type must be specified */
> - if (XE_IOCTL_DBG(xe, !(args->flags & xe->info.mem_region_mask)))
> + DRM_XE_GEM_CREATE_FLAG_NEEDS_VISIBLE_VRAM)))
> return -EINVAL;
>
> if (XE_IOCTL_DBG(xe, args->handle))
> @@ -1832,7 +1831,7 @@ int xe_gem_create_ioctl(struct drm_device *dev, void *data,
> if (args->flags & DRM_XE_GEM_CREATE_FLAG_SCANOUT)
> bo_flags |= XE_BO_SCANOUT_BIT;
>
> - bo_flags |= args->flags << (ffs(XE_BO_CREATE_SYSTEM_BIT) - 1);
> + bo_flags |= args->placement << (ffs(XE_BO_CREATE_SYSTEM_BIT) - 1);
>
> if (args->flags & DRM_XE_GEM_CREATE_FLAG_NEEDS_VISIBLE_VRAM) {
> if (XE_IOCTL_DBG(xe, !(bo_flags & XE_BO_CREATE_VRAM_MASK)))
> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> index 2ed69b02a2e8..3685eeff4b8d 100644
> --- a/include/uapi/drm/xe_drm.h
> +++ b/include/uapi/drm/xe_drm.h
> @@ -622,9 +622,12 @@ struct drm_xe_gem_create {
> */
> __u64 size;
>
> -#define DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING (0x1 << 24)
> -#define DRM_XE_GEM_CREATE_FLAG_SCANOUT (0x1 << 25)
> -#define DRM_XE_GEM_CREATE_FLAG_NEEDS_VISIBLE_VRAM (0x1 << 26)
> + /** @placement: A mask of memory instances of where BO can be placed. */
> + __u32 placement;
> +
> +#define DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING (1 << 0)
> +#define DRM_XE_GEM_CREATE_FLAG_SCANOUT (1 << 1)
> +#define DRM_XE_GEM_CREATE_FLAG_NEEDS_VISIBLE_VRAM (1 << 2)
> /**
> * @flags: Flags, currently a mask of memory instances of where BO can
> * be placed
> @@ -648,9 +651,6 @@ struct drm_xe_gem_create {
> */
> __u32 handle;
>
> - /** @pad: MBZ */
> - __u32 pad;
> -
> /** @reserved: Reserved */
> __u64 reserved[2];
> };
> --
> 2.34.1
>
More information about the Intel-xe
mailing list