History

drm/xe/uapi: Be more specific about the vm_bind prefetch region

Let's bring a bit of clarity on this 'region' field that is part of vm_bind operation struct. Rename and document to make it more than obvious that it is a region instance and not a mask and also that it should only be used with the prefetch operation itself.

Rodrigo Vivi committed 3 years ago

Commit aaa115f1 parent 4a349c82 files · +14 −9Browse files

Unified · Split

2 files
  1. drivers/gpu/drm/xe/xe_vm.c +8 −7
  2. include/uapi/drm/xe_drm.h +6 −2
drivers/gpu/drm/xe/xe_vm.c+8−7
@@ -2160,7 +2160,8 @@ static void print_op(struct xe_device *xe, struct drm_gpuva_op *op) · 2159 unmodified lines
2160static struct drm_gpuva_ops *2160static struct drm_gpuva_ops *
2161vm_bind_ioctl_ops_create(struct xe_vm *vm, struct xe_bo *bo,2161vm_bind_ioctl_ops_create(struct xe_vm *vm, struct xe_bo *bo,
2162 u64 bo_offset_or_userptr, u64 addr, u64 range,2162 u64 bo_offset_or_userptr, u64 addr, u64 range,
2163 u32 operation, u32 flags, u8 tile_mask, u32 region)2163 u32 operation, u32 flags, u8 tile_mask,
2164 u32 prefetch_region)
2164{2165{
2165 struct drm_gem_object *obj = bo ? &bo->ttm.base : NULL;2166 struct drm_gem_object *obj = bo ? &bo->ttm.base : NULL;
2166 struct drm_gpuva_ops *ops;2167 struct drm_gpuva_ops *ops;
@@ -2215,7 +2216,7 @@ vm_bind_ioctl_ops_create(struct xe_vm *vm, struct xe_bo *bo, · 48 unmodified lines
2215 struct xe_vma_op *op = gpuva_op_to_vma_op(__op);2216 struct xe_vma_op *op = gpuva_op_to_vma_op(__op);
2216 2217
2217 op->tile_mask = tile_mask;2218 op->tile_mask = tile_mask;
2218 op->prefetch.region = region;2219 op->prefetch.region = prefetch_region;
2219 }2220 }
2220 break;2221 break;
2221 case DRM_XE_VM_BIND_OP_UNMAP_ALL:2222 case DRM_XE_VM_BIND_OP_UNMAP_ALL:
@@ -2881,7 +2882,7 @@ static int vm_bind_ioctl_check_args(struct xe_device *xe, · 659 unmodified lines
2881 u32 flags = (*bind_ops)[i].flags;2882 u32 flags = (*bind_ops)[i].flags;
2882 u32 obj = (*bind_ops)[i].obj;2883 u32 obj = (*bind_ops)[i].obj;
2883 u64 obj_offset = (*bind_ops)[i].obj_offset;2884 u64 obj_offset = (*bind_ops)[i].obj_offset;
2884 u32 region = (*bind_ops)[i].region;2885 u32 prefetch_region = (*bind_ops)[i].prefetch_mem_region_instance;
2885 bool is_null = flags & DRM_XE_VM_BIND_FLAG_NULL;2886 bool is_null = flags & DRM_XE_VM_BIND_FLAG_NULL;
2886 2887
2887 if (i == 0) {2888 if (i == 0) {
@@ -2915,9 +2916,9 @@ static int vm_bind_ioctl_check_args(struct xe_device *xe, · 27 unmodified lines
2915 op == DRM_XE_VM_BIND_OP_MAP_USERPTR) ||2916 op == DRM_XE_VM_BIND_OP_MAP_USERPTR) ||
2916 XE_IOCTL_DBG(xe, obj &&2917 XE_IOCTL_DBG(xe, obj &&
2917 op == DRM_XE_VM_BIND_OP_PREFETCH) ||2918 op == DRM_XE_VM_BIND_OP_PREFETCH) ||
2918 XE_IOCTL_DBG(xe, region &&2919 XE_IOCTL_DBG(xe, prefetch_region &&
2919 op != DRM_XE_VM_BIND_OP_PREFETCH) ||2920 op != DRM_XE_VM_BIND_OP_PREFETCH) ||
2920 XE_IOCTL_DBG(xe, !(BIT(region) &2921 XE_IOCTL_DBG(xe, !(BIT(prefetch_region) &
2921 xe->info.mem_region_mask)) ||2922 xe->info.mem_region_mask)) ||
2922 XE_IOCTL_DBG(xe, obj &&2923 XE_IOCTL_DBG(xe, obj &&
2923 op == DRM_XE_VM_BIND_OP_UNMAP)) {2924 op == DRM_XE_VM_BIND_OP_UNMAP)) {
@@ -3099,11 +3100,11 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file) · 175 unmodified lines
3099 u32 flags = bind_ops[i].flags;3100 u32 flags = bind_ops[i].flags;
3100 u64 obj_offset = bind_ops[i].obj_offset;3101 u64 obj_offset = bind_ops[i].obj_offset;
3101 u8 tile_mask = bind_ops[i].tile_mask;3102 u8 tile_mask = bind_ops[i].tile_mask;
3102 u32 region = bind_ops[i].region;3103 u32 prefetch_region = bind_ops[i].prefetch_mem_region_instance;
3103 3104
3104 ops[i] = vm_bind_ioctl_ops_create(vm, bos[i], obj_offset,3105 ops[i] = vm_bind_ioctl_ops_create(vm, bos[i], obj_offset,
3105 addr, range, op, flags,3106 addr, range, op, flags,
3106 tile_mask, region);3107 tile_mask, prefetch_region);
3107 if (IS_ERR(ops[i])) {3108 if (IS_ERR(ops[i])) {
3108 err = PTR_ERR(ops[i]);3109 err = PTR_ERR(ops[i]);
3109 ops[i] = NULL;3110 ops[i] = NULL;
include/uapi/drm/xe_drm.h+6−2
@@ -673,8 +673,12 @@ struct drm_xe_vm_bind_op { · 672 unmodified lines
673 /** @flags: Bind flags */673 /** @flags: Bind flags */
674 __u32 flags;674 __u32 flags;
675 675
676 /** @mem_region: Memory region to prefetch VMA to, instance not a mask */676 /**
677 __u32 region;677 * @prefetch_mem_region_instance: Memory region to prefetch VMA to.
678 * It is a region instance, not a mask.
679 * To be used only with %DRM_XE_VM_BIND_OP_PREFETCH operation.
680 */
681 __u32 prefetch_mem_region_instance;
678 682
679 /** @reserved: Reserved */683 /** @reserved: Reserved */
680 __u64 reserved[2];684 __u64 reserved[2];