Am 18.04.2018 um 04:19 schrieb Chunming Zhou: > When GEM needs to fallback to GTT for VRAM BOs we still want the > preferred domain to be untouched so that the BO has a cance to move back > to VRAM in the future. > > Change-Id: I8cfdf3f30532f7e5d80b8e4266b7800211de2f0b > Signed-off-by: Chunming Zhou <david1.zhou at amd.com> Reviewed-by: Christian König <christian.koenig at amd.com> for the whole series. > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 1 + > drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 15 +++++++++------ > drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 1 + > 3 files changed, 11 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c > index 1200c5ba37da..ff606ce88837 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c > @@ -62,6 +62,7 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size, > bp.byte_align = alignment; > bp.type = type; > bp.resv = resv; > + bp.preferred_domain = initial_domain; > retry: > bp.flags = flags; > bp.domain = initial_domain; > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c > index cac65e32a0b9..9258f0694922 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c > @@ -360,6 +360,7 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev, > }; > struct amdgpu_bo *bo; > unsigned long page_align, size = bp->size; > + u32 preferred_domains; > size_t acc_size; > int r; > > @@ -380,12 +381,14 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev, > drm_gem_private_object_init(adev->ddev, &bo->gem_base, size); > INIT_LIST_HEAD(&bo->shadow_list); > INIT_LIST_HEAD(&bo->va); > - bo->preferred_domains = bp->domain & (AMDGPU_GEM_DOMAIN_VRAM | > - AMDGPU_GEM_DOMAIN_GTT | > - AMDGPU_GEM_DOMAIN_CPU | > - AMDGPU_GEM_DOMAIN_GDS | > - AMDGPU_GEM_DOMAIN_GWS | > - AMDGPU_GEM_DOMAIN_OA); > + preferred_domains = bp->preferred_domain ? bp->preferred_domain : > + bp->domain; > + bo->preferred_domains = preferred_domains & (AMDGPU_GEM_DOMAIN_VRAM | > + AMDGPU_GEM_DOMAIN_GTT | > + AMDGPU_GEM_DOMAIN_CPU | > + AMDGPU_GEM_DOMAIN_GDS | > + AMDGPU_GEM_DOMAIN_GWS | > + AMDGPU_GEM_DOMAIN_OA); > bo->allowed_domains = bo->preferred_domains; > if (bp->type != ttm_bo_type_kernel && > bo->allowed_domains == AMDGPU_GEM_DOMAIN_VRAM) > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h > index e9a21d991e77..540e03fa159f 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h > @@ -37,6 +37,7 @@ struct amdgpu_bo_param { > unsigned long size; > int byte_align; > u32 domain; > + u32 preferred_domain; > u64 flags; > enum ttm_bo_type type; > struct reservation_object *resv;