summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 4ecb83c)
raw | patch | inline | side by side (parent: 4ecb83c)
author | Justin Sobota <jsobota@ti.com> | |
Tue, 19 Mar 2013 22:40:34 +0000 (18:40 -0400) | ||
committer | Justin Sobota <jsobota@ti.com> | |
Tue, 19 Mar 2013 22:40:34 +0000 (18:40 -0400) |
include/rm_internal.h | patch | blob | history | |
rm_services.h | patch | blob | history | |
src/rm_allocator.c | patch | blob | history | |
src/rm_services.c | patch | blob | history |
diff --git a/include/rm_internal.h b/include/rm_internal.h
index f9af2bdf56a8654b4c4c19cd912dd1ea5835e212..73adccc9420ee791e057914b086516e36922d2b1 100644 (file)
--- a/include/rm_internal.h
+++ b/include/rm_internal.h
uint32_t length;
/* Resource alignment */
int32_t alignment;
+ /* Resource owner count - number of instances that are in the
+ * resource's owner list */
+ int32_t ownerCount;
/* NameServer name tied to resource */
char nameServerName[RM_NAME_MAX_CHARS];
} Rm_ResourceInfo;
diff --git a/rm_services.h b/rm_services.h
index 2968a97891184b955a91f104e756fea1cf141eaf..07a72cf650276b6bff975f2cfec14a31c6123f96 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;
+ /** 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. */
+ int32_t resourceNumOwners;
} Rm_ServiceRespInfo;
/**
diff --git a/src/rm_allocator.c b/src/rm_allocator.c
index c8dd87d45f93697ebd1bcf81e9e99fd5480588cc..c6fe328c974d11b0194b5873e641fbc86470e274 100644 (file)
--- a/src/rm_allocator.c
+++ b/src/rm_allocator.c
Rm_Allocator *allocators = rmInst->u.server.allocators;
Rm_Allocator *newAllocator = NULL;
- newAllocator = Rm_osalMalloc(sizeof(Rm_Allocator));
+ newAllocator = Rm_osalMalloc(sizeof(*allocators));
if (newAllocator) {
- memset((void *)newAllocator, 0, sizeof(Rm_Allocator));
+ memset((void *)newAllocator, 0, sizeof(*newAllocator));
strncpy(newAllocator->resourceName, resourceName, RM_NAME_MAX_CHARS);
newAllocator->allocatorRootEntry = NULL;
newAllocator->nextAllocator = NULL;
@@ -111,7 +111,7 @@ static int32_t allocatorCreate(Rm_Handle rmHandle, const char *resourceName, Rm_
Rm_ResourceNode *treeNode = NULL;
allocator = allocatorAdd(rmHandle, resourceName);
- treeRoot = Rm_osalMalloc(sizeof(Rm_ResourceTree));
+ treeRoot = Rm_osalMalloc(sizeof(*treeRoot));
RB_INIT(treeRoot);
while (range != NULL) {
RB_REMOVE(_Rm_AllocatorResourceTree, treeRoot, nextNode);
rmResourceNodeFree(node);
}
- Rm_osalFree((void *)treeRoot, sizeof(Rm_ResourceTree));
- Rm_osalFree((void *)allocator, sizeof(Rm_Allocator));
+ Rm_osalFree((void *)treeRoot, sizeof(*treeRoot));
+ Rm_osalFree((void *)allocator, sizeof(*allocator));
}
else {
retVal = RM_ERROR_RES_ALLOCATOR_DOES_NOT_EXIST;
Rm_Owner *ownerList = node->ownerList;
Rm_Owner *newOwner = NULL;
- newOwner = Rm_osalMalloc(sizeof(Rm_Owner));
+ newOwner = Rm_osalMalloc(sizeof(*newOwner));
if (newOwner) {
newOwner->instNameNode = serviceInstNode;
@@ -229,7 +229,7 @@ static int allocatorResNodeOwnerCompare(Rm_Handle rmHandle, Rm_ResourceNode *nod
if (rmInst->instType == Rm_instType_SHARED_SERVER) {
while(node2Owners) {
- Rm_osalBeginMemAccess((void *)node2Owners, sizeof(Rm_Owner));
+ Rm_osalBeginMemAccess((void *)node2Owners, sizeof(*node2Owners));
node2Owners = node2Owners->nextOwner;
}
node2Owners = node2->ownerList;
@@ -294,7 +294,7 @@ static void allocatorResNodeOwnerDelete(Rm_Handle rmHandle, Rm_ResourceNode *nod
node->allocationCount--;
owner->instNameNode->allocRefCount--;
RM_SS_OBJ_WB(owner->instNameNode, Rm_PolicyValidInstNode);
- Rm_osalFree((void *)owner, sizeof(Rm_Owner));
+ Rm_osalFree((void *)owner, sizeof(*owner));
}
/* FUNCTION PURPOSE: Copies the owners of a resource node
@@ -314,7 +314,7 @@ static void allocatorResNodeOwnerCopy(Rm_Handle rmHandle, Rm_ResourceNode *dstNo
while (srcOwnerList) {
RM_SS_OBJ_INV(srcOwnerList, Rm_Owner);
- dstNewOwner = Rm_osalMalloc(sizeof(Rm_Owner));
+ dstNewOwner = Rm_osalMalloc(sizeof(*dstNewOwner));
dstNewOwner->instNameNode = srcOwnerList->instNameNode;
dstNewOwner->nextOwner = NULL;
RM_SS_OBJ_WB(dstNewOwner, Rm_Owner);
@@ -348,7 +348,7 @@ static void allocatorResNodeOwnerClear(Rm_Handle rmHandle, Rm_ResourceNode *node
node->allocationCount--;
owner->instNameNode->allocRefCount--;
RM_SS_OBJ_WB(owner->instNameNode, Rm_PolicyValidInstNode);
- Rm_osalFree((void *)owner, sizeof(Rm_Owner));
+ Rm_osalFree((void *)owner, sizeof(*owner));
owner = nextOwner;
}
}
@@ -412,12 +412,12 @@ static int32_t allocatorPreAllocate(Rm_Handle rmHandle, Rm_Allocator *allocator,
opInfo->resourceInfo->alignment = 1;
}
- memset((void *)&findNode, 0, sizeof(Rm_ResourceNode));
+ memset((void *)&findNode, 0, sizeof(findNode));
findNode.base = opInfo->resourceInfo->base;
findNode.length = opInfo->resourceInfo->length;
/* Configure policy checking structure */
- memset((void *)&policyCheckCfg, 0, sizeof(Rm_PolicyCheckCfg));
+ memset((void *)&policyCheckCfg, 0, sizeof(policyCheckCfg));
if (RM_policy_GET_PERM(opInfo->allocType, RM_POLICY_PERM_INIT_SHIFT)) {
policyCheckType = Rm_policyCheck_INIT;
}
@@ -528,13 +528,13 @@ static int32_t allocatorAllocate(Rm_Handle rmHandle, Rm_Allocator *allocator, in
uint32_t matchingEnd;
int32_t retVal = RM_SERVICE_PROCESSING;
- memset((void *)&findNode, 0, sizeof(Rm_ResourceNode));
+ memset((void *)&findNode, 0, sizeof(findNode));
findNode.base = opInfo->resourceInfo->base;
findNode.length = opInfo->resourceInfo->length;
matchingNode = RB_FIND(_Rm_AllocatorResourceTree, allocator->allocatorRootEntry, &findNode);
/* Prepare privilege checks */
- memset((void *)&policyCheckCfg, 0, sizeof(Rm_PolicyCheckCfg));
+ memset((void *)&policyCheckCfg, 0, sizeof(policyCheckCfg));
if (RM_policy_GET_PERM(opInfo->allocType, RM_POLICY_PERM_INIT_SHIFT)) {
policyCheckType = Rm_policyCheck_INIT;
}
@@ -748,6 +748,8 @@ static int32_t allocatorAllocate(Rm_Handle rmHandle, Rm_Allocator *allocator, in
RB_INSERT(_Rm_AllocatorResourceTree, allocator->allocatorRootEntry, matchingNode);
}
}
+ /* Return number of instances that own the resource */
+ opInfo->resourceInfo->ownerCount = matchingNode->allocationCount;
retVal = RM_SERVICE_APPROVED;
}
}
@@ -786,7 +788,7 @@ static int32_t allocatorFree(Rm_Handle rmHandle, Rm_Allocator *allocator, Rm_All
uint32_t matchingEnd;
int32_t retVal;
- memset((void *)&findNode, 0, sizeof(Rm_ResourceNode));
+ memset((void *)&findNode, 0, sizeof(findNode));
findNode.base = opInfo->resourceInfo->base;
findNode.length = opInfo->resourceInfo->length;
matchingNode = RB_FIND(_Rm_AllocatorResourceTree, allocator->allocatorRootEntry, &findNode);
@@ -945,7 +947,8 @@ static int32_t allocatorFree(Rm_Handle rmHandle, Rm_Allocator *allocator, Rm_All
allocatorResNodeOwnerAdd(rmHandle, matchingNode, opInfo->serviceSrcInstNode);
RB_INSERT(_Rm_AllocatorResourceTree, allocator->allocatorRootEntry, matchingNode);
}
-
+ /* Return number of instances that own the resource */
+ opInfo->resourceInfo->ownerCount = matchingNode->allocationCount;
retVal = RM_SERVICE_APPROVED;
}
else {
@@ -1038,8 +1041,8 @@ static int32_t allocatorFindLinuxResource(Rm_Handle rmHandle, const char *resour
Rm_LinuxValueRange *linuxValueRange;
int32_t retVal = RM_OK;
- memset((void *) &opInfo, 0, sizeof(Rm_AllocatorOpInfo));
- memset((void *) &resourceInfo, 0, sizeof(Rm_ResourceInfo));
+ memset((void *)&opInfo, 0, sizeof(opInfo));
+ memset((void *)&resourceInfo, 0, sizeof(resourceInfo));
strncpy(resourceInfo.name, resourceName, RM_NAME_MAX_CHARS);
opInfo.policy = rmInst->u.server.globalPolicy;
@@ -1165,7 +1168,7 @@ static int32_t allocatorExtractGrlResProps(Rm_Handle rmHandle, const char *resou
rmNameServerTreeInv(rmInst->u.server.nameServer);
}
while (nsAssignments) {
- memset((void *)&nameServerObjCfg, 0, sizeof(Rm_NameServerObjCfg));
+ memset((void *)&nameServerObjCfg, 0, sizeof(nameServerObjCfg));
nameServerObjCfg.nameServerTree = rmInst->u.server.nameServer;
nameServerObjCfg.nodeCfg.objName = nsAssignments->nsName;
nameServerObjCfg.nodeCfg.resourceName = (char *)resourceName;
@@ -1279,7 +1282,7 @@ int32_t rmAllocatorInitializeResources(Rm_Handle rmHandle, void *globalResourceD
/* Parse the Global Resource List, creating an allocator for each specified resource node */
while ((nodeOffset >= RM_DTB_UTIL_STARTING_NODE_OFFSET) && (nodeDepth >= RM_DTB_UTIL_STARTING_DEPTH)) {
- memset((void *)&resProperties, 0, sizeof(Rm_ResourceProperties));
+ memset((void *)&resProperties, 0, sizeof(resProperties));
/* Get properties of resource node */
propOffset = fdt_first_property_offset(globalResourceDtb, nodeOffset);
while (propOffset >= RM_DTB_UTIL_STARTING_NODE_OFFSET) {
rmResourceNodeFree(resNode);
}
- Rm_osalFree((void *)resTree, sizeof(Rm_ResourceTree));
- Rm_osalFree((void *)allocatorList, sizeof(Rm_Allocator));
+ Rm_osalFree((void *)resTree, sizeof(*resTree));
+ Rm_osalFree((void *)allocatorList, sizeof(*allocatorList));
allocatorList = nextAllocator;
}
rmInst->u.server.allocators = NULL;
diff --git a/src/rm_services.c b/src/rm_services.c
index a2f691d328db7dc7e16db9eaf1bcf97e2d15c10b..58ce2d4d93c3e6e4a405103f1db0d35165bc620d 100644 (file)
--- a/src/rm_services.c
+++ b/src/rm_services.c
@@ -137,7 +137,7 @@ void Rm_serviceHandler (void *rmHandle, const Rm_ServiceReqInfo *serviceRequest,
/* Process received transaction */
rmProcessRouter(rmInst, transaction);
- memset((void *)serviceResponse, 0, sizeof(Rm_ServiceRespInfo));
+ memset((void *)serviceResponse, 0, sizeof(*serviceResponse));
if ((rmInst->instType == Rm_instType_SHARED_SERVER) &&
(transaction->state == RM_SERVICE_PROCESSING)) {
@@ -167,6 +167,7 @@ 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
serviceHandle = rmInst->serviceHandle;
if (serviceHandle == NULL) {
- serviceHandle = Rm_osalMalloc(sizeof(Rm_ServiceHandle));
+ serviceHandle = Rm_osalMalloc(sizeof(*serviceHandle));
if (serviceHandle) {
serviceHandle->rmHandle = rmHandle;
serviceHandle->Rm_serviceHandler = Rm_serviceHandler;
RM_SS_INST_INV_ENTER_CS(key);
if (rmInst->serviceHandle) {
- Rm_osalFree((void *)rmServiceHandle, sizeof(Rm_ServiceHandle));
+ Rm_osalFree((void *)rmServiceHandle, sizeof(*rmServiceHandle));
rmInst->serviceHandle = NULL;
}
else {