On Wed, 2013-09-25 at 17:54 +0200, Joerg Roedel wrote: > On Sat, Sep 21, 2013 at 09:59:00PM -0500, David Woodhouse wrote: > > I *hate* the bizarre calling convention for iommu_unmap(). Is it > > actually clearly documented anywhere? Why on earth is it not just > > returning void, and expected to unmap what it was *asked* to unmap? > > Yeah, I agree that this should be documented since it is quite > non-standard/non-obvious behaviour of a function. The reason the > interface was implemented this way is that the caller should not need to > know (or keep track of) the page-size which was used to map a given iova.
Why would it ever care? If it *happens* to map something that can use large pages, yay!. If it subsequently breaks apart those large pages by unmapping 4KiB in the middle, let the IOMMU driver break that apart. And why are we not allowed to unmap more than a single page at a time? Doing unmaps in small pieces (with a full flush between every one) is *horribly* slow. > So the interface is basically, that you give an iova and a size and the > iommu driver unmaps _at_least_ a region of that size. But if you ask for > a 4k region which is mapped by a 2M page then the whole 2M are unmapped. > The return value tells you how much was actually unmapped. > > Not the best interface, I know. We should come up with a better way to > handle this. Seriously, just the address and the size. Let the IOMMU code deal with whether it can *actually* use large pages on the particular set of IOMMUs that are in use for the devices you've added to the domain so far. -- dwmw2
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ iommu mailing list [email protected] https://lists.linuxfoundation.org/mailman/listinfo/iommu
