swiotlb: Return consistent SWIOTLB segments/nr_tbl
authorFlorian Fainelli <f.fainelli@gmail.com>
Tue, 11 Jun 2019 17:58:25 +0000 (10:58 -0700)
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Tue, 11 Jun 2019 18:36:33 +0000 (14:36 -0400)
commit4aa095ea329d76aeb2ae043e0d1ed96049d47940
treebfd0952a76628ee9ff1e709fc3429147a510e4ad
parent0bfaffbf4cc6f380a83eabc679c0d6eb307cf6e4
swiotlb: Return consistent SWIOTLB segments/nr_tbl

With a specifically contrived memory layout where there is no physical
memory available to the kernel below the 4GB boundary, we will fail to
perform the initial swiotlb_init() call and set no_iotlb_memory to true.

There are drivers out there that call into swiotlb_nr_tbl() to determine
whether they can use the SWIOTLB. With the right DMA_BIT_MASK() value
for these drivers (say 64-bit), they won't ever need to hit
swiotlb_tbl_map_single() so this can go unoticed and we would be
possibly lying about those drivers.

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
kernel/dma/swiotlb.c