NAME         top

       ibv_alloc_parent_domain(), ibv_dealloc_pd() - allocate and deallocate
       the parent domain object

SYNOPSIS         top

       #include <infiniband/verbs.h>

       struct ibv_pd *ibv_alloc_parent_domain(struct ibv_context *context", struct ibv_parent_domain_init_attr *attr);

DESCRIPTION         top

       ibv_alloc_parent_domain() allocates a parent domain object for the
       RDMA device context context.

       The parent domain object extends the normal protection domain with
       additional objects, such as a thread domain.

       A parent domain is completely interchangeable with the struct ibv_pd
       used to create it, and can be used as an input argument to any
       function accepting a struct ibv_pd.

       The behavior of each verb may be different if the verb is passed a
       parent domain struct ibv_pd that contains a struct ibv_td pointer.
       For instance the verb my choose to share resources between objects
       using the same thread domain. The exact behavior is provider

       The attr argument specifies the following:

       enum ibv_parent_domain_init_attr_mask {

       struct ibv_parent_domain_init_attr {
               struct ibv_pd *pd; /* referance to a protection domain, can't be NULL */
               struct ibv_td *td; /* referance to a thread domain, or NULL */
               uint32_t comp_mask;
               void *(*alloc)(struct ibv_pd *pd, void *pd_context, size_t size,
                              size_t alignment, uint64_t resource_type);
               void (*free)(struct ibv_pd *pd, void *pd_context, void *ptr,
                            uint64_t resource_type);
               void *pd_context;

       ibv_dealloc_pd() will deallocate the parent domain as its exposed as
       an ibv_pd pd.  All resources created with the parent domain should be
       destroyed prior to deallocating the parent domain.

ARGUMENTS         top

       pd Reference to the protection domain that this parent domain uses.

       td An optional thread domain that the parent domain uses.

       comp_mask Bit-mask of optional fields in the
       ibv_parent_domain_init_attr struct.

       alloc Custom memory allocation function for this parent domain.
       Provider memory allocations will use this function to allocate the
       needed memory.  The allocation function is passed the parent domain
       pd and the user-specified context pd_context.  In addition, the
       callback receives the size and the alignment of the requested buffer,
       as well a vendor-specific resource_type , which is derived from the
       rdma_driver_id enum (upper 32 bits) and a vendor specific resource
       code.  The function returns the pointer to the allocated buffer, or
       NULL to designate an error.  It may also return
       IBV_ALLOCATOR_USE_DEFAULT asking the callee to allocate the buffer
       using the default allocator.

       The callback makes sure the allocated buffer is initialized with
       zeros. It is also the responsibility of the callback to make sure the
       memory cannot be COWed, e.g. by using madvise(MADV_DONTFORK) or by
       allocating anonymous shared memory.

       free Callback to free memory buffers that were allocated using a
       successful alloc().

       pd_context A pointer for additional user-specific data to be
       associated with this parent domain. The pointer is passed back to the
       custom allocator functions.

RETURN VALUE         top

       ibv_alloc_parent_domain() returns a pointer to the allocated struct
       ibv_pd object, or NULL if the request fails (and sets errno to
       indicate the failure reason).

SEE ALSO         top

       ibv_alloc_parent_domain(3), ibv_dealloc_pd(3), ibv_alloc_pd(3),

AUTHORS         top

       Alex Rosenbaum <>

       Yishai Hadas <>

COLOPHON         top

       This page is part of the rdma-core (RDMA Core Userspace Libraries and
       Daemons) project.  Information about the project can be found at 
       ⟨⟩.  If you have a bug report
       for this manual page, send it to  This
       page was obtained from the project's upstream Git repository
       ⟨⟩ on 2020-05-27.  (At
       that time, the date of the most recent commit that was found in the
       repository was 2020-05-27.)  If you discover any rendering problems
       in this HTML version of the page, or you believe there is a better or
       more up-to-date source for the page, or you have corrections or
       improvements to the information in this COLOPHON (which is not part
       of the original manual page), send a mail to

libibverbs                       2017-11-06       IBV_ALLOC_PARENT_DOMAIN(3)

Pages that refer to this page: ibv_alloc_parent_domain(3)ibv_alloc_td(3)ibv_create_cq_ex(3)