On Tuesday 24 June 2008 00:53, Roland Dreier wrote:
>  > @@ -769,6 +775,7 @@ struct ib_ucontext {
>  >    struct list_head        srq_list;
>  >    struct list_head        ah_list;
>  >    struct list_head        xrc_domain_list;
>  > +  struct list_head        xrc_reg_qp_list;
>  >    int                     closing;
>  >  };
> 
> Wouldn't it be cleaner to keep the like of recv QPs per xrcd?  Then you
> wouldn't have to do stuff like:
> 
>  > +  list_for_each_entry(tmp, &file->ucontext->xrc_reg_qp_list, list)
>  > +          if (cmd.xrcd_handle == tmp->domain_handle) {
> 
> instead you could just do a list_empty() test.
> 
Currently, there is no per-process object for xrc domains. I needed a list
of qp's registered ***per-process***, so that I could prevent closing a domain 
(for that process)
while that process still had registered QPs on that domain.  This was 
especially true if
the current process was the last one using the domain -- so that the domain 
itself would be deleted
when close_domain was invoked.

With the check in place, if the user tried to close the domain while there were 
QPs registered,
he gets an error.  If the user does not close the domain, and does not 
unregister all the QPs
for that process, this gets done in ib_uverbs_cleanup_ucontext() (in the proper 
order), so there
are no resource leaks.

I think that here we have "6 of one, half a dozen of the other":
If I register QPs per xrcd, I either have to create and manage an xrcd
user-space specific object (e.g., struct ib_uxrcd_object) -- instead of the 
generic ib_uobject,
or I need to save the process ID per QP in an xrcd list of QPs -- and then I 
would need to
check for equality of PIDs, rather than domain handles.

I think the way things are now is relatively simpler.

- Jack
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to