On 12.02.2025 12:11, Jürgen Groß wrote: > On 12.02.25 08:38, Jan Beulich wrote: >> On 11.02.2025 13:04, Juergen Gross wrote: >>> In case xen_swiotlb_alloc_coherent() needed to create a contiguous >>> region only for other reason than the memory not being compliant with >>> the device's DMA mask, there is no reason why this contiguous region >>> should be destroyed by xen_swiotlb_free_coherent() later. Destroying >>> this region should be done only, if the memory of the region was >>> allocated with more stringent placement requirements than the memory >>> it did replace. >> >> I'm not convinced of this: Even the mere property of being contiguous >> may already be enough to warrant freeing when possible. The hypervisor >> may not have that many contiguous areas available. The bigger the >> chunk, the more important to give it back once no longer needed in >> this shape. > > Really? When creating a domain Xen tries to use GB pages and 2MB pages as > much as possible. Why would this special case here have more restrictions?
There aren't many Gb pages to be had from the space below 4Gb; frequently there'll be at most one (covering the range from 1 to 2 Gb). For that as well as 2Mb ones I think it is a mistake that Xen may hand them out, when the caller could fall back to 4k allocations. Thing is that without extra information it's hard to come up with a good heuristic to decide whether the caller is capable of falling back. Perhaps e.g. populate_physmap() should add MEMF_no_dma to higher order allocation requests targeting other than the current domain, or when !d->creation_finished. Jan