diff options
Diffstat (limited to 'kernel/dma/direct.c')
-rw-r--r-- | kernel/dma/direct.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c index 22a12ab5a5e9..375c77e8d52f 100644 --- a/kernel/dma/direct.c +++ b/kernel/dma/direct.c | |||
@@ -309,7 +309,12 @@ int dma_direct_supported(struct device *dev, u64 mask) | |||
309 | 309 | ||
310 | min_mask = min_t(u64, min_mask, (max_pfn - 1) << PAGE_SHIFT); | 310 | min_mask = min_t(u64, min_mask, (max_pfn - 1) << PAGE_SHIFT); |
311 | 311 | ||
312 | return mask >= phys_to_dma(dev, min_mask); | 312 | /* |
313 | * This check needs to be against the actual bit mask value, so | ||
314 | * use __phys_to_dma() here so that the SME encryption mask isn't | ||
315 | * part of the check. | ||
316 | */ | ||
317 | return mask >= __phys_to_dma(dev, min_mask); | ||
313 | } | 318 | } |
314 | 319 | ||
315 | int dma_direct_mapping_error(struct device *dev, dma_addr_t dma_addr) | 320 | int dma_direct_mapping_error(struct device *dev, dma_addr_t dma_addr) |