[rds-devel] [ofa-general] [PATCH RFC] rds: add iwarp support
Olaf Kirch
olaf.kirch at oracle.com
Fri Jul 4 04:46:51 PDT 2008
Oops. There's an even bigger problem I didn't notice until now.
You pass the rds socket into get_mr in order to get a rds_conn
and the QP. Because you need a QP to post your fastreg WR to.
However, that doesn't work the way you approach it.
The rs_conn inside the rds_socket is just a cached pointer.
It's what we got when we called rds_conn_lookup in the
most recent call to rds_sendmsg - we do this for efficiency
reasons, because it helps us avoid taking a spinlock.
So in other words, rds_sock->rs_conn may be NULL, it may
point to some random unrelated rds_connection - and in some
cases it may even point to the rds_conn you're interested
in.
We have two choices here
- change the GET_MR API so that the caller includes
the destination IP - then we can always locate the
correct conn.
- require that iWARP RDMA only works with the new
cmsg based interface; in this case the MR mapping
happens from inside sendmsg, where we naturally
have the destination address
Neither of these will make the Oracle IPC layer happy.
AFAIK Oracle IPC doesn't pass around the destination IP
when allocating a MR using GET_MR. And it doesn't support
the new get_mr interface either.
To what degree are we bound to a specific QP? In other words,
if I want to do RDMA over a given QP, do I have to perform
the fastreg over this specific QP, or could I use any QP?
So, would it work to create a QP specifically for the purpose
of performing fastregs?
If a fastreg is bound to a specific QP, then what happens if
the RDS connection bounces and we have to allocate a fresh
QP? Would that render all existing fastregs invalid?
Olaf
--
Olaf Kirch | --- o --- Nous sommes du soleil we love when we play
okir at lst.de | / | \ sol.dhoop.naytheet.ah kin.ir.samse.qurax
More information about the general
mailing list