On 2019-03-07 10:15 a.m., Chunming Zhou wrote: > Signed-off-by: Chunming Zhou <david1.zhou@xxxxxxx> Please provide corresponding UMD patches showing how this is to be used. > @@ -229,6 +231,14 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data, > if (args->in.domains & ~AMDGPU_GEM_DOMAIN_MASK) > return -EINVAL; > > + /* check priority */ > + if (args->in.priority == 0) { Did you verify that this is 0 with old userspace compiled against struct drm_amdgpu_gem_create_in without the priority field? > + /* default is normal */ > + args->in.priority = TTM_BO_PRIORITY_NORMAL; > + } else if (args->in.priority > TTM_MAX_BO_PRIORITY) { > + args->in.priority = TTM_MAX_BO_PRIORITY; > + DRM_ERROR("priority specified from user space is over MAX priority\n"); This must be DRM_DEBUG, or buggy/malicious userspace can spam dmesg. > @@ -252,6 +262,7 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data, > > r = amdgpu_gem_object_create(adev, size, args->in.alignment, > (u32)(0xffffffff & args->in.domains), > + args->in.priority - 1, > flags, ttm_bo_type_device, resv, &gobj); It might be less confusing to subtract 1 after checking against TTM_MAX_BO_PRIORITY instead of here. Still kind of confusing though. How about this instead: Make the priority field of struct drm_amdgpu_gem_create_in signed. In amdgpu_gem_create_ioctl, clamp the priority to the supported range: args->in.priority += TTM_BO_PRIORITY_NORMAL; args->in.priority = max(args->in.priority, 0); args->in.priority = min(args->in.priority, TTM_BO_PRIORITY_NORMAL - 1); This way userspace doesn't need to do a weird mapping of the priority values (where 0 and 2 have the same meaning), and the range of supported priorities could at least theoretically be extended without breaking userspace. > @@ -304,6 +315,7 @@ int amdgpu_gem_userptr_ioctl(struct drm_device *dev, void *data, > > /* create a gem object to contain this object in */ > r = amdgpu_gem_object_create(adev, args->size, 0, AMDGPU_GEM_DOMAIN_CPU, > + TTM_BO_PRIORITY_NORMAL, > 0, ttm_bo_type_device, NULL, &gobj); Should the userptr ioctl also allow setting the priority? > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c > index fd9c4beeaaa4..c85304e03021 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c > @@ -494,8 +494,9 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev, > > bo->tbo.bdev = &adev->mman.bdev; > amdgpu_bo_placement_from_domain(bo, bp->domain); > + bo->tbo.priority = bp->priority; > if (bp->type == ttm_bo_type_kernel) > - bo->tbo.priority = 1; > + bo->tbo.priority = TTM_BO_PRIORITY_VERYHIGH; if (bp->type == ttm_bo_type_kernel) bo->tbo.priority = TTM_BO_PRIORITY_VERYHIGH; else bo->tbo.priority = bp->priority; would be clearer I think. -- Earthling Michel Dänzer | https://www.amd.com Libre software enthusiast | Mesa and X developer _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx