mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 01:04:19 +08:00
b4fc36e60f
The refactor of powerpc DMA functions in commit6666cc17d7
("powerpc/dma: remove dma_nommu_mmap_coherent") incorrectly changes the way DMA mappings are handled on powerpc. Since this change, all mapped pages are marked as cache-inhibited through the default implementation of arch_dma_mmap_pgprot. This differs from the previous behavior of only marking pages in noncoherent mappings as cache-inhibited and has resulted in sporadic system crashes in certain hardware configurations and workloads (see Bugzilla). This commit restores the previous correct behavior by providing an implementation of arch_dma_mmap_pgprot that only marks pages in noncoherent mappings as cache-inhibited. As this behavior should be universal for all powerpc platforms a new file, dma-generic.c, was created to store it. Fixes:6666cc17d7
("powerpc/dma: remove dma_nommu_mmap_coherent") # NOTE: fixes commit6666cc17d7
released in v5.1. # Consider a stable tag: # Cc: stable@vger.kernel.org # v5.1+ # NOTE: fixes commit6666cc17d7
released in v5.1. # Consider a stable tag: # Cc: stable@vger.kernel.org # v5.1+ Cc: stable@vger.kernel.org # v5.1+ Signed-off-by: Shawn Anastasio <shawn@anastas.io> Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20190717235437.12908-1-shawn@anastas.io
18 lines
383 B
C
18 lines
383 B
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
/*
|
|
* Contains common dma routines for all powerpc platforms.
|
|
*
|
|
* Copyright (C) 2019 Shawn Anastasio.
|
|
*/
|
|
|
|
#include <linux/mm.h>
|
|
#include <linux/dma-noncoherent.h>
|
|
|
|
pgprot_t arch_dma_mmap_pgprot(struct device *dev, pgprot_t prot,
|
|
unsigned long attrs)
|
|
{
|
|
if (!dev_is_dma_coherent(dev))
|
|
return pgprot_noncached(prot);
|
|
return prot;
|
|
}
|