From: Christoph Hellwig <hch@lst.de>
Date: Mon, 14 Feb 2022 11:44:42 +0100
Subject: swiotlb: simplify swiotlb_max_segment
Git-commit: a2daa27c0c6137481226aee5b3136e453c642929
Patch-mainline: v5.19-rc1
References: jsc#PED-3259
Remove the bogus Xen override that was usually larger than the actual
size and just calculate the value on demand. Note that
swiotlb_max_segment still doesn't make sense as an interface and should
eventually be removed.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Tested-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Acked-by: Joerg Roedel <jroedel@suse.de>
---
drivers/xen/swiotlb-xen.c | 2 --
include/linux/swiotlb.h | 1 -
kernel/dma/swiotlb.c | 20 +++-----------------
3 files changed, 3 insertions(+), 20 deletions(-)
--- a/drivers/xen/swiotlb-xen.c
+++ b/drivers/xen/swiotlb-xen.c
@@ -205,7 +205,6 @@ retry:
rc = swiotlb_late_init_with_tbl(start, nslabs);
if (rc)
return rc;
- swiotlb_set_max_segment(PAGE_SIZE);
return 0;
error:
if (repeat--) {
@@ -256,7 +255,6 @@ retry:
if (swiotlb_init_with_tbl(start, nslabs, false))
panic("Cannot allocate SWIOTLB buffer");
- swiotlb_set_max_segment(PAGE_SIZE);
}
#endif /* CONFIG_X86 */
--- a/include/linux/swiotlb.h
+++ b/include/linux/swiotlb.h
@@ -164,7 +164,6 @@ static inline void swiotlb_adjust_size(u
#endif /* CONFIG_SWIOTLB */
extern void swiotlb_print_info(void);
-extern void swiotlb_set_max_segment(unsigned int);
#ifdef CONFIG_DMA_RESTRICTED_POOL
struct page *swiotlb_alloc(struct device *dev, size_t size);
--- a/kernel/dma/swiotlb.c
+++ b/kernel/dma/swiotlb.c
@@ -73,12 +73,6 @@ struct io_tlb_mem io_tlb_default_mem;
phys_addr_t swiotlb_unencrypted_base;
-/*
- * Max segment that we can provide which (if pages are contingous) will
- * not be bounced (unless SWIOTLB_FORCE is set).
- */
-static unsigned int max_segment;
-
static unsigned long default_nslabs = IO_TLB_DEFAULT_SIZE >> IO_TLB_SHIFT;
static int __init
@@ -102,18 +96,12 @@ early_param("swiotlb", setup_io_tlb_npag
unsigned int swiotlb_max_segment(void)
{
- return io_tlb_default_mem.nslabs ? max_segment : 0;
+ if (!io_tlb_default_mem.nslabs)
+ return 0;
+ return rounddown(io_tlb_default_mem.nslabs << IO_TLB_SHIFT, PAGE_SIZE);
}
EXPORT_SYMBOL_GPL(swiotlb_max_segment);
-void swiotlb_set_max_segment(unsigned int val)
-{
- if (swiotlb_force == SWIOTLB_FORCE)
- max_segment = 1;
- else
- max_segment = rounddown(val, PAGE_SIZE);
-}
-
unsigned long swiotlb_size_or_default(void)
{
return default_nslabs << IO_TLB_SHIFT;
@@ -265,7 +253,6 @@ int __init swiotlb_init_with_tbl(char *t
if (verbose)
swiotlb_print_info();
- swiotlb_set_max_segment(mem->nslabs << IO_TLB_SHIFT);
return 0;
}
@@ -366,7 +353,6 @@ swiotlb_late_init_with_tbl(char *tlb, un
swiotlb_init_io_tlb_mem(mem, virt_to_phys(tlb), nslabs, true);
swiotlb_print_info();
- swiotlb_set_max_segment(mem->nslabs << IO_TLB_SHIFT);
return 0;
}