Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Revert "drm/amdgpu: fix HMM config dependency issue"

This reverts commit 6b8f7e3dee7883084932bbdfce471a2960c6db5d.

This depends on an HMM fix which is not upstream yet.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

+24 -19
-1
drivers/gpu/drm/amd/amdgpu/Kconfig
··· 26 26 config DRM_AMDGPU_USERPTR 27 27 bool "Always enable userptr write support" 28 28 depends on DRM_AMDGPU 29 - depends on ARCH_HAS_HMM 30 29 select HMM_MIRROR 31 30 help 32 31 This option selects CONFIG_HMM and CONFIG_HMM_MIRROR if it
+23 -6
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
··· 710 710 uint64_t userptr; 711 711 struct task_struct *usertask; 712 712 uint32_t userflags; 713 - #if IS_ENABLED(CONFIG_DRM_AMDGPU_USERPTR) 714 713 struct hmm_range range; 715 - #endif 716 714 }; 717 715 718 716 /** ··· 720 722 * Calling function must call amdgpu_ttm_tt_userptr_range_done() once and only 721 723 * once afterwards to stop HMM tracking 722 724 */ 723 - #if IS_ENABLED(CONFIG_DRM_AMDGPU_USERPTR) 724 725 int amdgpu_ttm_tt_get_user_pages(struct ttm_tt *ttm, struct page **pages) 725 726 { 726 727 struct amdgpu_ttm_tt *gtt = (void *)ttm; ··· 802 805 803 806 return r; 804 807 } 805 - #endif 806 808 807 809 /** 808 810 * amdgpu_ttm_tt_set_user_pages - Copy pages in, putting old pages as necessary. ··· 816 820 817 821 for (i = 0; i < ttm->num_pages; ++i) 818 822 ttm->pages[i] = pages ? pages[i] : NULL; 823 + } 824 + 825 + /** 826 + * amdgpu_ttm_tt_mark_user_page - Mark pages as dirty 827 + * 828 + * Called while unpinning userptr pages 829 + */ 830 + void amdgpu_ttm_tt_mark_user_pages(struct ttm_tt *ttm) 831 + { 832 + struct amdgpu_ttm_tt *gtt = (void *)ttm; 833 + unsigned i; 834 + 835 + for (i = 0; i < ttm->num_pages; ++i) { 836 + struct page *page = ttm->pages[i]; 837 + 838 + if (!page) 839 + continue; 840 + 841 + if (!(gtt->userflags & AMDGPU_GEM_USERPTR_READONLY)) 842 + set_page_dirty(page); 843 + 844 + mark_page_accessed(page); 845 + } 819 846 } 820 847 821 848 /** ··· 902 883 903 884 sg_free_table(ttm->sg); 904 885 905 - #if IS_ENABLED(CONFIG_DRM_AMDGPU_USERPTR) 906 886 if (gtt->range.pfns && 907 887 ttm->pages[0] == hmm_pfn_to_page(&gtt->range, gtt->range.pfns[0])) 908 888 WARN_ONCE(1, "Missing get_user_page_done\n"); 909 - #endif 910 889 } 911 890 912 891 int amdgpu_ttm_gart_bind(struct amdgpu_device *adev,
+1 -12
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
··· 101 101 int amdgpu_ttm_alloc_gart(struct ttm_buffer_object *bo); 102 102 int amdgpu_ttm_recover_gart(struct ttm_buffer_object *tbo); 103 103 104 - #if IS_ENABLED(CONFIG_DRM_AMDGPU_USERPTR) 105 104 int amdgpu_ttm_tt_get_user_pages(struct ttm_tt *ttm, struct page **pages); 106 105 bool amdgpu_ttm_tt_get_user_pages_done(struct ttm_tt *ttm); 107 - #else 108 - static inline int amdgpu_ttm_tt_get_user_pages(struct ttm_tt *ttm, struct page **pages) 109 - { 110 - return -EPERM; 111 - } 112 - static inline bool amdgpu_ttm_tt_get_user_pages_done(struct ttm_tt *ttm) 113 - { 114 - return false; 115 - } 116 - #endif 117 - 118 106 void amdgpu_ttm_tt_set_user_pages(struct ttm_tt *ttm, struct page **pages); 107 + void amdgpu_ttm_tt_mark_user_pages(struct ttm_tt *ttm); 119 108 int amdgpu_ttm_tt_set_userptr(struct ttm_tt *ttm, uint64_t addr, 120 109 uint32_t flags); 121 110 bool amdgpu_ttm_tt_has_userptr(struct ttm_tt *ttm);