Commit 6b8c1edc authored by Rodrigo Vivi's avatar Rodrigo Vivi
Browse files

drm/xe/uapi: Separate bo_create placement from flags



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: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: default avatarFrancois Dugast <francois.dugast@intel.com>
Reviewed-by: default avatarMatthew Brost <matthew.brost@intel.com>
Reviewed-by: default avatarJosé Roberto de Souza <jose.souza@intel.com>
parent c4ad3710
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -1890,15 +1890,15 @@ int xe_gem_create_ioctl(struct drm_device *dev, void *data,
	    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) ||
			 !args->placement))
		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))
@@ -1920,7 +1920,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)))
+6 −3
Original line number Diff line number Diff line
@@ -500,8 +500,11 @@ 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)
	/** @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)
/*
 * When using VRAM as a possible placement, ensure that the corresponding VRAM
 * allocation will always use the CPU accessible part of VRAM. This is important
@@ -517,7 +520,7 @@ struct drm_xe_gem_create {
 * display surfaces, therefore the kernel requires setting this flag for such
 * objects, otherwise an error is thrown on small-bar systems.
 */
#define DRM_XE_GEM_CREATE_FLAG_NEEDS_VISIBLE_VRAM	(0x1 << 26)
#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