[openib-general] Re: [RFC][PATCH] OpenIB uDAPL extension proposal - sample immed data and atomic api's

Arlin Davis ardavis at ichips.intel.com
Tue Jan 3 14:18:18 PST 2006


James Lentini wrote:

>On Fri, 23 Dec 2005, Arlin Davis wrote:
>
>arlin>
>arlin> A single entry point is still there with this patch, I just 
>arlin> defined it a little different with a function definition for 
>arlin> better DAT API mappings. The idea was to replace the existing 
>arlin> pvoid extension definition with this new one. Can you give me 
>arlin> an idea of how you would map these extended DAT calls to this 
>arlin> pvoid function definition?
>
>For uDAPL, the DAT_PROVIDER structure is defined as follows:
>
>struct dat_provider
>{
>    const char *                        device_name;
>    DAT_PVOID                           extension;
>    ...
>
>You could create a well known extensions API by defining a structure 
>with several function pointers
>
>struct dat_atomic_extensions
>{
>    DAT_RETURN (*cmp_and_swap_func)(IN DAT_EP_HANDLE ep_handle,
>                                    IN DAT_UINT64 cmp_value,
>                                    IN DAT_UINT64 swap_value, 
>                                    IN DAT_LMR_TRIPLE *local_iov, 
>                                    IN DAT_DTO_COOKIE user_cookie, 
>                                    IN DAT_RMR_TRIPLE *remote_iov, 
>                                    IN DAT_COMPLETION_FLAGS completion_flags);
>    ...
>}
>
>and require the dat_provider's extensions member to point to your new 
>extension struct.
>
>To make the API easier to use, you could also create macros, similar 
>to the standard DAT macros, to reach inside an objects provider 
>structure and call the correct extension function.
>
>#define dat_ep_post_cmp_and_swap(ep, cmp, swap, local_iov, cookie, 
>remote_iov, flags) \
>        (*DAT_HANDLE_TO_EXTENSION (ep)->cmp_and_swap_func) (\
>                (ep),               \
>                (cmp),              \
>                (swap),             \
>                (local_iov),        \
>                (cookie),           \
>                (remote_iov),       \
>                (flags))
>
>A drawback to this approach is that adding new extensions requires 
>synchronizing with the original extension specification document. To 
>eliminate that issue, you could require that the dat_provider's 
>extension member point to a typed list of these sorts of extension 
>structures.
>  
>
The other drawback is that the consumer calls directly into a table with 
no validation of provider extensions nor handles. The method I am 
proposing uses the existing dat_api layer for handle validation, a 
provider extension validation during the open, and provider extension 
operation validation with the extension operation parameter in the new 
DAT_EXTENSION_FUNC typedef.






More information about the general mailing list