Late Attach
NvSciBuf provides a mechanism for an application to allocate an
NvSciBufObj that is shared with other peer NvSciIpcEndpoints after
allocation of NvSciBufObj, without requiring each peer
NvSciIpcEndpoint to send an unreconciled NvSciBufAttrList
during initial reconciliation of unreconciled NvSciBufAttrList
and allocation of NvSciBufObj.
To ensure that the allocated NvSciBufObj satisfies the memory
requirements of the late peer NvSciIpcEndpoint, Application must create
a proxy unreconciled NvSciBufAttrList representing the memory
requirements of the late peer NvSciIpcEndpoint. This proxy unreconciled
NvSciBufAttrList must be involved during initial reconciliation of
the unreconciled NvSciBufAttrList. NvSciBuf provides
attribute keys such as NvSciBufAttrKey_PeerLocationInfo that should be
specified in the proxy unreconciled NvSciBufAttrList during initial
reconciliation.
NvSciBuf also allows remote late peer NvSciIpcEndpoint
to gain access to already allocated NvSciBufObj, provided the
allocated NvSciBufObj satisfies the constraints of the unreconciled
NvSciBufAttrList, received from remote late peer
NvSciIpcEndpoint, through the
NvSciBufObjAttachPeer() API.
NvSciBuf may allocate a buffer of greater than the requested size to
compensate for hardware engines that may gain access to memory after allocation of
NvSciBufObj. NvSciBuf may also choose appropriate
carveout memory location, which is accessible to hardware engines that may gain access
to memory after allocation of NvSciBufObj.