[PATCH] drm/amdgpu: try allowed domain when pin framebuffer failed
Alex Deucher
alexdeucher at gmail.com
Wed Dec 7 16:08:32 UTC 2022
On Wed, Dec 7, 2022 at 10:52 AM Christian König
<ckoenig.leichtzumerken at gmail.com> wrote:
>
> Am 07.12.22 um 16:38 schrieb Alex Deucher:
> > On Wed, Dec 7, 2022 at 10:23 AM Christian König
> > <ckoenig.leichtzumerken at gmail.com> wrote:
> >> I would go a step further and just allow GTT domain on ASICs != CARRIZO
> >> | STONEY.
> >>
> >> I can't see a good reason we should still have any limitation here, VRAM
> >> doesn't have any advantage any more as far as I know.
> > Well, if VRAM is available we want to make sure someone uses it
> > otherwise it's just wasted.
>
> Well it still gets used when it's free. So now problem at all here.
>
> We should just not force anything into VRAM or GTT any more if it's
> technically not necessary.
So just this?
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
index 919bbea2e3ac..8e8f07fa7a93 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
@@ -1506,7 +1506,7 @@ u64 amdgpu_bo_gpu_offset_no_check(struct amdgpu_bo *bo)
uint32_t amdgpu_bo_get_preferred_domain(struct amdgpu_device *adev,
uint32_t domain)
{
- if (domain == (AMDGPU_GEM_DOMAIN_VRAM | AMDGPU_GEM_DOMAIN_GTT)) {
+ if ((adev->asic_type == CHIP_CARRIZO) || (adev->asic_type ==
CHIP_STONEY)) {
domain = AMDGPU_GEM_DOMAIN_VRAM;
if (adev->gmc.real_vram_size <= AMDGPU_SG_THRESHOLD)
domain = AMDGPU_GEM_DOMAIN_GTT;
>
> Christian.
>
> >
> > Alex
> >
> >
> >> Christian.
> >>
> >> Am 07.12.22 um 16:10 schrieb Alex Deucher:
> >>> Does this patch fix the problem?
> >>>
> >>> Alex
> >>>
> >>> On Wed, Dec 7, 2022 at 2:27 AM Zhang, Jesse(Jie) <Jesse.Zhang at amd.com> wrote:
> >>>> [AMD Official Use Only - General]
> >>>>
> >>>>
> >>>> drm/amdgpu: try allowed domain when pin framebuffer failed.
> >>>>
> >>>>
> >>>>
> >>>> [WHY&HOW]
> >>>>
> >>>>
> >>>>
> >>>> in some scenarios, the allocate memory often failed. such as do hot plug or play games.
> >>>>
> >>>> so we can try allowed domain, if the preferred domain cannot allocate memory.
> >>>>
> >>>>
> >>>>
> >>>> Signed-off-by: jie1zhan jesse.zhang at amd.com
> >>>>
> >>>> Change-Id: I4b62e2ff072d02c515f901000a5789339d481273
> >>>>
> >>>>
> >>>>
> >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> >>>>
> >>>> index 1ae0c8723348..05fcaf7f9d92 100644
> >>>>
> >>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> >>>>
> >>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> >>>>
> >>>> @@ -39,6 +39,7 @@
> >>>>
> >>>> #include "amdgpu.h"
> >>>>
> >>>> #include "amdgpu_trace.h"
> >>>>
> >>>> #include "amdgpu_amdkfd.h"
> >>>>
> >>>> +#include "amdgpu_display.h"
> >>>>
> >>>>
> >>>>
> >>>> /**
> >>>>
> >>>> * DOC: amdgpu_object
> >>>>
> >>>> @@ -942,8 +943,14 @@ int amdgpu_bo_pin_restricted(struct amdgpu_bo *bo, u32 domain,
> >>>>
> >>>> bo->placements[i].lpfn = lpfn;
> >>>>
> >>>> }
> >>>>
> >>>>
> >>>>
> >>>> + retry:
> >>>>
> >>>> r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx);
> >>>>
> >>>> if (unlikely(r)) {
> >>>>
> >>>> + //try allowed domain when pin failed. just a workaround.
> >>>>
> >>>> + if (unlikely(r == -ENOMEM) && domain != bo->allowed_domains) {
> >>>>
> >>>> + amdgpu_bo_placement_from_domain(bo, bo->allowed_domains);
> >>>>
> >>>> + goto retry;
> >>>>
> >>>> + }
> >>>>
> >>>> dev_err(adev->dev, "%p pin failed\n", bo);
> >>>>
> >>>> goto error;
> >>>>
> >>>> }
>
More information about the amd-gfx
mailing list