summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/xen/swiotlb-xen.c7
-rw-r--r--kernel/dma/swiotlb.c8
2 files changed, 8 insertions, 7 deletions
diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
index 1a31ddf71397..060eeb056486 100644
--- a/drivers/xen/swiotlb-xen.c
+++ b/drivers/xen/swiotlb-xen.c
@@ -173,12 +173,6 @@ retry:
order = get_order(bytes);
/*
- * IO TLB memory already allocated. Just use it.
- */
- if (io_tlb_start != 0)
- goto end;
-
- /*
* Get IO TLB memory from any location.
*/
if (early) {
@@ -232,7 +226,6 @@ retry:
} else
rc = swiotlb_late_init_with_tbl(start, nslabs);
-end:
if (!rc)
swiotlb_set_max_segment(PAGE_SIZE);
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;