diff options
| author | Christoph Hellwig <hch@lst.de> | 2019-01-05 03:01:07 -0500 |
|---|---|---|
| committer | Thomas Hellstrom <thellstrom@vmware.com> | 2019-01-29 06:30:17 -0500 |
| commit | 2b3cd6249b14e25da14f13cd520eb336230a4422 (patch) | |
| tree | 8652a92bc747662e2bda801832aaaafac15d1422 | |
| parent | 9b5bf2421b43ef85568f9b875d6387a114e92efe (diff) | |
drm/vmwgfx: fix the check when to use dma_alloc_coherent
Since Linux 4.21 we merged the swiotlb ops into the DMA direct ops,
so they would always have a the sync_single methods. But late in
the cicle we also removed the direct ops entirely, so we'd see NULL
DMA ops. Switch vmw_dma_select_mode to only detect swiotlb presence
using swiotlb_nr_tbl() instead.
Fixes: 55897af630 ("dma-direct: merge swiotlb_dma_ops into the dma_direct code")
Fixes: 356da6d0cd ("dma-mapping: bypass indirect calls for dma-direct")
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
| -rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c index b7777b5b4a81..1456101e67a9 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | |||
| @@ -565,7 +565,6 @@ static int vmw_dma_select_mode(struct vmw_private *dev_priv) | |||
| 565 | [vmw_dma_alloc_coherent] = "Using coherent TTM pages.", | 565 | [vmw_dma_alloc_coherent] = "Using coherent TTM pages.", |
| 566 | [vmw_dma_map_populate] = "Keeping DMA mappings.", | 566 | [vmw_dma_map_populate] = "Keeping DMA mappings.", |
| 567 | [vmw_dma_map_bind] = "Giving up DMA mappings early."}; | 567 | [vmw_dma_map_bind] = "Giving up DMA mappings early."}; |
| 568 | const struct dma_map_ops *dma_ops = get_dma_ops(dev_priv->dev->dev); | ||
| 569 | 568 | ||
| 570 | if (intel_iommu_enabled) { | 569 | if (intel_iommu_enabled) { |
| 571 | dev_priv->map_mode = vmw_dma_map_populate; | 570 | dev_priv->map_mode = vmw_dma_map_populate; |
| @@ -578,14 +577,12 @@ static int vmw_dma_select_mode(struct vmw_private *dev_priv) | |||
| 578 | return 0; | 577 | return 0; |
| 579 | } | 578 | } |
| 580 | 579 | ||
| 581 | dev_priv->map_mode = vmw_dma_map_populate; | ||
| 582 | |||
| 583 | if (dma_ops && dma_ops->sync_single_for_cpu) | ||
| 584 | dev_priv->map_mode = vmw_dma_alloc_coherent; | ||
| 585 | #ifdef CONFIG_SWIOTLB | 580 | #ifdef CONFIG_SWIOTLB |
| 586 | if (swiotlb_nr_tbl() == 0) | 581 | if (swiotlb_nr_tbl()) |
| 587 | dev_priv->map_mode = vmw_dma_map_populate; | 582 | dev_priv->map_mode = vmw_dma_alloc_coherent; |
| 583 | else | ||
| 588 | #endif | 584 | #endif |
| 585 | dev_priv->map_mode = vmw_dma_map_populate; | ||
| 589 | 586 | ||
| 590 | out_fixup: | 587 | out_fixup: |
| 591 | if (dev_priv->map_mode == vmw_dma_map_populate && | 588 | if (dev_priv->map_mode == vmw_dma_map_populate && |
