[openib-general] IBV_WC_LOC_PROT_ERR on RDMA read into huge paged buffers acquiered with shmget....

Bub Thomas thomas.bub at thomson.net
Wed Nov 22 23:08:43 PST 2006


Dotan,
this was a good shot.
I was fooled by a (uint64_t) cast on a 32 bit void*.
This worked on an x86 platform with an x86 and on an x86_64 platform
with an x86_64 executable but NOT for an x86_64 platform and an x86
executable.
Unfortunately the later one is my only scenario for x86_64 since I want
to have a x86 executable only.
While I didn't expect that an (uint64_t) does propagate the "sign" out
of a 32 bit void*, the only thing that helped here was a
(uint64_t)(uintptr_t) on that void*.
Thanks
Thomas

> 
> 
> I saw a similar issue in the past in those addresses (where the MSB of
> the address is set):
> In IB we are using 64 bit addresses, maybe you extend the address of
the
> buffer using signed variable...
> 
> for example it should be:
> sg.addr = (unsigned long)buf
> and not
> sg.addr = (long)buf
> 
> thanks
> Dotan







More information about the general mailing list