On Mon, 3 Jun 2019, Boris Ostrovsky wrote: > On 6/3/19 2:25 PM, Stefano Stabellini wrote: > > On Tue, 28 May 2019, Boris Ostrovsky wrote: > >> On 5/28/19 6:48 PM, Stefano Stabellini wrote: > >>> From: Stefano Stabellini > >>> > >>> On arm64 swiotlb is often (not always) already initialized by mem_init. > >>> We don't want to initialize it twice, which would trigger a second > >>> memory allocation. Moreover, the second memory pool is typically made of > >>> high pages and ends up replacing the original memory pool of low pages. > >>> As a side effect of this change, it is possible to have low pages in > >>> swiotlb-xen on arm64. > >>> > >>> Signed-off-by: Stefano Stabellini > >> Has this been tested on x86? > > Yes, I managed to test it using QEMU. There are no effects on x86, as > > the check io_tlb_start != 0 returns false. > > I wonder though whether this is always the case.  When we are called > from pci_xen_swiotlb_init_late() for example. In that case, pci_xen_swiotlb_init_late() is called by pcifront_connect_and_init_dma, which does: if (!err && !swiotlb_nr_tbl()) { err = pci_xen_swiotlb_init_late(); if (err) dev_err(&pdev->xdev->dev, "Could not setup SWIOTLB!\n"); } pci_xen_swiotlb_init_late() is only called when swiotlb_nr_tbl() returns 0. If swiotlb_nr_tbl() returns 0, certainly the swiotlb has not been allocated yet, and the io_tlb_start != 0 check at the beginning of xen_swiotlb_init will also fail. The code will take the normal route, same as today. In short, there should be no effects on x86.