On Tue, Nov 08, 2022 at 09:19:17AM -0500, Eric Farman wrote: > On Tue, 2022-11-08 at 09:54 -0400, Jason Gunthorpe wrote: > > On Tue, Nov 08, 2022 at 08:50:53AM -0500, Matthew Rosato wrote: > > > > > FWIW, vfio-pci via s390 is working fine so far, though I'll put it > > > through more paces over the next few weeks and report if I find > > > anything. > > > > OK great > > > > > As far as mdev drivers... > > > > > > -ccw: Sounds like Eric is already aware there is an issue and is > > > investigating (I see errors as well). > > I -think- the problem for -ccw is that the new vfio_pin_pages requires > the input addresses to be page-aligned, and while most of ours are, the > first one in any given transaction may not be. We never bothered to > mask off the addresses since it was handled for us, and we needed to > keep the offsets anyway. > > By happenstance, I had some code that would do the masking ourselves > (for an unrelated reason); I'll see if I can get that fit on top and if > it helps matters. After coffee. Oh, yes, that makes alot of sense. Ah, if that is how VFIO worked we could match it like below: EXPORT_SYMBOL_NS_GPL(iommufd_access_unpin_pages, IOMMUFD); static bool iopt_area_contig_is_aligned(struct iopt_area_contig_iter *iter, - bool first) + bool first, unsigned long first_iova) { - if (iopt_area_start_byte(iter->area, iter->cur_iova) % PAGE_SIZE) + unsigned long start_offset = first ? (first_iova % PAGE_SIZE) : 0; + + if ((iopt_area_start_byte(iter->area, iter->cur_iova) % PAGE_SIZE) != + start_offset) return false; if (!iopt_area_contig_done(iter) && @@ -607,7 +610,7 @@ int iommufd_access_pin_pages(struct iommufd_access *access, unsigned long iova, iopt_area_iova_to_index(area, iter.cur_iova); if (area->prevent_access || - !iopt_area_contig_is_aligned(&iter, first)) { + !iopt_area_contig_is_aligned(&iter, first, iova)) { rc = -EINVAL; goto err_remove; } Jason