Hi, On 12/4/19 3:22 AM, AM wrote: > Hi Lu Baolu, > > I tried kernel 4.18.0-147.6.el8.x86_64+debug and used the following API > sequence for mapping multiple hugepages: > > get_user_pages_fast() > sg_alloc_table_from_pages() > // also tried sg_alloc_table() w/ sg_set_page() using 1GB size for each > entry > dma_map_sg() > > I'm able to DMA upto 1GB successfully and validate the data. Also, DMA > above 1GB completes w/o any error, but data isn't correct starting > immediately after 1GB i.e. second GB offset 0x40000000 starts showing > data mismatches. I am not sure whether you followed the right way to build a sg list. But I do care that Intel IOMMU does dma_map_sg() right. Can you please try the attached patch? It can help you get more tracing information when you call dma_map_sg(). Best regards, baolu > > I've used get_user_pages_fast() in two ways to no avail: > 1. populate page array w/ first page of 1GB hugepage and used > sg_set_page() for >    setting 1GB size of the page entry. This debugging effort uses the fact >    that all pages following the first page of huge page start address > are contiguous. >    Ideally dma_map_sg() should coalesce contiguous pages, and my > intention was to collect >    more data from debugging. > 2. populate page array w/ all pages from all hugepages > > Thanks, > -am > > > > On Sun, Dec 1, 2019 at 7:33 PM Anand Misra > wrote: > > [+iommu_list] > > Application isn't aware of hugepage but a userspace (lower) level > stack is aware of the type of memory being allocated on behalf of > application, which in turn communicates w/ driver via ioctl. I'm > trying to make it more agnostic by using dma_map_sg() when multiple > GBs are required by application. Otherwise, I'm using > dmap_map_page(). Admittedly, I'm learning these concepts/APIs for > Linux along the way. > > Thanks, > -am > > > On Sun, Dec 1, 2019 at 7:12 PM Lu Baolu > wrote: > > Hi, > > On 12/2/19 11:00 AM, Anand Misra wrote: > > Thanks, Lu Baolu. This is the dev version we've in our > company. I can > > try on a Ubuntu with a recent kernel version. Although, do > you think I'm  > going in the right direction? Is it possible to > have multiple hugepages > > mapped via iommu to get contiguous mapping for DMA? > > > > You mentioned: > > " > I'm trying to use iommu for multiple hugepages (mmap'ed by > process and > pushed to driver via ioctl). The expectation is to have multiple > hugepages mapped via iommu with each huge page having an entry > in iommu > (i.e. minimize table walk for DMA). Is this possible? > " > > Currently huge page mapping is hidden in iommu driver according > to the > iommu capability and size of map range. Why do you want to be > aware of > it in driver or even application level? > > Best regards, > baolu > > > -am > > > > > > On Sun, Dec 1, 2019 at 6:24 PM Lu Baolu > > > >> wrote: > > > >     Hi, > > > >     On 12/2/19 9:46 AM, Anand Misra wrote: > >      > Hello: > >      > > >      > I'm in process of adding iommu support in my driver > for a PCIe > >     device. > >      > The device doesn't publish ACS/ATS via its config > space. I've > >     following > >      > config: > >      > > >      > Linux cmdline: "intel-iommu=on iommu=pt > >      > vfio_iommu_type1.allow_unsafe_interrupts=1 > >     pcie_acs_override=downstream" > >      > Centos kernel: 3.10.0-1062.1.2.el7.x86_64 > >      > > > > >     Can you please use the latest kernel for test? 3.10 seems > to be pretty > >     old and there are a lot of changes after it. > > > >     Best regards, > >     baolu > > >