On Fri, Dec 07, 2018 at 11:07:20AM -0800, Christoph Hellwig wrote: [...] > diff --git a/kernel/dma/mapping.c b/kernel/dma/mapping.c > index 0b18cfbdde95..fc84c81029d9 100644 > --- a/kernel/dma/mapping.c > +++ b/kernel/dma/mapping.c [...] > @@ -397,9 +404,9 @@ int dma_supported(struct device *dev, u64 mask) > { > const struct dma_map_ops *ops = get_dma_ops(dev); > > - if (!ops) > - return 0; > - if (!ops->dma_supported) > + if (dma_is_direct(ops)) > + return dma_direct_supported(dev, mask); > + if (ops->dma_supported) > return 1; > return ops->dma_supported(dev, mask); > } Hi Christoph, This hunk causes a crash on boot for me. It looks like a ! got lost in the rework here. The following patch fixes the crash for me and restores the logic of the op->dma_supported check. Feel free to squash this patch into the above if you prefer that. Thierry --- >8 --- From c502b29ab01fa857e81c78cd574d4d22d7d20e09 Mon Sep 17 00:00:00 2001 From: Thierry Reding Date: Thu, 20 Dec 2018 17:35:47 +0100 Subject: [PATCH] dma-mapping: Fix inverted logic in dma_supported() The cleanup in commit 356da6d0cde3 ("dma-mapping: bypass indirect calls for dma-direct") accidentally inverted the logic in the check for the presence of a ->dma_supported() callback. Switch this back to the way it was to prevent a crash on boot. Fixes: 356da6d0cde3 ("dma-mapping: bypass indirect calls for dma-direct") Signed-off-by: Thierry Reding --- kernel/dma/mapping.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/dma/mapping.c b/kernel/dma/mapping.c index fc84c81029d9..d7c34d2d1ba5 100644 --- a/kernel/dma/mapping.c +++ b/kernel/dma/mapping.c @@ -406,7 +406,7 @@ int dma_supported(struct device *dev, u64 mask) if (dma_is_direct(ops)) return dma_direct_supported(dev, mask); - if (ops->dma_supported) + if (!ops->dma_supported) return 1; return ops->dma_supported(dev, mask); } -- 2.19.1