dma-direct: do not include SME mask in the DMA supported check
authorLendacky, Thomas <Thomas.Lendacky@amd.com>
Mon, 17 Dec 2018 14:39:16 +0000 (14:39 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 13 Jan 2019 08:51:05 +0000 (09:51 +0100)
commit13e554feddbd4ed8a3c1168036c696fa08fc05f2
tree2717500a0a07b0246afeb52306ea91315472b26c
parent439022e0c2ec8fbf39e6b8d443d2b961cdc86c2d
dma-direct: do not include SME mask in the DMA supported check

commit c92a54cfa0257e8ffd66b2a17d49e9c0bd4b769f upstream.

The dma_direct_supported() function intends to check the DMA mask against
specific values. However, the phys_to_dma() function includes the SME
encryption mask, which defeats the intended purpose of the check. This
results in drivers that support less than 48-bit DMA (SME encryption mask
is bit 47) from being able to set the DMA mask successfully when SME is
active, which results in the driver failing to initialize.

Change the function used to check the mask from phys_to_dma() to
__phys_to_dma() so that the SME encryption mask is not part of the check.

Fixes: c1d0af1a1d5d ("kernel/dma/direct: take DMA offset into account in dma_direct_supported")
Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
kernel/dma/direct.c