> +             if ((dma_addr & (PAGE_SIZE - 1)) ||
> +                 ((dma_addr + dma_len) & (PAGE_SIZE - 1)) ||
> +                 ((i == (sg_cnt - 1)) && !unaligned)) {
> +                     srp_fmr->io_addr = dma_addr & PAGE_MASK;
> +                     ++unaligned;
> +             }
> +
> +             if (unaligned <= 1) {
> +                     cur_len += dma_len;
> +                     for (base_addr = dma_addr;
> +                          (dma_addr & PAGE_MASK) <=
> +                          ((base_addr + dma_len - 1) & PAGE_MASK);
> +                          dma_addr += PAGE_SIZE)
> +                             dma_pages[page_cnt++] = dma_addr & PAGE_MASK;
> +             }
> +
> +             if ((unaligned > 1) || (i == (sg_cnt - 1))) {

this is definitly completely broken.  dma_addr_ts are opaqueue handles,
some platforms use high bits in them for iommu flags.

_______________________________________________
openib-general mailing list
[email protected]
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to