[PATCH] drm/amdgpu: consider user preference when pinning for SG display

Alex Deucher alexdeucher at gmail.com
Fri May 18 19:16:41 UTC 2018


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


More information about the amd-gfx mailing list