[ewg] [PATCH RFC v3] RDMA/CMA: Allocate PS_TCP ports from the host TCP port space.
Steve Wise
swise at opengridcomputing.com
Tue Nov 11 14:38:59 PST 2008
Steve Wise wrote:
> FYI: This new patch fixes a bug in my original patch, that is
> currently in ofed-1.4. The bug is that the port number allocated by
> the stack is not stored in the cm_id...
>
Ah, I see now, this info is all in the comment...
>
> Chien Tung wrote:
>> RDMA/CMA: Allocate PS_TCP ports from the host TCP port space.
>>
>> This is needed for iwarp providers that support native and rdma
>> connections over the same interface.
>>
>> Optionally turned on by the new rdma_cm unify_tcp_port_space module
>> option.
>>
>> Signed-off-by: Steve Wise <swise at opengridcomputing.com>
>> Signed-off-by: Faisal Latif <faisal.latif at intel.com>
>> Signed-off-by: Chien Tung <chien.tin.tung at intel.com>
>> ---
>> All, please comment on V3 change.
>>
>> Vlad, this is an updated version of
>> cma_0100_unified_tcp_ports.patch. If you
>> need this in another form, please let me know.
>>
>> V3 change:
>>
>> cma_get_tcp_port does not fill in the port number for the allocated
>> socket
>> when 0 is passed in for active open. Call getname to fill in the
>> port number.
>>
>> drivers/infiniband/core/cma.c | 43
>> ++++++++++++++++++++++++++++++++++++++++-
>> 1 files changed, 42 insertions(+), 1 deletions(-)
>>
>> Index: ofed_kernel/drivers/infiniband/core/cma.c
>> ===================================================================
>> --- ofed_kernel.orig/drivers/infiniband/core/cma.c
>> +++ ofed_kernel/drivers/infiniband/core/cma.c
>> @@ -58,6 +58,11 @@ static int tavor_quirk = 0;
>> module_param_named(tavor_quirk, tavor_quirk, int, 0644);
>> MODULE_PARM_DESC(tavor_quirk, "Tavor performance quirk: limit MTU to
>> 1K if > 0");
>>
>> +int unify_tcp_port_space = 0;
>> +module_param(unify_tcp_port_space, int, 0644);
>> +MODULE_PARM_DESC(unify_tcp_port_space, "Unify the host TCP and RDMA
>> port "
>> + "space allocation (default=0)");
>> +
>> #define CMA_CM_RESPONSE_TIMEOUT 20
>> #define CMA_MAX_CM_RETRIES 15
>> #define CMA_CM_MRA_SETTING (IB_CM_MRA_FLAG_DELAY | 24)
>> @@ -125,6 +130,7 @@ struct rdma_id_private {
>> struct rdma_cm_id id;
>>
>> struct rdma_bind_list *bind_list;
>> + struct socket *sock;
>> struct hlist_node node;
>> struct list_head list; /* listen_any_list or cma_device.list */
>> struct list_head listen_list; /* per device listens */
>> @@ -815,6 +821,8 @@ static void cma_release_port(struct
>> rdma_id_private *id_priv)
>> kfree(bind_list);
>> }
>> mutex_unlock(&lock);
>> + if (id_priv->sock)
>> + sock_release(id_priv->sock);
>> }
>>
>> static void cma_leave_mc_groups(struct rdma_id_private *id_priv)
>> @@ -2049,6 +2057,34 @@ static int cma_use_port(struct idr *ps, struct
>> rdma_id_private *id_priv)
>> return 0;
>> }
>>
>> +static int cma_get_tcp_port(struct rdma_id_private *id_priv)
>> +{
>> + int ret;
>> + int size;
>> + struct socket *sock;
>> +
>> + ret = sock_create_kern(AF_INET, SOCK_STREAM, IPPROTO_TCP, &sock);
>> + if (ret)
>> + return ret;
>> + ret = sock->ops->bind(sock,
>> + (struct sockaddr *) &id_priv->id.route.addr.src_addr,
>> + ip_addr_size((struct sockaddr *)
>> &id_priv->id.route.addr.src_addr));
>> + if (ret) {
>> + sock_release(sock);
>> + return ret;
>> + }
>> + size = ip_addr_size(&id_priv->id.route.addr.src_addr);
>> + ret = sock->ops->getname(sock,
>> + (struct sockaddr *) &id_priv->id.route.addr.src_addr,
>> + &size, 0);
>> + if (ret) {
>> + sock_release(sock);
>> + return ret;
>> + }
>> + id_priv->sock = sock;
>> + return 0;
>> +}
>> +
>> static int cma_get_port(struct rdma_id_private *id_priv)
>> {
>> struct idr *ps;
>> @@ -2060,6 +2096,11 @@ static int cma_get_port(struct rdma_id_private
>> *id_priv)
>> break;
>> case RDMA_PS_TCP:
>> ps = &tcp_ps;
>> + if (unify_tcp_port_space) {
>> + ret = cma_get_tcp_port(id_priv);
>> + if (ret)
>> + goto out;
>> + }
>> break;
>> case RDMA_PS_UDP:
>> ps = &udp_ps;
>> @@ -2077,7 +2118,7 @@ static int cma_get_port(struct rdma_id_private
>> *id_priv)
>> else
>> ret = cma_use_port(ps, id_priv);
>> mutex_unlock(&lock);
>> -
>> +out:
>> return ret;
>> }
>>
>> _______________________________________________
>> ewg mailing list
>> ewg at lists.openfabrics.org
>> http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
>>
>
> _______________________________________________
> ewg mailing list
> ewg at lists.openfabrics.org
> http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
More information about the ewg
mailing list