From: Haggai Abramovsky <hagaya@xxxxxxxxxxxx> Date: Wed, 4 May 2016 14:50:15 +0300 > The dma_alloc_coherent() function returns a virtual address which can > be used for coherent access to the underlying memory. On some > architectures, like arm64, undefined behavior results if this memory is > also accessed via virtual mappings that are not coherent. Because of > their undefined nature, operations like virt_to_page() return garbage > when passed virtual addresses obtained from dma_alloc_coherent(). Any > subsequent mappings via vmap() of the garbage page values are unusable > and result in bad things like bus errors (synchronous aborts in ARM64 > speak). > > The mlx4 driver contains code that does the equivalent of: > vmap(virt_to_page(dma_alloc_coherent)), this results in an OOPs when the > device is opened. > > Prevent Ethernet driver to run this problematic code by forcing it to > allocate contiguous memory. As for the Infiniband driver, at first we > are trying to allocate contiguous memory, but in case of failure roll > back to work with fragmented memory. > > Signed-off-by: Haggai Abramovsky <hagaya@xxxxxxxxxxxx> > Signed-off-by: Yishai Hadas <yishaih@xxxxxxxxxxxx> > Reported-by: David Daney <david.daney@xxxxxxxxxx> > Tested-by: Sinan Kaya <okaya@xxxxxxxxxxxxxx> Applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html