All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] Fix DMA ops layering violations in vmwgfx v2
@ 2019-01-25  8:12 Thomas Hellstrom
  2019-01-25  8:12 ` [PATCH 1/4] drm/vmwgfx: remove CONFIG_X86 ifdefs Thomas Hellstrom
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Thomas Hellstrom @ 2019-01-25  8:12 UTC (permalink / raw)
  To: hch, dri-devel, linux-graphics-maintainer

This is a patch set from Christoph Hellwig. Patch 2 has been updated by
me to not remove checks for TTM coherent pool presence. Ideally, we
should query TTM for this instead and I'll have a patch set intended for
5.1 so that we can do that. But I don't want to introduce cross-module API
additions outside of a merge window.

Original patch set description:
vmwgfx has been doing some odd checks based on DMA ops which rely
on deep DMA mapping layer internals, and I think the changes in
Linux 4.21 finally broke most of these implicit assumptions.

The real fix is in patch 3, but I think the others are important
to make it clear what is actually going on.


_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/4] drm/vmwgfx: remove CONFIG_X86 ifdefs
  2019-01-25  8:12 [PATCH 0/4] Fix DMA ops layering violations in vmwgfx v2 Thomas Hellstrom
@ 2019-01-25  8:12 ` Thomas Hellstrom
  2019-01-25  8:12 ` [PATCH 2/4] drm/vmwgfx: remove CONFIG_INTEL_IOMMU ifdefs v2 Thomas Hellstrom
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 10+ messages in thread
From: Thomas Hellstrom @ 2019-01-25  8:12 UTC (permalink / raw)
  To: hch, dri-devel, linux-graphics-maintainer

From: Christoph Hellwig <hch@lst.de>

The driver depends on CONFIG_X86 so these are dead code.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
index 25afb1d594e3..69e325b2d954 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)
 		[vmw_dma_alloc_coherent] = "Using coherent TTM pages.",
 		[vmw_dma_map_populate] = "Keeping DMA mappings.",
 		[vmw_dma_map_bind] = "Giving up DMA mappings early."};
-#ifdef CONFIG_X86
 	const struct dma_map_ops *dma_ops = get_dma_ops(dev_priv->dev->dev);
 
 #ifdef CONFIG_INTEL_IOMMU
@@ -607,11 +606,6 @@ static int vmw_dma_select_mode(struct vmw_private *dev_priv)
 	if (dev_priv->map_mode == vmw_dma_alloc_coherent)
 		return -EINVAL;
 #endif
-
-#else /* CONFIG_X86 */
-	dev_priv->map_mode = vmw_dma_map_populate;
-#endif /* CONFIG_X86 */
-
 	DRM_INFO("DMA map mode: %s\n", names[dev_priv->map_mode]);
 
 	return 0;
-- 
2.19.0.rc1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/4] drm/vmwgfx: remove CONFIG_INTEL_IOMMU ifdefs v2
  2019-01-25  8:12 [PATCH 0/4] Fix DMA ops layering violations in vmwgfx v2 Thomas Hellstrom
  2019-01-25  8:12 ` [PATCH 1/4] drm/vmwgfx: remove CONFIG_X86 ifdefs Thomas Hellstrom
@ 2019-01-25  8:12 ` Thomas Hellstrom
       [not found]   ` <20190204081932.GB5730@lst.de>
  2019-01-25  8:12 ` [PATCH 3/4] drm/vmwgfx: fix the check when to use dma_alloc_coherent Thomas Hellstrom
  2019-01-25  8:12 ` [PATCH 4/4] drm/vmwgfx: unwind spaghetti code in vmw_dma_select_mode Thomas Hellstrom
  3 siblings, 1 reply; 10+ messages in thread
From: Thomas Hellstrom @ 2019-01-25  8:12 UTC (permalink / raw)
  To: hch, dri-devel, linux-graphics-maintainer

From: Christoph Hellwig <hch@lst.de>

intel_iommu_enabled is defined as always false for !CONFIG_INTEL_IOMMU,
so remove the ifdefs around it.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
---
v2: Retain the check for TTM dma page pool presence.
---
 drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 21 ++++-----------------
 1 file changed, 4 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
index 69e325b2d954..b7777b5b4a81 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
@@ -567,12 +567,10 @@ static int vmw_dma_select_mode(struct vmw_private *dev_priv)
 		[vmw_dma_map_bind] = "Giving up DMA mappings early."};
 	const struct dma_map_ops *dma_ops = get_dma_ops(dev_priv->dev->dev);
 
-#ifdef CONFIG_INTEL_IOMMU
 	if (intel_iommu_enabled) {
 		dev_priv->map_mode = vmw_dma_map_populate;
 		goto out_fixup;
 	}
-#endif
 
 	if (!(vmw_force_iommu || vmw_force_coherent)) {
 		dev_priv->map_mode = vmw_dma_phys;
@@ -589,9 +587,7 @@ static int vmw_dma_select_mode(struct vmw_private *dev_priv)
 		dev_priv->map_mode = vmw_dma_map_populate;
 #endif
 
-#ifdef CONFIG_INTEL_IOMMU
 out_fixup:
-#endif
 	if (dev_priv->map_mode == vmw_dma_map_populate &&
 	    vmw_restrict_iommu)
 		dev_priv->map_mode = vmw_dma_map_bind;
@@ -599,13 +595,11 @@ static int vmw_dma_select_mode(struct vmw_private *dev_priv)
 	if (vmw_force_coherent)
 		dev_priv->map_mode = vmw_dma_alloc_coherent;
 
-#if !defined(CONFIG_SWIOTLB) && !defined(CONFIG_INTEL_IOMMU)
-	/*
-	 * No coherent page pool
-	 */
-	if (dev_priv->map_mode == vmw_dma_alloc_coherent)
+	/* No TTM coherent page pool? FIXME: Ask TTM instead! */
+	if (!(IS_ENABLED(CONFIG_SWIOTLB) || IS_ENABLED(CONFIG_INTEL_IOMMU)) &&
+	    (dev_priv->map_mode == vmw_dma_alloc_coherent))
 		return -EINVAL;
-#endif
+
 	DRM_INFO("DMA map mode: %s\n", names[dev_priv->map_mode]);
 
 	return 0;
@@ -619,7 +613,6 @@ static int vmw_dma_select_mode(struct vmw_private *dev_priv)
  * With 32-bit we can only handle 32 bit PFNs. Optionally set that
  * restriction also for 64-bit systems.
  */
-#ifdef CONFIG_INTEL_IOMMU
 static int vmw_dma_masks(struct vmw_private *dev_priv)
 {
 	struct drm_device *dev = dev_priv->dev;
@@ -631,12 +624,6 @@ static int vmw_dma_masks(struct vmw_private *dev_priv)
 	}
 	return 0;
 }
-#else
-static int vmw_dma_masks(struct vmw_private *dev_priv)
-{
-	return 0;
-}
-#endif
 
 static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
 {
-- 
2.19.0.rc1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 3/4] drm/vmwgfx: fix the check when to use dma_alloc_coherent
  2019-01-25  8:12 [PATCH 0/4] Fix DMA ops layering violations in vmwgfx v2 Thomas Hellstrom
  2019-01-25  8:12 ` [PATCH 1/4] drm/vmwgfx: remove CONFIG_X86 ifdefs Thomas Hellstrom
  2019-01-25  8:12 ` [PATCH 2/4] drm/vmwgfx: remove CONFIG_INTEL_IOMMU ifdefs v2 Thomas Hellstrom
@ 2019-01-25  8:12 ` Thomas Hellstrom
  2019-01-25  8:12 ` [PATCH 4/4] drm/vmwgfx: unwind spaghetti code in vmw_dma_select_mode Thomas Hellstrom
  3 siblings, 0 replies; 10+ messages in thread
From: Thomas Hellstrom @ 2019-01-25  8:12 UTC (permalink / raw)
  To: hch, dri-devel, linux-graphics-maintainer

From: Christoph Hellwig <hch@lst.de>

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>
---
 drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 11 ++++-------
 1 file 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)
 		[vmw_dma_alloc_coherent] = "Using coherent TTM pages.",
 		[vmw_dma_map_populate] = "Keeping DMA mappings.",
 		[vmw_dma_map_bind] = "Giving up DMA mappings early."};
-	const struct dma_map_ops *dma_ops = get_dma_ops(dev_priv->dev->dev);
 
 	if (intel_iommu_enabled) {
 		dev_priv->map_mode = vmw_dma_map_populate;
@@ -578,14 +577,12 @@ static int vmw_dma_select_mode(struct vmw_private *dev_priv)
 		return 0;
 	}
 
-	dev_priv->map_mode = vmw_dma_map_populate;
-
-	if (dma_ops && dma_ops->sync_single_for_cpu)
-		dev_priv->map_mode = vmw_dma_alloc_coherent;
 #ifdef CONFIG_SWIOTLB
-	if (swiotlb_nr_tbl() == 0)
-		dev_priv->map_mode = vmw_dma_map_populate;
+	if (swiotlb_nr_tbl())
+		dev_priv->map_mode = vmw_dma_alloc_coherent;
+	else
 #endif
+		dev_priv->map_mode = vmw_dma_map_populate;
 
 out_fixup:
 	if (dev_priv->map_mode == vmw_dma_map_populate &&
-- 
2.19.0.rc1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 4/4] drm/vmwgfx: unwind spaghetti code in vmw_dma_select_mode
  2019-01-25  8:12 [PATCH 0/4] Fix DMA ops layering violations in vmwgfx v2 Thomas Hellstrom
                   ` (2 preceding siblings ...)
  2019-01-25  8:12 ` [PATCH 3/4] drm/vmwgfx: fix the check when to use dma_alloc_coherent Thomas Hellstrom
@ 2019-01-25  8:12 ` Thomas Hellstrom
  3 siblings, 0 replies; 10+ messages in thread
From: Thomas Hellstrom @ 2019-01-25  8:12 UTC (permalink / raw)
  To: hch, dri-devel, linux-graphics-maintainer

From: Christoph Hellwig <hch@lst.de>

Just use a simple if/else chain to select the DMA mode.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 25 ++++++-------------------
 1 file changed, 6 insertions(+), 19 deletions(-)

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
index 1456101e67a9..3e2bcff34032 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
@@ -566,39 +566,26 @@ static int vmw_dma_select_mode(struct vmw_private *dev_priv)
 		[vmw_dma_map_populate] = "Keeping DMA mappings.",
 		[vmw_dma_map_bind] = "Giving up DMA mappings early."};
 
-	if (intel_iommu_enabled) {
+	if (vmw_force_coherent)
+		dev_priv->map_mode = vmw_dma_alloc_coherent;
+	else if (intel_iommu_enabled)
 		dev_priv->map_mode = vmw_dma_map_populate;
-		goto out_fixup;
-	}
-
-	if (!(vmw_force_iommu || vmw_force_coherent)) {
+	else if (!vmw_force_iommu)
 		dev_priv->map_mode = vmw_dma_phys;
-		DRM_INFO("DMA map mode: %s\n", names[dev_priv->map_mode]);
-		return 0;
-	}
-
-#ifdef CONFIG_SWIOTLB
-	if (swiotlb_nr_tbl())
+	else if (IS_ENABLED(CONFIG_SWIOTLB) && swiotlb_nr_tbl())
 		dev_priv->map_mode = vmw_dma_alloc_coherent;
 	else
-#endif
 		dev_priv->map_mode = vmw_dma_map_populate;
 
-out_fixup:
-	if (dev_priv->map_mode == vmw_dma_map_populate &&
-	    vmw_restrict_iommu)
+	if (dev_priv->map_mode == vmw_dma_map_populate && vmw_restrict_iommu)
 		dev_priv->map_mode = vmw_dma_map_bind;
 
-	if (vmw_force_coherent)
-		dev_priv->map_mode = vmw_dma_alloc_coherent;
-
 	/* No TTM coherent page pool? FIXME: Ask TTM instead! */
         if (!(IS_ENABLED(CONFIG_SWIOTLB) || IS_ENABLED(CONFIG_INTEL_IOMMU)) &&
 	    (dev_priv->map_mode == vmw_dma_alloc_coherent))
 		return -EINVAL;
 
 	DRM_INFO("DMA map mode: %s\n", names[dev_priv->map_mode]);
-
 	return 0;
 }
 
-- 
2.19.0.rc1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/4] drm/vmwgfx: remove CONFIG_INTEL_IOMMU ifdefs v2
       [not found]   ` <20190204081932.GB5730@lst.de>
@ 2019-02-04 12:11     ` Thomas Hellstrom
  2019-02-05  7:59       ` Thomas Hellstrom
  0 siblings, 1 reply; 10+ messages in thread
From: Thomas Hellstrom @ 2019-02-04 12:11 UTC (permalink / raw)
  To: hch; +Cc: Linux-graphics-maintainer, dri-devel

On Mon, 2019-02-04 at 09:19 +0100, Christoph Hellwig wrote:
> On Fri, Jan 25, 2019 at 09:12:13AM +0100, Thomas Hellstrom wrote:
> > -#if !defined(CONFIG_SWIOTLB) && !defined(CONFIG_INTEL_IOMMU)
> > -	/*
> > -	 * No coherent page pool
> > -	 */
> > -	if (dev_priv->map_mode == vmw_dma_alloc_coherent)
> > +	/* No TTM coherent page pool? FIXME: Ask TTM instead! */
> > +	if (!(IS_ENABLED(CONFIG_SWIOTLB) ||
> > IS_ENABLED(CONFIG_INTEL_IOMMU)) &&
> > +	    (dev_priv->map_mode == vmw_dma_alloc_coherent))
> >  		return -EINVAL;
> > -#endif
> > +
> 
> I don't think this edited in change makes any sense.  The swiotlb vs
> dma-direct versions of dma_alloc_coherent are the same, so this check
> seems very obsfucating.

So this part of code is identical in functionality to the previous
version. It checks whether the TTM module has the coherent page pool
enabled. (an identical test is present in TTM). What we *really* need
to do here instead is to ask TTM whether it has enabled its coherent
page pool instead of trying to mimic TTM's test, and I have a changeset
under review for that. But as mentioned previously, I don't want to
change the TTM interface outside of a merge window, so we either have
to live with the above for 5.0 or keep the old defines. I'd prefer the
former so I don't have to respin the patch series once more.

Thanks,
Thoams

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/4] drm/vmwgfx: remove CONFIG_INTEL_IOMMU ifdefs v2
  2019-02-04 12:11     ` Thomas Hellstrom
@ 2019-02-05  7:59       ` Thomas Hellstrom
  2019-02-05  8:01         ` hch
  0 siblings, 1 reply; 10+ messages in thread
From: Thomas Hellstrom @ 2019-02-05  7:59 UTC (permalink / raw)
  To: hch; +Cc: linux-kernel

On Mon, 2019-02-04 at 13:11 +0100, Thomas Hellström wrote:
> On Mon, 2019-02-04 at 09:19 +0100, Christoph Hellwig wrote:
> > On Fri, Jan 25, 2019 at 09:12:13AM +0100, Thomas Hellstrom wrote:
> > > -#if !defined(CONFIG_SWIOTLB) && !defined(CONFIG_INTEL_IOMMU)
> > > -	/*
> > > -	 * No coherent page pool
> > > -	 */
> > > -	if (dev_priv->map_mode == vmw_dma_alloc_coherent)
> > > +	/* No TTM coherent page pool? FIXME: Ask TTM instead! */
> > > +	if (!(IS_ENABLED(CONFIG_SWIOTLB) ||
> > > IS_ENABLED(CONFIG_INTEL_IOMMU)) &&
> > > +	    (dev_priv->map_mode == vmw_dma_alloc_coherent))
> > >  		return -EINVAL;
> > > -#endif
> > > +
> > 
> > I don't think this edited in change makes any sense.  The swiotlb
> > vs
> > dma-direct versions of dma_alloc_coherent are the same, so this
> > check
> > seems very obsfucating.
> 
> So this part of code is identical in functionality to the previous
> version. It checks whether the TTM module has the coherent page pool
> enabled. (an identical test is present in TTM). What we *really* need
> to do here instead is to ask TTM whether it has enabled its coherent
> page pool instead of trying to mimic TTM's test, and I have a
> changeset
> under review for that. But as mentioned previously, I don't want to
> change the TTM interface outside of a merge window, so we either have
> to live with the above for 5.0 or keep the old defines. I'd prefer
> the
> former so I don't have to respin the patch series once more.
> 
> Thanks,
> Thoams
> 

Hi, Christoph,

I need to get this merged this week. Could you please ack or ack
removing this hunk + updating the following patches for merge errors?

If no response, I'll add a Cc: tag on the patch and a #v1 to your s-o-
b.

Thanks,
Thomas



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/4] drm/vmwgfx: remove CONFIG_INTEL_IOMMU ifdefs v2
  2019-02-05  7:59       ` Thomas Hellstrom
@ 2019-02-05  8:01         ` hch
  0 siblings, 0 replies; 10+ messages in thread
From: hch @ 2019-02-05  8:01 UTC (permalink / raw)
  To: Thomas Hellstrom; +Cc: hch, linux-kernel

On Tue, Feb 05, 2019 at 07:59:22AM +0000, Thomas Hellstrom wrote:
> On Mon, 2019-02-04 at 13:11 +0100, Thomas Hellström wrote:
> > On Mon, 2019-02-04 at 09:19 +0100, Christoph Hellwig wrote:
> > > On Fri, Jan 25, 2019 at 09:12:13AM +0100, Thomas Hellstrom wrote:
> > > > -#if !defined(CONFIG_SWIOTLB) && !defined(CONFIG_INTEL_IOMMU)
> > > > -	/*
> > > > -	 * No coherent page pool
> > > > -	 */
> > > > -	if (dev_priv->map_mode == vmw_dma_alloc_coherent)
> > > > +	/* No TTM coherent page pool? FIXME: Ask TTM instead! */
> > > > +	if (!(IS_ENABLED(CONFIG_SWIOTLB) ||
> > > > IS_ENABLED(CONFIG_INTEL_IOMMU)) &&
> > > > +	    (dev_priv->map_mode == vmw_dma_alloc_coherent))
> > > >  		return -EINVAL;
> > > > -#endif
> > > > +
> > > 
> > > I don't think this edited in change makes any sense.  The swiotlb
> > > vs
> > > dma-direct versions of dma_alloc_coherent are the same, so this
> > > check
> > > seems very obsfucating.
> > 
> > So this part of code is identical in functionality to the previous
> > version. It checks whether the TTM module has the coherent page pool
> > enabled. (an identical test is present in TTM). What we *really* need
> > to do here instead is to ask TTM whether it has enabled its coherent
> > page pool instead of trying to mimic TTM's test, and I have a
> > changeset
> > under review for that. But as mentioned previously, I don't want to
> > change the TTM interface outside of a merge window, so we either have
> > to live with the above for 5.0 or keep the old defines. I'd prefer
> > the
> > former so I don't have to respin the patch series once more.
> > 
> > Thanks,
> > Thoams
> > 
> 
> Hi, Christoph,
> 
> I need to get this merged this week. Could you please ack or ack
> removing this hunk + updating the following patches for merge errors?
> 
> If no response, I'll add a Cc: tag on the patch and a #v1 to your s-o-
> b.

Please go ahead.  I'll look into the fallout later.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 3/4] drm/vmwgfx: fix the check when to use dma_alloc_coherent
  2019-01-05  8:01 fix DMA ops layering violations in vmwgfx Christoph Hellwig
@ 2019-01-05  8:01   ` Christoph Hellwig
  0 siblings, 0 replies; 10+ messages in thread
From: Christoph Hellwig @ 2019-01-05  8:01 UTC (permalink / raw)
  To: thellstrom; +Cc: linux-graphics-maintainer, dri-devel, iommu, linux-kernel

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>
---
 drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
index 236052ad233c..c2060f6cc9e8 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)
 		[vmw_dma_alloc_coherent] = "Using coherent TTM pages.",
 		[vmw_dma_map_populate] = "Keeping DMA mappings.",
 		[vmw_dma_map_bind] = "Giving up DMA mappings early."};
-	const struct dma_map_ops *dma_ops = get_dma_ops(dev_priv->dev->dev);
 
 	if (intel_iommu_enabled) {
 		dev_priv->map_mode = vmw_dma_map_populate;
@@ -578,14 +577,12 @@ static int vmw_dma_select_mode(struct vmw_private *dev_priv)
 		return 0;
 	}
 
-	dev_priv->map_mode = vmw_dma_map_populate;
-
-	if (dma_ops && dma_ops->sync_single_for_cpu)
-		dev_priv->map_mode = vmw_dma_alloc_coherent;
 #ifdef CONFIG_SWIOTLB
-	if (swiotlb_nr_tbl() == 0)
-		dev_priv->map_mode = vmw_dma_map_populate;
+	if (swiotlb_nr_tbl())
+		dev_priv->map_mode = vmw_dma_alloc_coherent;
+	else
 #endif
+		dev_priv->map_mode = vmw_dma_map_populate;
 
 out_fixup:
 	if (dev_priv->map_mode == vmw_dma_map_populate &&
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 3/4] drm/vmwgfx: fix the check when to use dma_alloc_coherent
@ 2019-01-05  8:01   ` Christoph Hellwig
  0 siblings, 0 replies; 10+ messages in thread
From: Christoph Hellwig @ 2019-01-05  8:01 UTC (permalink / raw)
  To: thellstrom; +Cc: iommu, linux-graphics-maintainer, linux-kernel, dri-devel

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>
---
 drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
index 236052ad233c..c2060f6cc9e8 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)
 		[vmw_dma_alloc_coherent] = "Using coherent TTM pages.",
 		[vmw_dma_map_populate] = "Keeping DMA mappings.",
 		[vmw_dma_map_bind] = "Giving up DMA mappings early."};
-	const struct dma_map_ops *dma_ops = get_dma_ops(dev_priv->dev->dev);
 
 	if (intel_iommu_enabled) {
 		dev_priv->map_mode = vmw_dma_map_populate;
@@ -578,14 +577,12 @@ static int vmw_dma_select_mode(struct vmw_private *dev_priv)
 		return 0;
 	}
 
-	dev_priv->map_mode = vmw_dma_map_populate;
-
-	if (dma_ops && dma_ops->sync_single_for_cpu)
-		dev_priv->map_mode = vmw_dma_alloc_coherent;
 #ifdef CONFIG_SWIOTLB
-	if (swiotlb_nr_tbl() == 0)
-		dev_priv->map_mode = vmw_dma_map_populate;
+	if (swiotlb_nr_tbl())
+		dev_priv->map_mode = vmw_dma_alloc_coherent;
+	else
 #endif
+		dev_priv->map_mode = vmw_dma_map_populate;
 
 out_fixup:
 	if (dev_priv->map_mode == vmw_dma_map_populate &&
-- 
2.20.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2019-02-05  8:01 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-25  8:12 [PATCH 0/4] Fix DMA ops layering violations in vmwgfx v2 Thomas Hellstrom
2019-01-25  8:12 ` [PATCH 1/4] drm/vmwgfx: remove CONFIG_X86 ifdefs Thomas Hellstrom
2019-01-25  8:12 ` [PATCH 2/4] drm/vmwgfx: remove CONFIG_INTEL_IOMMU ifdefs v2 Thomas Hellstrom
     [not found]   ` <20190204081932.GB5730@lst.de>
2019-02-04 12:11     ` Thomas Hellstrom
2019-02-05  7:59       ` Thomas Hellstrom
2019-02-05  8:01         ` hch
2019-01-25  8:12 ` [PATCH 3/4] drm/vmwgfx: fix the check when to use dma_alloc_coherent Thomas Hellstrom
2019-01-25  8:12 ` [PATCH 4/4] drm/vmwgfx: unwind spaghetti code in vmw_dma_select_mode Thomas Hellstrom
  -- strict thread matches above, loose matches on Subject: below --
2019-01-05  8:01 fix DMA ops layering violations in vmwgfx Christoph Hellwig
2019-01-05  8:01 ` [PATCH 3/4] drm/vmwgfx: fix the check when to use dma_alloc_coherent Christoph Hellwig
2019-01-05  8:01   ` Christoph Hellwig

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.