On Tue, Jul 12, 2022 at 12:28 PM <sunpeng.li@xxxxxxx> wrote: > > From: Leo Li <sunpeng.li@xxxxxxx> > > When pinning a buffer, we should check to see if there are any > additional restrictions imposed by bo->preferred_domains. This will > prevent the BO from being moved to an invalid domain when pinning. > > For example, this can happen if the user requests to create a BO in GTT > domain for display scanout. amdgpu_dm will allow pinning to either VRAM > or GTT domains, since DCN can scanout from either or. However, in > amdgpu_bo_pin_restricted(), pinning to VRAM is preferred if there is > adequate carveout. This can lead to pinning to VRAM despite the user > requesting GTT placement for the BO. > > v2: Allow the kernel to override the domain, which can happen when > exporting a BO to a V4L camera (for example). > > Signed-off-by: Leo Li <sunpeng.li@xxxxxxx> Reviewed-by: Alex Deucher <alexander.deucher@xxxxxxx> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c > index 8a7b0f6162da..bbd3b8b14cfb 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c > @@ -883,6 +883,10 @@ int amdgpu_bo_pin_restricted(struct amdgpu_bo *bo, u32 domain, > if (WARN_ON_ONCE(min_offset > max_offset)) > return -EINVAL; > > + /* Check domain to be pinned to against preferred domains */ > + if (bo->preferred_domains & domain) > + domain = bo->preferred_domains & domain; > + > /* A shared bo cannot be migrated to VRAM */ > if (bo->tbo.base.import_attach) { > if (domain & AMDGPU_GEM_DOMAIN_GTT) > -- > 2.37.0 >