Messages in this thread | | | From | Andreas Schwab <> | Subject | Re: Is iommu_num_pages() broken ? | Date | Sun, 05 Aug 2012 08:39:39 +0200 |
| |
Benjamin Herrenschmidt <benh@kernel.crashing.org> writes:
> static inline unsigned long iommu_num_pages(unsigned long addr, > unsigned long len, > unsigned long io_page_size) > { > unsigned long size = (addr & (io_page_size - 1)) + len; > > return DIV_ROUND_UP(size, io_page_size); > } > > > That doesn't look right to me... > > The powerpc iommu code at least uses that with an addr which may not be > page aligned (ie, result of sg_virt() which include the offset). > > The above code will align the start before adding the len which is wrong
addr & (io_page_size - 1) computes the offset into the page pointed to by addr. Looks right to me.
addr & ~(io_page_size - 1) would round addr down to the start of the page.
Andreas.
-- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different."
| |