summaryrefslogtreecommitdiff
path: root/kernel/dma
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2021-03-01 08:44:31 +0100
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2021-03-17 00:40:49 +0000
commit5d0538b2b884f7fd239f6ab3b667148dc57123f1 (patch)
tree060677a67b91ec06e41b57d387fe35a75d1e4628 /kernel/dma
parentcbce99527ca7c4e98db9890651d5e9dfc2fb89ac (diff)
swiotlb: lift the double initialization protection from xen-swiotlb
Lift the double initialization protection from xen-swiotlb to the core code to avoid exposing too many swiotlb internals. Also upgrade the check to a warning as it should not happen. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'kernel/dma')
-rw-r--r--kernel/dma/swiotlb.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
index 5fe8781be6f2..35e24f0ff8b2 100644
--- a/kernel/dma/swiotlb.c
+++ b/kernel/dma/swiotlb.c
@@ -229,6 +229,10 @@ int __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose)
unsigned long i, bytes;
size_t alloc_size;
+ /* protect against double initialization */
+ if (WARN_ON_ONCE(io_tlb_start))
+ return -ENOMEM;
+
bytes = nslabs << IO_TLB_SHIFT;
io_tlb_nslabs = nslabs;
@@ -367,6 +371,10 @@ swiotlb_late_init_with_tbl(char *tlb, unsigned long nslabs)
{
unsigned long i, bytes;
+ /* protect against double initialization */
+ if (WARN_ON_ONCE(io_tlb_start))
+ return -ENOMEM;
+
bytes = nslabs << IO_TLB_SHIFT;
io_tlb_nslabs = nslabs;