lkml.org 
[lkml]   [2012]   [Aug]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: Is iommu_num_pages() broken ?
    Date
    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."


    \
     
     \ /
      Last update: 2012-08-05 09:21    [W:0.026 / U:28.980 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site