diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2019-06-11 15:38:34 -1000 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-06-11 15:38:34 -1000 |
commit | 4d8f5f91b8a608980b173ef3382913c7405f82c3 (patch) | |
tree | 7d069289cecbdac63fcdf08faba1f0bdad6d4ca3 /drivers/xen/swiotlb-xen.c | |
parent | c23b07125f8aebf8b39fffa325145826098f7d8f (diff) | |
parent | 4e7372e0dc5d7d2078fbdb13505635cd5b11f93d (diff) |
Merge branch 'stable/for-linus-5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/swiotlb
Pull swiotlb fix from Konrad Rzeszutek Wilk:
"One tiny fix for ARM64 where we could allocate the SWIOTLB twice"
* 'stable/for-linus-5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/swiotlb:
xen/swiotlb: don't initialize swiotlb twice on arm64
Diffstat (limited to 'drivers/xen/swiotlb-xen.c')
-rw-r--r-- | drivers/xen/swiotlb-xen.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c index 0657b0b57dae..d53f3493a6b9 100644 --- a/drivers/xen/swiotlb-xen.c +++ b/drivers/xen/swiotlb-xen.c @@ -202,6 +202,15 @@ int __ref xen_swiotlb_init(int verbose, bool early) retry: bytes = xen_set_nslabs(xen_io_tlb_nslabs); order = get_order(xen_io_tlb_nslabs << IO_TLB_SHIFT); + + /* + * IO TLB memory already allocated. Just use it. + */ + if (io_tlb_start != 0) { + xen_io_tlb_start = phys_to_virt(io_tlb_start); + goto end; + } + /* * Get IO TLB memory from any location. */ @@ -231,7 +240,6 @@ retry: m_ret = XEN_SWIOTLB_ENOMEM; goto error; } - xen_io_tlb_end = xen_io_tlb_start + bytes; /* * And replace that memory with pages under 4GB. */ @@ -258,6 +266,8 @@ retry: } else rc = swiotlb_late_init_with_tbl(xen_io_tlb_start, xen_io_tlb_nslabs); +end: + xen_io_tlb_end = xen_io_tlb_start + bytes; if (!rc) swiotlb_set_max_segment(PAGE_SIZE); |