summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 523758b)
raw | patch | inline | side by side (parent: 523758b)
author | Justin Sobota <jsobota@ti.com> | |
Sun, 24 Mar 2013 23:36:26 +0000 (19:36 -0400) | ||
committer | Justin Sobota <jsobota@ti.com> | |
Sun, 24 Mar 2013 23:36:26 +0000 (19:36 -0400) |
diff --git a/rm_services.h b/rm_services.h
index 07a72cf650276b6bff975f2cfec14a31c6123f96..6a09bc1d11450219074ecdd5a1c1d6b3d6351451 100644 (file)
--- a/rm_services.h
+++ b/rm_services.h
/** The resource length starting at base allocated, freed, or mapped to
* NameServer name. */
uint32_t resourceLength;
+/** resourceNumOwners is not valid unless >= 0 */
+#define RM_RESOURCE_NUM_OWNERS_INVALID (-1)
/** Current number of owners for the returned resource. A value greater
* than one means the resource is being shared. This value is only valid
* if the serviceState is RM_SERVICE_APPROVED or RM_SERVICE_APPROVED_STATIC. */
diff --git a/src/rm_allocator.c b/src/rm_allocator.c
index 93f557150a759dae1200ad8cdcc718e40db40215..bc5d16b198ed335bc206e3c59ef4b089cf56cefb 100644 (file)
--- a/src/rm_allocator.c
+++ b/src/rm_allocator.c
@@ -970,10 +970,14 @@ static int32_t allocatorFree(Rm_Handle rmHandle, Rm_Allocator *allocator, Rm_All
retVal = RM_SERVICE_APPROVED;
}
else {
+ /* Return owner count. In case it's a reference count check in application */
+ opInfo->resourceInfo->ownerCount = matchingNode->allocationCount;
retVal = RM_SERVICE_DENIED_RES_NOT_ALLOCD_TO_INST;
}
}
else {
+ /* Return owner count. In case it's a reference count check in application */
+ opInfo->resourceInfo->ownerCount = matchingNode->allocationCount;
retVal = RM_SERVICE_DENIED_RES_ALREADY_FREE;
}
}
diff --git a/src/rm_services.c b/src/rm_services.c
index 58ce2d4d93c3e6e4a405103f1db0d35165bc620d..3c1ce652399fcf7dcb0ad45d5bb4282e7a649ff5 100644 (file)
--- a/src/rm_services.c
+++ b/src/rm_services.c
@@ -130,6 +130,7 @@ void Rm_serviceHandler (void *rmHandle, const Rm_ServiceReqInfo *serviceRequest,
transaction->resourceInfo.base = serviceRequest->resourceBase;
transaction->resourceInfo.length = serviceRequest->resourceLength;
transaction->resourceInfo.alignment = serviceRequest->resourceAlignment;
+ transaction->resourceInfo.ownerCount = RM_RESOURCE_NUM_OWNERS_INVALID;
if (serviceRequest->resourceNsName) {
strncpy(transaction->resourceInfo.nameServerName, serviceRequest->resourceNsName, RM_NAME_MAX_CHARS);
}
@@ -154,6 +155,9 @@ void Rm_serviceHandler (void *rmHandle, const Rm_ServiceReqInfo *serviceRequest,
serviceResponse->rmHandle = rmHandle;
serviceResponse->serviceState = transaction->state;
+ /* Owner count will only be set within RM under certain circumstances. Most of time
+ * it will be RM_RESOURCE_NUM_OWNERS_INVALID */
+ serviceResponse->resourceNumOwners = transaction->resourceInfo.ownerCount;
if ((serviceResponse->serviceState == RM_SERVICE_PROCESSING) ||
(serviceResponse->serviceState == RM_SERVICE_APPROVED_STATIC)) {
/* Service still being processed. Static requests will have their validation responses sent once
@@ -167,7 +171,6 @@ void Rm_serviceHandler (void *rmHandle, const Rm_ServiceReqInfo *serviceRequest,
strncpy(serviceResponse->resourceName, transaction->resourceInfo.name, RM_NAME_MAX_CHARS);
serviceResponse->resourceBase = transaction->resourceInfo.base;
serviceResponse->resourceLength = transaction->resourceInfo.length;
- serviceResponse->resourceNumOwners = transaction->resourceInfo.ownerCount;
}
/* Transactions still processing not deleted from queue including static transactions which will be
diff --git a/src/rm_transport.c b/src/rm_transport.c
index a952fcff6797b00d4f1401fabce07105bcc8515a..a0c627409eaaf7a1543c50a852cfcf5d32fe45fb 100644 (file)
--- a/src/rm_transport.c
+++ b/src/rm_transport.c
@@ -352,6 +352,10 @@ int32_t Rm_receivePacket(Rm_TransportHandle transportHandle, const Rm_Packet *pk
memcpy ((void *)&(transaction->resourceInfo), (void *)&(resourceRespPkt->resourceInfo),\r
sizeof(Rm_ResourceInfo));\r
}\r
+ else {\r
+ /* Always copy owner count */\r
+ transaction->resourceInfo.ownerCount = resourceRespPkt->resourceInfo.ownerCount;\r
+ }\r
}\r
else {\r
retVal = RM_ERROR_PKT_RESP_DOES_NOT_MATCH_ANY_REQ;\r
diff --git a/src/rm_tree.c b/src/rm_tree.c
index a5e7ec2b76cb6e7096b0bc95d0fbe1b68474f767..5f56ca10f7eda652a5d0f1224df5454387063bd3 100644 (file)
--- a/src/rm_tree.c
+++ b/src/rm_tree.c
***********************************************************************
* DESCRIPTION: Returns the result of a comparison of two
* resource tree node value ranges.
+ *
* |node1 range||node2 range| --> return < 0
+ *
* |node1 range|
- * |node2 range| --> return 0 (any overlap in ranges)
+ * |node2 range| --> return 0 (any overlap in ranges)
+ *
* |node2 range||node1 range| --> return > 0
*/
int rmResourceNodeCompare(Rm_ResourceNode *node1, Rm_ResourceNode *node2)
index 2356ce7670dfbe0c33ad41e34fbef6182edb8078..5305750d9d71cc1b52989b98a92d7caee5dd8eb5 100644 (file)
* If the processor cannot access the memory, do not add it.
*/
var SharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion');
+SharedRegion.translate = false;
SharedRegion.setEntryMeta(0,
{ base: SHAREDMEM,
len: SHAREDMEMSIZE,