diff options
author | Christian König <christian.koenig@amd.com> | 2018-02-22 02:35:11 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-02-26 23:09:36 -0500 |
commit | 92e71b0676447fff40c1e747b2585a9d11c5fca2 (patch) | |
tree | 351d0a81482fb3a97543f90c74069aad35739b74 /drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c | |
parent | a02497b73218f10f237d98fb10d34d0baed607a0 (diff) |
drm/amdgpu: use the TTM dummy page instead of allocating one
We have a global dummy page in TTM, use that one instead of allocating a
new one.
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c index 008eaee57114..137145dd14a9 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c | |||
@@ -68,17 +68,15 @@ | |||
68 | */ | 68 | */ |
69 | static int amdgpu_gart_dummy_page_init(struct amdgpu_device *adev) | 69 | static int amdgpu_gart_dummy_page_init(struct amdgpu_device *adev) |
70 | { | 70 | { |
71 | if (adev->dummy_page.page) | 71 | struct page *dummy_page = adev->mman.bdev.glob->dummy_read_page; |
72 | |||
73 | if (adev->dummy_page_addr) | ||
72 | return 0; | 74 | return 0; |
73 | adev->dummy_page.page = alloc_page(GFP_DMA32 | GFP_KERNEL | __GFP_ZERO); | 75 | adev->dummy_page_addr = pci_map_page(adev->pdev, dummy_page, 0, |
74 | if (adev->dummy_page.page == NULL) | 76 | PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); |
75 | return -ENOMEM; | 77 | if (pci_dma_mapping_error(adev->pdev, adev->dummy_page_addr)) { |
76 | adev->dummy_page.addr = pci_map_page(adev->pdev, adev->dummy_page.page, | ||
77 | 0, PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); | ||
78 | if (pci_dma_mapping_error(adev->pdev, adev->dummy_page.addr)) { | ||
79 | dev_err(&adev->pdev->dev, "Failed to DMA MAP the dummy page\n"); | 78 | dev_err(&adev->pdev->dev, "Failed to DMA MAP the dummy page\n"); |
80 | __free_page(adev->dummy_page.page); | 79 | adev->dummy_page_addr = 0; |
81 | adev->dummy_page.page = NULL; | ||
82 | return -ENOMEM; | 80 | return -ENOMEM; |
83 | } | 81 | } |
84 | return 0; | 82 | return 0; |
@@ -93,12 +91,11 @@ static int amdgpu_gart_dummy_page_init(struct amdgpu_device *adev) | |||
93 | */ | 91 | */ |
94 | static void amdgpu_gart_dummy_page_fini(struct amdgpu_device *adev) | 92 | static void amdgpu_gart_dummy_page_fini(struct amdgpu_device *adev) |
95 | { | 93 | { |
96 | if (adev->dummy_page.page == NULL) | 94 | if (!adev->dummy_page_addr) |
97 | return; | 95 | return; |
98 | pci_unmap_page(adev->pdev, adev->dummy_page.addr, | 96 | pci_unmap_page(adev->pdev, adev->dummy_page_addr, |
99 | PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); | 97 | PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); |
100 | __free_page(adev->dummy_page.page); | 98 | adev->dummy_page_addr = 0; |
101 | adev->dummy_page.page = NULL; | ||
102 | } | 99 | } |
103 | 100 | ||
104 | /** | 101 | /** |
@@ -236,7 +233,7 @@ int amdgpu_gart_unbind(struct amdgpu_device *adev, uint64_t offset, | |||
236 | #ifdef CONFIG_DRM_AMDGPU_GART_DEBUGFS | 233 | #ifdef CONFIG_DRM_AMDGPU_GART_DEBUGFS |
237 | adev->gart.pages[p] = NULL; | 234 | adev->gart.pages[p] = NULL; |
238 | #endif | 235 | #endif |
239 | page_base = adev->dummy_page.addr; | 236 | page_base = adev->dummy_page_addr; |
240 | if (!adev->gart.ptr) | 237 | if (!adev->gart.ptr) |
241 | continue; | 238 | continue; |
242 | 239 | ||
@@ -347,7 +344,7 @@ int amdgpu_gart_init(struct amdgpu_device *adev) | |||
347 | { | 344 | { |
348 | int r; | 345 | int r; |
349 | 346 | ||
350 | if (adev->dummy_page.page) | 347 | if (adev->dummy_page_addr) |
351 | return 0; | 348 | return 0; |
352 | 349 | ||
353 | /* We need PAGE_SIZE >= AMDGPU_GPU_PAGE_SIZE */ | 350 | /* We need PAGE_SIZE >= AMDGPU_GPU_PAGE_SIZE */ |