[ofa-general] ibv_reg_mr() failing to an mmap'ed iomemory region.
Peter W. Morreale
pmorreale at novell.com
Wed Aug 27 15:16:04 PDT 2008
Hi all,
I have an RDMA application that is failing in ibv_reg_mr() and I'm
unsure why.
The application consists of two parts, a userspace application that is
performing the RDMA transfers via verbs, and a kernel module that
maintains the memory space used in the transfers.
This is on a SUSE 2.6.22 kernel.
The kernel module manages a contiguous region of physical memory and
provides a mmap interface to map the regions to userspace. The
application dirties the memory and periodically transfers the contents
to a remote node.
The transfer algorithm supports multiple transports including Ethernet,
SDP, and RDMA. Or rather, is designed to support RDMA. :-)
Things work fine for Ethernet sockets and SDP, however I consistently
fail attempting to ibv_reg_mr(). Since this is a boolean operation
(returns a pointer or NULL) I'm not sure what is wrong.
Note that I can bypass the "allocation" portion of the app and
substitute a malloc() instead of asking for the memory region in the
kernel module. In this case, RDMA (e.g: ibv_reg_mr()) works
flawlessly.
Since the other transports (and application) can reference the kernel
memory region without issue, I'm a little lost as to what is preventing
ibv_reg_mr() from accessing this space.
Note that this memory is marked IORESOURCE_BUSY | IORESOURCE_IO. Does
the kernel-side of ibv_reg_mr() (assuming there is one) do a
__request_region()?
Thanks for any and all comments...
-PWM
More information about the general
mailing list