NvSciSyncAttrList

NvSciSyncAttrList attrList = NULL;
NvSciError err;
/* create a new, empty attribute list */
err = NvSciSyncAttrListCreate(module, &signalerAttrList);
if (err != NvSciError_Success) {
    goto fail;
}
/*
 * fill the list - this example corresponds to a CPU signaler
 * that only needs to signal but not wait
*/
NvSciSyncAttrKeyValuePair keyValue[2] = {0};
bool cpuSignaler = true;
keyValue[0].attrKey = NvSciSyncAttrKey_NeedCpuAccess;
keyValue[0].value = (void*) &cpuSignaler;
keyValue[0].len = sizeof(cpuSignaler);
NvSciSyncAccessPerm cpuPerm = NvSciSyncAccessPerm_SignalOnly;
keyValue[1].attrKey = NvSciSyncAttrKey_RequiredPerm;
keyValue[1].value = (void*) &cpuPerm;
keyValue[1].len = sizeof(cpuPerm);
err = NvSciSyncAttrListSetAttrs(list, keyValue, 2);
if (err != NvSciError_Success) {
    goto fail;
}
/* ... */
NvSciSyncAttrListFree(signalerAttrList);