]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - keystone-rtos/rm-lld.git/commitdiff
cleanup and fixes for returning resource reference count
authorJustin Sobota <jsobota@ti.com>
Sun, 24 Mar 2013 23:36:26 +0000 (19:36 -0400)
committerJustin Sobota <jsobota@ti.com>
Sun, 24 Mar 2013 23:36:26 +0000 (19:36 -0400)
rm_services.h
src/rm_allocator.c
src/rm_services.c
src/rm_transport.c
src/rm_tree.c
test/k2h/c66/bios/rm_test.cfg

index 07a72cf650276b6bff975f2cfec14a31c6123f96..6a09bc1d11450219074ecdd5a1c1d6b3d6351451 100644 (file)
@@ -101,6 +101,8 @@ typedef struct {
     /** 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. */
index 93f557150a759dae1200ad8cdcc718e40db40215..bc5d16b198ed335bc206e3c59ef4b089cf56cefb 100644 (file)
@@ -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;
             }
         }
index 58ce2d4d93c3e6e4a405103f1db0d35165bc620d..3c1ce652399fcf7dcb0ad45d5bb4282e7a649ff5 100644 (file)
@@ -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 
index a952fcff6797b00d4f1401fabce07105bcc8515a..a0c627409eaaf7a1543c50a852cfcf5d32fe45fb 100644 (file)
@@ -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
index a5e7ec2b76cb6e7096b0bc95d0fbe1b68474f767..5f56ca10f7eda652a5d0f1224df5454387063bd3 100644 (file)
@@ -333,9 +333,12 @@ void rmResourceNodeFree(Rm_ResourceNode *node)
  ***********************************************************************
  * 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)
@@ -85,6 +85,7 @@ var SHAREDMEMSIZE       = 0x00100000;
  *  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,