On Fri, Apr 12, 2024 at 09:42:07AM +0100, Steven Price wrote: > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > index 786fd6ce5f17..01a2e3ce6921 100644 > --- a/arch/arm64/mm/init.c > +++ b/arch/arm64/mm/init.c > @@ -370,7 +370,9 @@ void __init bootmem_init(void) > */ > void __init mem_init(void) > { > - bool swiotlb = max_pfn > PFN_DOWN(arm64_dma_phys_limit); > + bool swiotlb = (max_pfn > PFN_DOWN(arm64_dma_phys_limit)); This series tends to add unnecessary brackets. > + > + swiotlb |= is_realm_world(); I first thought we wouldn't need this, just passing 'true' further down but I guess you want to avoid reducing the bounce buffer size when it's only needed for kmalloc() bouncing. > > if (IS_ENABLED(CONFIG_DMA_BOUNCE_UNALIGNED_KMALLOC) && !swiotlb) { > /* > @@ -383,7 +385,12 @@ void __init mem_init(void) > swiotlb = true; > } > > - swiotlb_init(swiotlb, SWIOTLB_VERBOSE); > + if (is_realm_world()) { > + swiotlb_init(swiotlb, SWIOTLB_VERBOSE | SWIOTLB_FORCE); > + swiotlb_update_mem_attributes(); > + } else { > + swiotlb_init(swiotlb, SWIOTLB_VERBOSE); > + } Just do this higher up and avoid calling is_realm_world() twice: unsigned int flags = SWIOTLB_VERBOSE; ... if (is_realm_world()) { swiotlb = true; flags |= SWIOTLB_FORCE; } ... swiotlb_init(swiotlb, flags); -- Catalin