aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3990-drm-amdgpu-Don-t-change-preferred-domian-when-fallba.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3990-drm-amdgpu-Don-t-change-preferred-domian-when-fallba.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3990-drm-amdgpu-Don-t-change-preferred-domian-when-fallba.patch134
1 files changed, 134 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3990-drm-amdgpu-Don-t-change-preferred-domian-when-fallba.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3990-drm-amdgpu-Don-t-change-preferred-domian-when-fallba.patch
new file mode 100644
index 00000000..e1c443c2
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3990-drm-amdgpu-Don-t-change-preferred-domian-when-fallba.patch
@@ -0,0 +1,134 @@
+From 5306be316e9c06873c91f1a418ea91902f857ff6 Mon Sep 17 00:00:00 2001
+From: Chunming Zhou <david1.zhou@amd.com>
+Date: Fri, 16 Mar 2018 12:29:38 +0800
+Subject: [PATCH 3990/4131] drm/amdgpu: Don't change preferred domian when
+ fallback GTT v6
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+v2: add sanity checking
+v3: make code open
+v4: also handle visible to invisible fallback
+v5: Since two fallback cases, re-use goto retry
+v6: avoid bo is unref when retry, and only user BO can fallback
+
+Change-Id: If487a8977684db8df4542d58a9036c04df56ffb7
+Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
+Reviewed-by: Christian König <christian.koenig@amd.com> (v5)
+Acked-by: Felix Kuehling <Felix.Kuehling@amd.com>
+Cc: felix.kuehling@amd.com
+
+Conflicts:
+ drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
+ drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 15 ++----------
+ drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 38 +++++++++++++++++++-----------
+ 2 files changed, 26 insertions(+), 27 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
+index d2ac7c0..c3e71dd 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
+@@ -86,19 +86,8 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
+ r = amdgpu_bo_create(adev, size, alignment, initial_domain,
+ flags, type, resv, &bo);
+ if (r) {
+- if (r != -ERESTARTSYS) {
+- if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
+- flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
+- goto retry;
+- }
+-
+- if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
+- initial_domain |= AMDGPU_GEM_DOMAIN_GTT;
+- goto retry;
+- }
+- DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
+- size, initial_domain, alignment, r);
+- }
++ DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
++ size, initial_domain, alignment, r);
+ return r;
+ }
+ *obj = &bo->gem_base;
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+index c9e2fe9..8009e91 100755
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+@@ -379,6 +379,7 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev, unsigned long size,
+ struct amdgpu_bo *bo;
+ unsigned long page_align;
+ size_t acc_size;
++ u32 domains, preferred_domains, allowed_domains;
+ int r;
+
+ page_align = roundup(byte_align, PAGE_SIZE) >> PAGE_SHIFT;
+@@ -392,13 +393,7 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev, unsigned long size,
+ acc_size = ttm_bo_dma_acc_size(&adev->mman.bdev, size,
+ sizeof(struct amdgpu_bo));
+
+- bo = kzalloc(sizeof(struct amdgpu_bo), GFP_KERNEL);
+- if (bo == NULL)
+- return -ENOMEM;
+- 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 = domain & (AMDGPU_GEM_DOMAIN_VRAM |
++ preferred_domains = domain & (AMDGPU_GEM_DOMAIN_VRAM |
+ AMDGPU_GEM_DOMAIN_GTT |
+ AMDGPU_GEM_DOMAIN_CPU |
+ AMDGPU_GEM_DOMAIN_GDS |
+@@ -406,12 +401,18 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev, unsigned long size,
+ AMDGPU_GEM_DOMAIN_OA |
+ AMDGPU_GEM_DOMAIN_DGMA |
+ AMDGPU_GEM_DOMAIN_DGMA_IMPORT);
+- bo->allowed_domains = bo->preferred_domains;
++ allowed_domains = preferred_domains;
+ if (type != ttm_bo_type_kernel &&
+- bo->allowed_domains == AMDGPU_GEM_DOMAIN_VRAM)
+- bo->allowed_domains |= AMDGPU_GEM_DOMAIN_GTT;
+-
+- bo->flags = flags;
++ allowed_domains == AMDGPU_GEM_DOMAIN_VRAM)
++ allowed_domains |= AMDGPU_GEM_DOMAIN_GTT;
++ domains = preferred_domains;
++retry:
++ bo = kzalloc(sizeof(struct amdgpu_bo), GFP_KERNEL);
++ if (bo == NULL)
++ return -ENOMEM;
++ drm_gem_private_object_init(adev->ddev, &bo->gem_base, size);
++ INIT_LIST_HEAD(&bo->shadow_list);
++ INIT_LIST_HEAD(&bo->va);flags;
+
+ #ifdef CONFIG_X86_32
+ /* XXX: Write-combined CPU mappings of GTT seem broken on 32-bit
+@@ -442,13 +443,22 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev, unsigned long size,
+ #endif
+
+ bo->tbo.bdev = &adev->mman.bdev;
+- amdgpu_ttm_placement_from_domain(bo, domain);
+
++ amdgpu_ttm_placement_from_domain(bo, domains);
+ r = ttm_bo_init_reserved(&adev->mman.bdev, &bo->tbo, size, type,
+ &bo->placement, page_align, &ctx, acc_size,
+ NULL, resv, &amdgpu_ttm_bo_destroy);
+
+- if (unlikely(r != 0))
++ if (unlikely(r && r != -ERESTARTSYS) && type == ttm_bo_type_device) {
++ if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
++ flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
++ goto retry;
++ } else if (domains != allowed_domains) {
++ domains = allowed_domains;
++ goto retry;
++ }
++ }
++ if (unlikely(r))
+ return r;
+
+ if (adev->gmc.visible_vram_size < adev->gmc.real_vram_size &&
+--
+2.7.4
+