[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: BUG kernel 6.12.19 defautl_swiotlb_limit() returns wrong value for CONFIG_SWIOTLB_DYNAMIC=y effects atm only under XEN dom0
- To: xen-devel@xxxxxxxxxxxxxxxxxxxx
- From: Andreas Greve <andreas.greve@xxxxxxxxxx>
- Date: Sun, 18 May 2025 17:37:17 +0200
- Arc-authentication-results: i=1; strato.com; arc=none; dkim=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; t=1747582639; s=strato-dkim-0002; d=strato.com; h=In-Reply-To:From:Cc:References:To:Subject:Reply-To:Date:Message-ID: Cc:Date:From:Subject:Sender; bh=TxBzSHtsc9lclNxdJck3wIIncXDkvgK/dr0Fa6blPnI=; b=VCBjLAmK2OTbhNfR1VWLdJqQ9VzDG/GJIIYD6yWtKEo3tV8Nqw3x/7RC2WRaH3p2Pu WnT1UkmLihiu7amxBIv1SSgOcDezN10LWs1MChEU2rPLLmQ+3LLIJMpl6HnirXYZJlnC t+9/TqHLK1bmwpaltJC4KDbag/G9ZM5yXsitFc7ECqb2zbI8DU593iUVJNoPMXxy7EIm dxv2pOuaALFJZV1/HYWzHcOISEklFCu1hzEQafUxWE1Tx0itxIqj8iEINZj6TZA8EZJj uwAAbf/6C0c+oZXMO/u98rQdb6PYbxhIcfKdwosS2F6iZku7v974nL9Iv3CoQai1rSxk ljow==
- Arc-seal: i=1; a=rsa-sha256; t=1747582639; cv=none; d=strato.com; s=strato-dkim-0002; b=qW8INH6a9Fy/q9DFE7qadpbd0EgG62cfRDeoO77c8FNUCYF0/OJ5FK3NtSUHTBChvQ BPFfK+9KE+2YvPXCSfG+Z+MBWck4Gu8AK9Tm5QH78bMF1HZJaBqSabjYQSFkzdm4/y/e NX0tho1AzgGsXApLRbx6uiDH87FSwTFiB2SKoy33sLFjwXiwU2Ll9P9NhKPeTeJKX/jg kmvF4XY26E8cS990ouvdcpRH3YNJMFgo8cgN194QXd7ikBsYm112ra9govg8vwtFEAYn kg27WllKFnG17udyMek20hwT5dsUDi26+rcUUXfaLve9MR+0M5/R3CBQEpOUlcqn+xBW lFFQ==
- Cc: andreas.greve@xxxxxxxxxx
- Delivery-date: Sun, 18 May 2025 15:37:42 +0000
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
Hello to all,
here is my BUG-Fix tested against kernel 6.12.19 and 6.12.28.
Signed-off-by: Andreas Greve andreas.greve@xxxxxxxxxx
diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
index abcf3fa63a56..742e6cbbe852 100644
--- a/kernel/dma/swiotlb.c
+++ b/kernel/dma/swiotlb.c
@@ -1654,7 +1654,16 @@ phys_addr_t default_swiotlb_base(void)
phys_addr_t default_swiotlb_limit(void)
{
#ifdef CONFIG_SWIOTLB_DYNAMIC
- return io_tlb_default_mem.phys_limit;
+ struct io_tlb_mem *mem = &io_tlb_default_mem;
+ phys_addr_t retval = mem->defpool.end;
+ struct io_tlb_pool *pool;
+ rcu_read_lock();
+ list_for_each_entry_rcu(pool, &mem->pools, node) {
+ if (pool->end > retval)
+ retval = pool->end;
+ }
+ rcu_read_unlock();
+ return retval - 1;
#else
return io_tlb_default_mem.defpool.end - 1;
#endif
|