On 5/13/08, <b class="gmail_sendername">Sean Hefty</b> <<a href="mailto:sean.hefty@intel.com">sean.hefty@intel.com</a>> wrote:<br>
<br>
<div><span class="gmail_quote"></span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">This will race with other user calls.  I've found it fairly difficult for the<br>
 rdma_cm to call back into its own API and avoid racing with the user trying to<br> destroy the cm_id.  None of the APIs are coded to allow calling them<br> simultaneously with destroy.</blockquote><div><br>
I see.<br>
 </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> A better solution for this may be for the rdma_cm to simply notify the user that<br>
 the IP mapping for their RDMA device has changed.  The user can then disconnect,<br> with the appropriate synchronization, if they want their RDMA connection to<br> follow the IP address.  </blockquote><div><br>
Yes, this is possible, I have tried to implement it at the rdma-cm to
avoid having each ULP do it at their code, if you think its practially
impossible for the rdma-cm to call its own API, I will can change this
into delivering disconnected event.<br>
</div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">(If I understood correctly, the reason for this is to allow failing back to a repaired port.)</blockquote>
<div><br>
indeed, this is a possible use case.<br>
</div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">>+      list_for_each_entry(cma_dev, &dev_list, list)<br>
>+              list_for_each_entry(id_priv,
&cma_dev->id_list, list) {<br>
>+                      dev_addr
= &id_priv->id.route.addr.dev_addr;<br>
>+                      if
(!memcmp(dev_addr->src_netdev_name, ndev->name, IFNAMSIZ) &&<br>
>+                              memcmp(dev_addr->src_dev_addr,
ndev->dev_addr,ndev->addr_len)<br>
>+                                      if
(id_priv->ha_mode == RDMA_ALIGN_WITH_NETDEVICE)<br>>+                                          
schedule_work(&id_priv->ha_work);<br><br>As Roland mentioned, this is racy in the areas he pointed out.  This will take<br> some thought to handle correctly.<br> </blockquote></div><br>
OK, I will try to improve things here, any hints/directions would be very much appreciated...<br>
<br>
Or.<br>