1 #define NVOC_P2P_API_H_PRIVATE_ACCESS_ALLOWED
2 #include "nvoc/runtime.h"
3 #include "nvoc/rtti.h"
4 #include "nvtypes.h"
5 #include "nvport/nvport.h"
6 #include "nvport/inline/util_valist.h"
7 #include "utils/nvassert.h"
8 #include "g_p2p_api_nvoc.h"
9 
10 #ifdef DEBUG
11 char __nvoc_class_id_uniqueness_check_0x3982b7 = 1;
12 #endif
13 
14 extern const struct NVOC_CLASS_DEF __nvoc_class_def_P2PApi;
15 
16 extern const struct NVOC_CLASS_DEF __nvoc_class_def_Object;
17 
18 extern const struct NVOC_CLASS_DEF __nvoc_class_def_RsResource;
19 
20 extern const struct NVOC_CLASS_DEF __nvoc_class_def_RmResourceCommon;
21 
22 extern const struct NVOC_CLASS_DEF __nvoc_class_def_RmResource;
23 
24 void __nvoc_init_P2PApi(P2PApi*);
25 void __nvoc_init_funcTable_P2PApi(P2PApi*);
26 NV_STATUS __nvoc_ctor_P2PApi(P2PApi*, struct CALL_CONTEXT * arg_pCallContext, struct RS_RES_ALLOC_PARAMS_INTERNAL * arg_pParams);
27 void __nvoc_init_dataField_P2PApi(P2PApi*);
28 void __nvoc_dtor_P2PApi(P2PApi*);
29 extern const struct NVOC_EXPORT_INFO __nvoc_export_info_P2PApi;
30 
31 static const struct NVOC_RTTI __nvoc_rtti_P2PApi_P2PApi = {
32     /*pClassDef=*/          &__nvoc_class_def_P2PApi,
33     /*dtor=*/               (NVOC_DYNAMIC_DTOR) &__nvoc_dtor_P2PApi,
34     /*offset=*/             0,
35 };
36 
37 static const struct NVOC_RTTI __nvoc_rtti_P2PApi_Object = {
38     /*pClassDef=*/          &__nvoc_class_def_Object,
39     /*dtor=*/               &__nvoc_destructFromBase,
40     /*offset=*/             NV_OFFSETOF(P2PApi, __nvoc_base_RmResource.__nvoc_base_RsResource.__nvoc_base_Object),
41 };
42 
43 static const struct NVOC_RTTI __nvoc_rtti_P2PApi_RsResource = {
44     /*pClassDef=*/          &__nvoc_class_def_RsResource,
45     /*dtor=*/               &__nvoc_destructFromBase,
46     /*offset=*/             NV_OFFSETOF(P2PApi, __nvoc_base_RmResource.__nvoc_base_RsResource),
47 };
48 
49 static const struct NVOC_RTTI __nvoc_rtti_P2PApi_RmResourceCommon = {
50     /*pClassDef=*/          &__nvoc_class_def_RmResourceCommon,
51     /*dtor=*/               &__nvoc_destructFromBase,
52     /*offset=*/             NV_OFFSETOF(P2PApi, __nvoc_base_RmResource.__nvoc_base_RmResourceCommon),
53 };
54 
55 static const struct NVOC_RTTI __nvoc_rtti_P2PApi_RmResource = {
56     /*pClassDef=*/          &__nvoc_class_def_RmResource,
57     /*dtor=*/               &__nvoc_destructFromBase,
58     /*offset=*/             NV_OFFSETOF(P2PApi, __nvoc_base_RmResource),
59 };
60 
61 static const struct NVOC_CASTINFO __nvoc_castinfo_P2PApi = {
62     /*numRelatives=*/       5,
63     /*relatives=*/ {
64         &__nvoc_rtti_P2PApi_P2PApi,
65         &__nvoc_rtti_P2PApi_RmResource,
66         &__nvoc_rtti_P2PApi_RmResourceCommon,
67         &__nvoc_rtti_P2PApi_RsResource,
68         &__nvoc_rtti_P2PApi_Object,
69     },
70 };
71 
72 const struct NVOC_CLASS_DEF __nvoc_class_def_P2PApi =
73 {
74     /*classInfo=*/ {
75         /*size=*/               sizeof(P2PApi),
76         /*classId=*/            classId(P2PApi),
77         /*providerId=*/         &__nvoc_rtti_provider,
78 #if NV_PRINTF_STRINGS_ALLOWED
79         /*name=*/               "P2PApi",
80 #endif
81     },
82     /*objCreatefn=*/        (NVOC_DYNAMIC_OBJ_CREATE) &__nvoc_objCreateDynamic_P2PApi,
83     /*pCastInfo=*/          &__nvoc_castinfo_P2PApi,
84     /*pExportInfo=*/        &__nvoc_export_info_P2PApi
85 };
86 
__nvoc_thunk_RmResource_p2papiShareCallback(struct P2PApi * pResource,struct RsClient * pInvokingClient,struct RsResourceRef * pParentRef,RS_SHARE_POLICY * pSharePolicy)87 static NvBool __nvoc_thunk_RmResource_p2papiShareCallback(struct P2PApi *pResource, struct RsClient *pInvokingClient, struct RsResourceRef *pParentRef, RS_SHARE_POLICY *pSharePolicy) {
88     return rmresShareCallback((struct RmResource *)(((unsigned char *)pResource) + __nvoc_rtti_P2PApi_RmResource.offset), pInvokingClient, pParentRef, pSharePolicy);
89 }
90 
__nvoc_thunk_RmResource_p2papiCheckMemInterUnmap(struct P2PApi * pRmResource,NvBool bSubdeviceHandleProvided)91 static NV_STATUS __nvoc_thunk_RmResource_p2papiCheckMemInterUnmap(struct P2PApi *pRmResource, NvBool bSubdeviceHandleProvided) {
92     return rmresCheckMemInterUnmap((struct RmResource *)(((unsigned char *)pRmResource) + __nvoc_rtti_P2PApi_RmResource.offset), bSubdeviceHandleProvided);
93 }
94 
__nvoc_thunk_RsResource_p2papiControl(struct P2PApi * pResource,struct CALL_CONTEXT * pCallContext,struct RS_RES_CONTROL_PARAMS_INTERNAL * pParams)95 static NV_STATUS __nvoc_thunk_RsResource_p2papiControl(struct P2PApi *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) {
96     return resControl((struct RsResource *)(((unsigned char *)pResource) + __nvoc_rtti_P2PApi_RsResource.offset), pCallContext, pParams);
97 }
98 
__nvoc_thunk_RmResource_p2papiGetMemInterMapParams(struct P2PApi * pRmResource,RMRES_MEM_INTER_MAP_PARAMS * pParams)99 static NV_STATUS __nvoc_thunk_RmResource_p2papiGetMemInterMapParams(struct P2PApi *pRmResource, RMRES_MEM_INTER_MAP_PARAMS *pParams) {
100     return rmresGetMemInterMapParams((struct RmResource *)(((unsigned char *)pRmResource) + __nvoc_rtti_P2PApi_RmResource.offset), pParams);
101 }
102 
__nvoc_thunk_RmResource_p2papiGetMemoryMappingDescriptor(struct P2PApi * pRmResource,struct MEMORY_DESCRIPTOR ** ppMemDesc)103 static NV_STATUS __nvoc_thunk_RmResource_p2papiGetMemoryMappingDescriptor(struct P2PApi *pRmResource, struct MEMORY_DESCRIPTOR **ppMemDesc) {
104     return rmresGetMemoryMappingDescriptor((struct RmResource *)(((unsigned char *)pRmResource) + __nvoc_rtti_P2PApi_RmResource.offset), ppMemDesc);
105 }
106 
__nvoc_thunk_RsResource_p2papiGetRefCount(struct P2PApi * pResource)107 static NvU32 __nvoc_thunk_RsResource_p2papiGetRefCount(struct P2PApi *pResource) {
108     return resGetRefCount((struct RsResource *)(((unsigned char *)pResource) + __nvoc_rtti_P2PApi_RsResource.offset));
109 }
110 
__nvoc_thunk_RsResource_p2papiControlFilter(struct P2PApi * pResource,struct CALL_CONTEXT * pCallContext,struct RS_RES_CONTROL_PARAMS_INTERNAL * pParams)111 static NV_STATUS __nvoc_thunk_RsResource_p2papiControlFilter(struct P2PApi *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) {
112     return resControlFilter((struct RsResource *)(((unsigned char *)pResource) + __nvoc_rtti_P2PApi_RsResource.offset), pCallContext, pParams);
113 }
114 
__nvoc_thunk_RsResource_p2papiAddAdditionalDependants(struct RsClient * pClient,struct P2PApi * pResource,RsResourceRef * pReference)115 static void __nvoc_thunk_RsResource_p2papiAddAdditionalDependants(struct RsClient *pClient, struct P2PApi *pResource, RsResourceRef *pReference) {
116     resAddAdditionalDependants(pClient, (struct RsResource *)(((unsigned char *)pResource) + __nvoc_rtti_P2PApi_RsResource.offset), pReference);
117 }
118 
__nvoc_thunk_RmResource_p2papiControlSerialization_Prologue(struct P2PApi * pResource,struct CALL_CONTEXT * pCallContext,struct RS_RES_CONTROL_PARAMS_INTERNAL * pParams)119 static NV_STATUS __nvoc_thunk_RmResource_p2papiControlSerialization_Prologue(struct P2PApi *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) {
120     return rmresControlSerialization_Prologue((struct RmResource *)(((unsigned char *)pResource) + __nvoc_rtti_P2PApi_RmResource.offset), pCallContext, pParams);
121 }
122 
__nvoc_thunk_RmResource_p2papiControl_Prologue(struct P2PApi * pResource,struct CALL_CONTEXT * pCallContext,struct RS_RES_CONTROL_PARAMS_INTERNAL * pParams)123 static NV_STATUS __nvoc_thunk_RmResource_p2papiControl_Prologue(struct P2PApi *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) {
124     return rmresControl_Prologue((struct RmResource *)(((unsigned char *)pResource) + __nvoc_rtti_P2PApi_RmResource.offset), pCallContext, pParams);
125 }
126 
__nvoc_thunk_RsResource_p2papiCanCopy(struct P2PApi * pResource)127 static NvBool __nvoc_thunk_RsResource_p2papiCanCopy(struct P2PApi *pResource) {
128     return resCanCopy((struct RsResource *)(((unsigned char *)pResource) + __nvoc_rtti_P2PApi_RsResource.offset));
129 }
130 
__nvoc_thunk_RsResource_p2papiUnmap(struct P2PApi * pResource,struct CALL_CONTEXT * pCallContext,RsCpuMapping * pCpuMapping)131 static NV_STATUS __nvoc_thunk_RsResource_p2papiUnmap(struct P2PApi *pResource, struct CALL_CONTEXT *pCallContext, RsCpuMapping *pCpuMapping) {
132     return resUnmap((struct RsResource *)(((unsigned char *)pResource) + __nvoc_rtti_P2PApi_RsResource.offset), pCallContext, pCpuMapping);
133 }
134 
__nvoc_thunk_RsResource_p2papiIsPartialUnmapSupported(struct P2PApi * pResource)135 static NvBool __nvoc_thunk_RsResource_p2papiIsPartialUnmapSupported(struct P2PApi *pResource) {
136     return resIsPartialUnmapSupported((struct RsResource *)(((unsigned char *)pResource) + __nvoc_rtti_P2PApi_RsResource.offset));
137 }
138 
__nvoc_thunk_RsResource_p2papiPreDestruct(struct P2PApi * pResource)139 static void __nvoc_thunk_RsResource_p2papiPreDestruct(struct P2PApi *pResource) {
140     resPreDestruct((struct RsResource *)(((unsigned char *)pResource) + __nvoc_rtti_P2PApi_RsResource.offset));
141 }
142 
__nvoc_thunk_RsResource_p2papiMapTo(struct P2PApi * pResource,RS_RES_MAP_TO_PARAMS * pParams)143 static NV_STATUS __nvoc_thunk_RsResource_p2papiMapTo(struct P2PApi *pResource, RS_RES_MAP_TO_PARAMS *pParams) {
144     return resMapTo((struct RsResource *)(((unsigned char *)pResource) + __nvoc_rtti_P2PApi_RsResource.offset), pParams);
145 }
146 
__nvoc_thunk_RsResource_p2papiIsDuplicate(struct P2PApi * pResource,NvHandle hMemory,NvBool * pDuplicate)147 static NV_STATUS __nvoc_thunk_RsResource_p2papiIsDuplicate(struct P2PApi *pResource, NvHandle hMemory, NvBool *pDuplicate) {
148     return resIsDuplicate((struct RsResource *)(((unsigned char *)pResource) + __nvoc_rtti_P2PApi_RsResource.offset), hMemory, pDuplicate);
149 }
150 
__nvoc_thunk_RmResource_p2papiControlSerialization_Epilogue(struct P2PApi * pResource,struct CALL_CONTEXT * pCallContext,struct RS_RES_CONTROL_PARAMS_INTERNAL * pParams)151 static void __nvoc_thunk_RmResource_p2papiControlSerialization_Epilogue(struct P2PApi *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) {
152     rmresControlSerialization_Epilogue((struct RmResource *)(((unsigned char *)pResource) + __nvoc_rtti_P2PApi_RmResource.offset), pCallContext, pParams);
153 }
154 
__nvoc_thunk_RmResource_p2papiControl_Epilogue(struct P2PApi * pResource,struct CALL_CONTEXT * pCallContext,struct RS_RES_CONTROL_PARAMS_INTERNAL * pParams)155 static void __nvoc_thunk_RmResource_p2papiControl_Epilogue(struct P2PApi *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) {
156     rmresControl_Epilogue((struct RmResource *)(((unsigned char *)pResource) + __nvoc_rtti_P2PApi_RmResource.offset), pCallContext, pParams);
157 }
158 
__nvoc_thunk_RsResource_p2papiUnmapFrom(struct P2PApi * pResource,RS_RES_UNMAP_FROM_PARAMS * pParams)159 static NV_STATUS __nvoc_thunk_RsResource_p2papiUnmapFrom(struct P2PApi *pResource, RS_RES_UNMAP_FROM_PARAMS *pParams) {
160     return resUnmapFrom((struct RsResource *)(((unsigned char *)pResource) + __nvoc_rtti_P2PApi_RsResource.offset), pParams);
161 }
162 
__nvoc_thunk_RsResource_p2papiMap(struct P2PApi * pResource,struct CALL_CONTEXT * pCallContext,RS_CPU_MAP_PARAMS * pParams,RsCpuMapping * pCpuMapping)163 static NV_STATUS __nvoc_thunk_RsResource_p2papiMap(struct P2PApi *pResource, struct CALL_CONTEXT *pCallContext, RS_CPU_MAP_PARAMS *pParams, RsCpuMapping *pCpuMapping) {
164     return resMap((struct RsResource *)(((unsigned char *)pResource) + __nvoc_rtti_P2PApi_RsResource.offset), pCallContext, pParams, pCpuMapping);
165 }
166 
__nvoc_thunk_RmResource_p2papiAccessCallback(struct P2PApi * pResource,struct RsClient * pInvokingClient,void * pAllocParams,RsAccessRight accessRight)167 static NvBool __nvoc_thunk_RmResource_p2papiAccessCallback(struct P2PApi *pResource, struct RsClient *pInvokingClient, void *pAllocParams, RsAccessRight accessRight) {
168     return rmresAccessCallback((struct RmResource *)(((unsigned char *)pResource) + __nvoc_rtti_P2PApi_RmResource.offset), pInvokingClient, pAllocParams, accessRight);
169 }
170 
171 const struct NVOC_EXPORT_INFO __nvoc_export_info_P2PApi =
172 {
173     /*numEntries=*/     0,
174     /*pExportEntries=*/  0
175 };
176 
177 void __nvoc_dtor_RmResource(RmResource*);
__nvoc_dtor_P2PApi(P2PApi * pThis)178 void __nvoc_dtor_P2PApi(P2PApi *pThis) {
179     __nvoc_p2papiDestruct(pThis);
180     __nvoc_dtor_RmResource(&pThis->__nvoc_base_RmResource);
181     PORT_UNREFERENCED_VARIABLE(pThis);
182 }
183 
__nvoc_init_dataField_P2PApi(P2PApi * pThis)184 void __nvoc_init_dataField_P2PApi(P2PApi *pThis) {
185     PORT_UNREFERENCED_VARIABLE(pThis);
186 }
187 
188 NV_STATUS __nvoc_ctor_RmResource(RmResource* , struct CALL_CONTEXT *, struct RS_RES_ALLOC_PARAMS_INTERNAL *);
__nvoc_ctor_P2PApi(P2PApi * pThis,struct CALL_CONTEXT * arg_pCallContext,struct RS_RES_ALLOC_PARAMS_INTERNAL * arg_pParams)189 NV_STATUS __nvoc_ctor_P2PApi(P2PApi *pThis, struct CALL_CONTEXT * arg_pCallContext, struct RS_RES_ALLOC_PARAMS_INTERNAL * arg_pParams) {
190     NV_STATUS status = NV_OK;
191     status = __nvoc_ctor_RmResource(&pThis->__nvoc_base_RmResource, arg_pCallContext, arg_pParams);
192     if (status != NV_OK) goto __nvoc_ctor_P2PApi_fail_RmResource;
193     __nvoc_init_dataField_P2PApi(pThis);
194 
195     status = __nvoc_p2papiConstruct(pThis, arg_pCallContext, arg_pParams);
196     if (status != NV_OK) goto __nvoc_ctor_P2PApi_fail__init;
197     goto __nvoc_ctor_P2PApi_exit; // Success
198 
199 __nvoc_ctor_P2PApi_fail__init:
200     __nvoc_dtor_RmResource(&pThis->__nvoc_base_RmResource);
201 __nvoc_ctor_P2PApi_fail_RmResource:
202 __nvoc_ctor_P2PApi_exit:
203 
204     return status;
205 }
206 
__nvoc_init_funcTable_P2PApi_1(P2PApi * pThis)207 static void __nvoc_init_funcTable_P2PApi_1(P2PApi *pThis) {
208     PORT_UNREFERENCED_VARIABLE(pThis);
209 
210     pThis->__p2papiShareCallback__ = &__nvoc_thunk_RmResource_p2papiShareCallback;
211 
212     pThis->__p2papiCheckMemInterUnmap__ = &__nvoc_thunk_RmResource_p2papiCheckMemInterUnmap;
213 
214     pThis->__p2papiControl__ = &__nvoc_thunk_RsResource_p2papiControl;
215 
216     pThis->__p2papiGetMemInterMapParams__ = &__nvoc_thunk_RmResource_p2papiGetMemInterMapParams;
217 
218     pThis->__p2papiGetMemoryMappingDescriptor__ = &__nvoc_thunk_RmResource_p2papiGetMemoryMappingDescriptor;
219 
220     pThis->__p2papiGetRefCount__ = &__nvoc_thunk_RsResource_p2papiGetRefCount;
221 
222     pThis->__p2papiControlFilter__ = &__nvoc_thunk_RsResource_p2papiControlFilter;
223 
224     pThis->__p2papiAddAdditionalDependants__ = &__nvoc_thunk_RsResource_p2papiAddAdditionalDependants;
225 
226     pThis->__p2papiControlSerialization_Prologue__ = &__nvoc_thunk_RmResource_p2papiControlSerialization_Prologue;
227 
228     pThis->__p2papiControl_Prologue__ = &__nvoc_thunk_RmResource_p2papiControl_Prologue;
229 
230     pThis->__p2papiCanCopy__ = &__nvoc_thunk_RsResource_p2papiCanCopy;
231 
232     pThis->__p2papiUnmap__ = &__nvoc_thunk_RsResource_p2papiUnmap;
233 
234     pThis->__p2papiIsPartialUnmapSupported__ = &__nvoc_thunk_RsResource_p2papiIsPartialUnmapSupported;
235 
236     pThis->__p2papiPreDestruct__ = &__nvoc_thunk_RsResource_p2papiPreDestruct;
237 
238     pThis->__p2papiMapTo__ = &__nvoc_thunk_RsResource_p2papiMapTo;
239 
240     pThis->__p2papiIsDuplicate__ = &__nvoc_thunk_RsResource_p2papiIsDuplicate;
241 
242     pThis->__p2papiControlSerialization_Epilogue__ = &__nvoc_thunk_RmResource_p2papiControlSerialization_Epilogue;
243 
244     pThis->__p2papiControl_Epilogue__ = &__nvoc_thunk_RmResource_p2papiControl_Epilogue;
245 
246     pThis->__p2papiUnmapFrom__ = &__nvoc_thunk_RsResource_p2papiUnmapFrom;
247 
248     pThis->__p2papiMap__ = &__nvoc_thunk_RsResource_p2papiMap;
249 
250     pThis->__p2papiAccessCallback__ = &__nvoc_thunk_RmResource_p2papiAccessCallback;
251 }
252 
__nvoc_init_funcTable_P2PApi(P2PApi * pThis)253 void __nvoc_init_funcTable_P2PApi(P2PApi *pThis) {
254     __nvoc_init_funcTable_P2PApi_1(pThis);
255 }
256 
257 void __nvoc_init_RmResource(RmResource*);
__nvoc_init_P2PApi(P2PApi * pThis)258 void __nvoc_init_P2PApi(P2PApi *pThis) {
259     pThis->__nvoc_pbase_P2PApi = pThis;
260     pThis->__nvoc_pbase_Object = &pThis->__nvoc_base_RmResource.__nvoc_base_RsResource.__nvoc_base_Object;
261     pThis->__nvoc_pbase_RsResource = &pThis->__nvoc_base_RmResource.__nvoc_base_RsResource;
262     pThis->__nvoc_pbase_RmResourceCommon = &pThis->__nvoc_base_RmResource.__nvoc_base_RmResourceCommon;
263     pThis->__nvoc_pbase_RmResource = &pThis->__nvoc_base_RmResource;
264     __nvoc_init_RmResource(&pThis->__nvoc_base_RmResource);
265     __nvoc_init_funcTable_P2PApi(pThis);
266 }
267 
__nvoc_objCreate_P2PApi(P2PApi ** ppThis,Dynamic * pParent,NvU32 createFlags,struct CALL_CONTEXT * arg_pCallContext,struct RS_RES_ALLOC_PARAMS_INTERNAL * arg_pParams)268 NV_STATUS __nvoc_objCreate_P2PApi(P2PApi **ppThis, Dynamic *pParent, NvU32 createFlags, struct CALL_CONTEXT * arg_pCallContext, struct RS_RES_ALLOC_PARAMS_INTERNAL * arg_pParams)
269 {
270     NV_STATUS status;
271     Object *pParentObj = NULL;
272     P2PApi *pThis;
273 
274     // Assign `pThis`, allocating memory unless suppressed by flag.
275     status = __nvoc_handleObjCreateMemAlloc(createFlags, sizeof(P2PApi), (void**)&pThis, (void**)ppThis);
276     if (status != NV_OK)
277         return status;
278 
279     // Zero is the initial value for everything.
280     portMemSet(pThis, 0, sizeof(P2PApi));
281 
282     // Initialize runtime type information.
283     __nvoc_initRtti(staticCast(pThis, Dynamic), &__nvoc_class_def_P2PApi);
284 
285     pThis->__nvoc_base_RmResource.__nvoc_base_RsResource.__nvoc_base_Object.createFlags = createFlags;
286 
287     // Link the child into the parent if there is one unless flagged not to do so.
288     if (pParent != NULL && !(createFlags & NVOC_OBJ_CREATE_FLAGS_PARENT_HALSPEC_ONLY))
289     {
290         pParentObj = dynamicCast(pParent, Object);
291         objAddChild(pParentObj, &pThis->__nvoc_base_RmResource.__nvoc_base_RsResource.__nvoc_base_Object);
292     }
293     else
294     {
295         pThis->__nvoc_base_RmResource.__nvoc_base_RsResource.__nvoc_base_Object.pParent = NULL;
296     }
297 
298     __nvoc_init_P2PApi(pThis);
299     status = __nvoc_ctor_P2PApi(pThis, arg_pCallContext, arg_pParams);
300     if (status != NV_OK) goto __nvoc_objCreate_P2PApi_cleanup;
301 
302     // Assignment has no effect if NVOC_OBJ_CREATE_FLAGS_IN_PLACE_CONSTRUCT is set.
303     *ppThis = pThis;
304 
305     return NV_OK;
306 
307 __nvoc_objCreate_P2PApi_cleanup:
308 
309     // Unlink the child from the parent if it was linked above.
310     if (pParentObj != NULL)
311         objRemoveChild(pParentObj, &pThis->__nvoc_base_RmResource.__nvoc_base_RsResource.__nvoc_base_Object);
312 
313     // Do not call destructors here since the constructor already called them.
314     if (createFlags & NVOC_OBJ_CREATE_FLAGS_IN_PLACE_CONSTRUCT)
315         portMemSet(pThis, 0, sizeof(P2PApi));
316     else
317     {
318         portMemFree(pThis);
319         *ppThis = NULL;
320     }
321 
322     // coverity[leaked_storage:FALSE]
323     return status;
324 }
325 
__nvoc_objCreateDynamic_P2PApi(P2PApi ** ppThis,Dynamic * pParent,NvU32 createFlags,va_list args)326 NV_STATUS __nvoc_objCreateDynamic_P2PApi(P2PApi **ppThis, Dynamic *pParent, NvU32 createFlags, va_list args) {
327     NV_STATUS status;
328     struct CALL_CONTEXT * arg_pCallContext = va_arg(args, struct CALL_CONTEXT *);
329     struct RS_RES_ALLOC_PARAMS_INTERNAL * arg_pParams = va_arg(args, struct RS_RES_ALLOC_PARAMS_INTERNAL *);
330 
331     status = __nvoc_objCreate_P2PApi(ppThis, pParent, createFlags, arg_pCallContext, arg_pParams);
332 
333     return status;
334 }
335 
336