On Fri, May 18, 2018 at 2:22 PM, Samuel Li <samuel.li at amd.com> wrote: > > > On 2018-05-18 04:21 AM, Michel Dänzer wrote: >> On 2018-05-17 06:55 PM, Alex Deucher wrote: >>> If the pin domain is set to GTT | VRAM, look at the preferred domains >>> for the bo and respect that if it's been set explicitly. >>> >>> Signed-off-by: Alex Deucher <alexander.deucher at amd.com> >>> --- >>> drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 9 +++++++-- >>> 1 file changed, 7 insertions(+), 2 deletions(-) >>> >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c >>> index 6a9e46ae7f0a..16192f17653e 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c >>> @@ -704,9 +704,14 @@ int amdgpu_bo_pin_restricted(struct amdgpu_bo *bo, u32 domain, >>> * See function amdgpu_display_supported_domains() >>> */ >>> if (domain == (AMDGPU_GEM_DOMAIN_VRAM | AMDGPU_GEM_DOMAIN_GTT)) { >>> - domain = AMDGPU_GEM_DOMAIN_VRAM; >>> - if (adev->gmc.real_vram_size <= AMDGPU_SG_THRESHOLD) >>> + if (bo->preferred_domains == AMDGPU_GEM_DOMAIN_VRAM) >>> + domain = AMDGPU_GEM_DOMAIN_VRAM; /* if user really wants vram, respect it */ >>> + else if (bo->preferred_domains == AMDGPU_GEM_DOMAIN_GTT) >>> + domain = AMDGPU_GEM_DOMAIN_GTT; /* if user really wants gtt, respect it */ >> >> I'd spell VRAM and GTT in capital letters in the comments. >> >> >>> + else if (adev->gmc.real_vram_size <= AMDGPU_SG_THRESHOLD) >>> domain = AMDGPU_GEM_DOMAIN_GTT; >>> + else >>> + domain = AMDGPU_GEM_DOMAIN_VRAM; >>> } >> >> Is everything in place to deal with any issues that might occur when >> flipping between buffers in VRAM and GTT? >> > Besides this question, I am also wondering how to deal with the first display buffer created in kernel at amdgpufb_create_pinned_object()? amdgpufb_create_pinned_object() calls amdgpu_display_supported_domains() for the initial domain and amdgpu_gem_object_create() uses that for the preferred domain so it won't change the behavior there. Alex