> > Is it possible for the page to be bigger than 4GB? If so then yes you
> > might be chopping off high-order bits or something.
> Yes it is possible.
> > A MR can be created with an iov_base of say 0xffffffff00000000.
> > Then any sge.addr entries would be the iob_base + any offset.
But the code we're talking about is:
/* to in the WQE == the offset into the page */
wqe->recv.sgl[i].to = cpu_to_be64(((u32) wr->sg_list[i].addr) %
(1UL << (12 + page_size[i])));
so it seems the top address bits don't matter unless page_size[i] is at
least 20 -- in which case using 1UL to shift overflows on 32 bits anyway...