On Fri, Sep 04, 2020 at 07:41:47PM -0300, Jason Gunthorpe wrote: > @@ -33,11 +34,17 @@ static inline int ib_umem_offset(struct ib_umem *umem) > return umem->address & ~PAGE_MASK; > } > > +static inline size_t ib_umem_num_dma_blocks(struct ib_umem *umem, > + unsigned long pgsz) > +{ > + return (ALIGN(umem->iova + umem->length, pgsz) - > + ALIGN_DOWN(umem->iova, pgsz)) / > + pgsz; > +} 0-day says this triggers a __udivdi3 error because iova is 64 bit, I'll change this to: static inline size_t ib_umem_num_dma_blocks(struct ib_umem *umem, unsigned long pgsz) { - return (ALIGN(umem->iova + umem->length, pgsz) - - ALIGN_DOWN(umem->iova, pgsz)) / + return (size_t)((ALIGN(umem->iova + umem->length, pgsz) - + ALIGN_DOWN(umem->iova, pgsz))) / pgsz; } Jason