aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1318-drm-amdgpu-fix-HMM-config-dependency-issue.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1318-drm-amdgpu-fix-HMM-config-dependency-issue.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/1318-drm-amdgpu-fix-HMM-config-dependency-issue.patch137
1 files changed, 137 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1318-drm-amdgpu-fix-HMM-config-dependency-issue.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1318-drm-amdgpu-fix-HMM-config-dependency-issue.patch
new file mode 100644
index 00000000..6269da7b
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1318-drm-amdgpu-fix-HMM-config-dependency-issue.patch
@@ -0,0 +1,137 @@
+From aece3aa4fafa69b06c61097f61649543caf8994f Mon Sep 17 00:00:00 2001
+From: Philip Yang <Philip.Yang@amd.com>
+Date: Thu, 21 Feb 2019 12:39:21 -0500
+Subject: [PATCH 1318/2940] drm/amdgpu: fix HMM config dependency issue
+
+Only select HMM_MIRROR will get kernel config dependency warnings
+if CONFIG_HMM is missing in the config. Add depends on HMM will
+solve the issue.
+
+Add conditional compilation to fix compilation errors if HMM_MIRROR
+is not enabled as HMM config is not enabled.
+
+Remove unused function amdgpu_ttm_tt_mark_user_pages.
+
+Change-Id: I1b44a0b5285bbef5e98bfb045d1d82c167af1cb8
+Signed-off-by: Philip Yang <Philip.Yang@amd.com>
+Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/Kconfig | 1 +
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 29 +++++--------------------
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h | 13 ++++++++++-
+ 3 files changed, 19 insertions(+), 24 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/Kconfig b/drivers/gpu/drm/amd/amdgpu/Kconfig
+index 16f08654f59b..3cdee30995a1 100644
+--- a/drivers/gpu/drm/amd/amdgpu/Kconfig
++++ b/drivers/gpu/drm/amd/amdgpu/Kconfig
+@@ -26,6 +26,7 @@ config DRM_AMDGPU_CIK
+ config DRM_AMDGPU_USERPTR
+ bool "Always enable userptr write support"
+ depends on DRM_AMDGPU
++ depends on ARCH_HAS_HMM
+ select HMM_MIRROR
+ help
+ This option selects CONFIG_HMM and CONFIG_HMM_MIRROR if it
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+index d587b374665e..ac54a750fe3b 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+@@ -845,7 +845,9 @@ struct amdgpu_ttm_tt {
+ uint64_t userptr;
+ struct task_struct *usertask;
+ uint32_t userflags;
++#if IS_ENABLED(CONFIG_DRM_AMDGPU_USERPTR)
+ struct hmm_range range;
++#endif
+ };
+
+ /**
+@@ -855,6 +857,7 @@ struct amdgpu_ttm_tt {
+ * Calling function must call amdgpu_ttm_tt_userptr_range_done() once and only
+ * once afterwards to stop HMM tracking
+ */
++#if IS_ENABLED(CONFIG_DRM_AMDGPU_USERPTR)
+ int amdgpu_ttm_tt_get_user_pages(struct ttm_tt *ttm, struct page **pages)
+ {
+ struct amdgpu_ttm_tt *gtt = (void *)ttm;
+@@ -937,6 +940,7 @@ bool amdgpu_ttm_tt_get_user_pages_done(struct ttm_tt *ttm)
+
+ return r;
+ }
++#endif
+
+ /**
+ * amdgpu_ttm_tt_set_user_pages - Copy pages in, putting old pages as necessary.
+@@ -953,29 +957,6 @@ void amdgpu_ttm_tt_set_user_pages(struct ttm_tt *ttm, struct page **pages)
+ ttm->pages[i] = pages ? pages[i] : NULL;
+ }
+
+-/**
+- * amdgpu_ttm_tt_mark_user_page - Mark pages as dirty
+- *
+- * Called while unpinning userptr pages
+- */
+-void amdgpu_ttm_tt_mark_user_pages(struct ttm_tt *ttm)
+-{
+- struct amdgpu_ttm_tt *gtt = (void *)ttm;
+- unsigned i;
+-
+- for (i = 0; i < ttm->num_pages; ++i) {
+- struct page *page = ttm->pages[i];
+-
+- if (!page)
+- continue;
+-
+- if (!(gtt->userflags & AMDGPU_GEM_USERPTR_READONLY))
+- set_page_dirty(page);
+-
+- mark_page_accessed(page);
+- }
+-}
+-
+ /**
+ * amdgpu_ttm_tt_pin_userptr - prepare the sg table with the user pages
+ *
+@@ -1037,9 +1018,11 @@ static void amdgpu_ttm_tt_unpin_userptr(struct ttm_tt *ttm)
+
+ sg_free_table(ttm->sg);
+
++#if IS_ENABLED(CONFIG_DRM_AMDGPU_USERPTR)
+ if (gtt->range.pfns &&
+ ttm->pages[0] == hmm_pfn_to_page(&gtt->range, gtt->range.pfns[0]))
+ WARN_ONCE(1, "Missing get_user_page_done\n");
++#endif
+ }
+
+ int amdgpu_ttm_gart_bind(struct amdgpu_device *adev,
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
+index 9afdf06717f7..6b93fcb0b12e 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
+@@ -107,10 +107,21 @@ int amdgpu_mmap(struct file *filp, struct vm_area_struct *vma);
+ int amdgpu_ttm_alloc_gart(struct ttm_buffer_object *bo);
+ int amdgpu_ttm_recover_gart(struct ttm_buffer_object *tbo);
+
++#if IS_ENABLED(CONFIG_DRM_AMDGPU_USERPTR)
+ int amdgpu_ttm_tt_get_user_pages(struct ttm_tt *ttm, struct page **pages);
+ bool amdgpu_ttm_tt_get_user_pages_done(struct ttm_tt *ttm);
++#else
++static inline int amdgpu_ttm_tt_get_user_pages(struct ttm_tt *ttm, struct page **pages)
++{
++ return -EPERM;
++}
++static inline bool amdgpu_ttm_tt_get_user_pages_done(struct ttm_tt *ttm)
++{
++ return false;
++}
++#endif
++
+ void amdgpu_ttm_tt_set_user_pages(struct ttm_tt *ttm, struct page **pages);
+-void amdgpu_ttm_tt_mark_user_pages(struct ttm_tt *ttm);
+ int amdgpu_ttm_tt_set_userptr(struct ttm_tt *ttm, uint64_t addr,
+ uint32_t flags);
+ bool amdgpu_ttm_tt_has_userptr(struct ttm_tt *ttm);
+--
+2.17.1
+