summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: c3cf451)
raw | patch | inline | side by side (parent: c3cf451)
author | Justin Sobota <jsobota@ti.com> | |
Tue, 30 Jun 2015 20:49:00 +0000 (16:49 -0400) | ||
committer | Justin Sobota <jsobota@ti.com> | |
Tue, 30 Jun 2015 20:49:00 +0000 (16:49 -0400) |
22 files changed:
diff --git a/include/rm_internal.h b/include/rm_internal.h
index 952ab201ab5b042bc27169c1010e41bcb2f5322f..20eb5fce500e6069de22495fc2cd39496b635bb0 100644 (file)
--- a/include/rm_internal.h
+++ b/include/rm_internal.h
* Data structures used by more than one internal RM module.
*
* ============================================================================
- * (C) Copyright 2012-2015, Texas Instruments, Inc.
+ * (C) Copyright 2012-2014, Texas Instruments, Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/include/rm_policyloc.h b/include/rm_policyloc.h
index 9608515a4d042a652cff123249586cced52d6b48..5b27dd4ad199b0602865231e36e057ce6459016f 100644 (file)
--- a/include/rm_policyloc.h
+++ b/include/rm_policyloc.h
* THIS NAME */
#define RM_ALLOCATED_TO_LINUX "Linux-Kernel"
-/* Policy permission bit storage definition for Rm_PolicyPermBits
- * Bit : Description
- *-----------------------------
- * 0 : Init (i) - RM instance has initialization permission for
- * resource
- * 1 : Use (u) - RM instance has usage permission for resource
- * 2 : Exclusive (x) - RM instance has exclusive allocation privilege for
- * resource i.e. No other RM instance can reserve the
- * resource if a RM instance with exclusive privilege
- * reserves the resource
- * 3 : Shared Linux (s) - Resource has been reserved by the Linux kernel but
- * can be allocated by the specified RM instances
- * 4 - 31 : UNUSED
- */
-
-/* Maximum number of bits used to represent all permissions. Must be
- * changed as new permissions are added */
-#define RM_POLICY_PERM_MAX_BITS 4
-
-/* Initialization permission characters */
-#define RM_POLICY_PERM_INIT_LOWER 'i'
-#define RM_POLICY_PERM_INIT_UPPER 'I'
-/* Initialization permission bit shift */
-#define RM_POLICY_PERM_INIT_SHIFT 0
-/* Usage permission characters */
-#define RM_POLICY_PERM_USE_LOWER 'u'
-#define RM_POLICY_PERM_USE_UPPER 'U'
-/* Usage permission bit shift */
-#define RM_POLICY_PERM_USE_SHIFT 1
-/* Exclusive permission characters */
-#define RM_POLICY_PERM_EXCLUSIVE_LOWER 'x'
-#define RM_POLICY_PERM_EXCLUSIVE_UPPER 'X'
-/* Exclusive permission bit shift */
-#define RM_POLICY_PERM_EXCLUSIVE_SHIFT 2
-/* Shared Linux permission characters */
-#define RM_POLICY_PERM_SHARED_LINUX_LOWER 's'
-#define RM_POLICY_PERM_SHARED_LINUX_UPPER 'S'
-/* Shared Linux permission bit shift */
-#define RM_POLICY_PERM_SHARED_LINUX_SHIFT 3
-
-/* Permissions subgroup start character */
-#define RM_POLICY_PERM_SUBGROUP_START '('
-/* Permissions subgroup end character */
-#define RM_POLICY_PERM_SUBGROUP_END ')'
-/* Permissions subgroup terminator */
-#define RM_POLICY_PERM_TERMINATOR '&'
-/* Permissions assignment character */
-#define RM_POLICY_PERM_ASSIGNMENT '='
-
/* Full permissions bit mask */
-#define RM_policy_PERM_FULL_MASK ((1 << RM_POLICY_PERM_MAX_BITS) - 1)
+#define RM_policy_PERM_FULL_MASK ((1u << RM_POLICY_PERM_MAX_BITS) - 1)
/* Calculates number of instance permission sets per permission word */
#define RM_policy_PERM_INST_PER_WORD \
/* Sets a permission for an instance */
#define RM_policy_PERM_SET(permArray, wordIdx, wordOffset, permOffset, val) \
- permArray[wordIdx] &= ~(0x1 << (wordOffset + permOffset)); \
- permArray[wordIdx] |= (val & 0x1) << (wordOffset + permOffset);
+ permArray[wordIdx] &= ~(0x1u << (wordOffset + permOffset)); \
+ permArray[wordIdx] |= (val & 0x1u) << (wordOffset + permOffset);
/* Gets a permission for an instance */
#define RM_policy_PERM_GET(permArray, wordIdx, wordOffset, permOffset) \
- ((permArray[wordIdx] >> (wordOffset + permOffset)) & 0x1)
+ ((permArray[wordIdx] >> (wordOffset + permOffset)) & 0x1u)
/* Assigned instance permissions linked list node */
typedef struct Rm_Permission_s {
index 828dae19a7101557cbdad266d3231d93595c9325..6f3a804a2948861c489b2e9301508a7a82432706 100644 (file)
/* Free resource */
Rm_resReqPktType_FREE,
/* Get name resource */
- Rm_resReqPktType_GET_NAMED
+ Rm_resReqPktType_GET_NAMED,
+ /* Invalid request packet type */
+ Rm_resReqPktType_INVALID
} Rm_ResourceReqPktType;
/* Resource Request Packet - Packet sent to CDs and Servers to request
/* Request to map the specified name to the specified resources */
Rm_nsReqPktType_MAP_RESOURCE = 0,
/* Request to unmap the specified name from the specifed resources */
- Rm_nsReqPktType_UNMAP_RESOURCE
+ Rm_nsReqPktType_UNMAP_RESOURCE,
+ /* Invalide NS request type */
+ Rm_nsReqPktType_INVALID
} Rm_NsReqPktType;
/* NameServer Request Packet - Packet sent by RM instances containing
diff --git a/include/rm_treeloc.h b/include/rm_treeloc.h
index e31250a123cf5151a890cab1e83ff89b18746b9d..488db60cc54657bec257fe779a1874d14ad54e91 100644 (file)
--- a/include/rm_treeloc.h
+++ b/include/rm_treeloc.h
/* Resource tree root entry type definition */
typedef RB_HEAD(_Rm_AllocatorResourceTree, _Rm_ResourceNode) Rm_ResourceTree;
-/* Policy permission bit storage type
- * See rm_policyloc.h for bit by bit usage of this type */
+/* Policy permission bit storage definition for Rm_PolicyPermBits
+ * Bit : Description
+ *-----------------------------
+ * 0 : Init (i) - RM instance has initialization permission for
+ * resource
+ * 1 : Use (u) - RM instance has usage permission for resource
+ * 2 : Exclusive (x) - RM instance has exclusive allocation privilege for
+ * resource i.e. No other RM instance can reserve the
+ * resource if a RM instance with exclusive privilege
+ * reserves the resource
+ * 3 : Shared Linux (s) - Resource has been reserved by the Linux kernel but
+ * can be allocated by the specified RM instances
+ */
+
+/* Maximum number of bits used to represent all permissions. Must be
+ * changed as new permissions are added */
+#define RM_POLICY_PERM_MAX_BITS 4
+
+/* Initialization permission characters */
+#define RM_POLICY_PERM_INIT_LOWER 'i'
+#define RM_POLICY_PERM_INIT_UPPER 'I'
+/* Initialization permission bit shift */
+#define RM_POLICY_PERM_INIT_SHIFT 0
+/* Usage permission characters */
+#define RM_POLICY_PERM_USE_LOWER 'u'
+#define RM_POLICY_PERM_USE_UPPER 'U'
+/* Usage permission bit shift */
+#define RM_POLICY_PERM_USE_SHIFT 1
+/* Exclusive permission characters */
+#define RM_POLICY_PERM_EXCLUSIVE_LOWER 'x'
+#define RM_POLICY_PERM_EXCLUSIVE_UPPER 'X'
+/* Exclusive permission bit shift */
+#define RM_POLICY_PERM_EXCLUSIVE_SHIFT 2
+/* Shared Linux permission characters */
+#define RM_POLICY_PERM_SHARED_LINUX_LOWER 's'
+#define RM_POLICY_PERM_SHARED_LINUX_UPPER 'S'
+/* Shared Linux permission bit shift */
+#define RM_POLICY_PERM_SHARED_LINUX_SHIFT 3
+
+/* Permissions subgroup start character */
+#define RM_POLICY_PERM_SUBGROUP_START '('
+/* Permissions subgroup end character */
+#define RM_POLICY_PERM_SUBGROUP_END ')'
+/* Permissions subgroup terminator */
+#define RM_POLICY_PERM_TERMINATOR '&'
+/* Permissions assignment character */
+#define RM_POLICY_PERM_ASSIGNMENT '='
+
+/* Policy permission bit storage type */
typedef uint32_t Rm_PolicyPermBits;
/* Policy node */
diff --git a/package.xdc b/package.xdc
index fd5ca69014633f75f6d6ee126eaf59f627bfe86e..aa520fec616150893eb768f79d7093b0dfa85640 100644 (file)
--- a/package.xdc
+++ b/package.xdc
* Copyright (C) 2012-2015, Texas Instruments, Inc.\r
*****************************************************************************/\r
\r
-package ti.drv.rm[2, 1, 0, 9] {\r
+package ti.drv.rm[2, 1, 2, 00] {\r
module Settings;\r
}\r
index 55d3ef0b9112ef81ec3f7e646a2b2ccb31868a04..d5bd177b329f32915fd4eea81abf36004b52e6ab 100644 (file)
--- a/rm.h
+++ b/rm.h
#define RM_ERROR_MALLOC_FAILED_RES_NODE RM_ERROR_BASE-59
/** A resource specified in the GRL could not be found in the policy */
#define RM_ERROR_RES_DOES_NOT_EXIST_IN_POLICY RM_ERROR_BASE-60
+/** Server's response to CD request has invalid service type */
+#define RM_ERROR_SERVER_RESP_INVALID_SERVICE_TYPE RM_ERROR_BASE-61
/**
* @brief Maximum number of characters allowed for RM instance, resource, and
index 44f939d424fc9255157054272de5fb254848b989..62605819660b5a3d1929493c83159a56b8b49e6c 100644 (file)
--- a/rmver.h
+++ b/rmver.h
* format:
* 0xAABBCCDD -> Arch (AA); API Changes (BB); Major (CC); Minor (DD)
*/
-#define RM_VERSION_ID (0x02010009)
+#define RM_VERSION_ID (0x02010200)
/**
* @brief This is the version string which describes the RM along with the
* date and build information.
*/
-#define RM_VERSION_STR "RM Revision: 02.01.00.09"
+#define RM_VERSION_STR "RM Revision: 2.1.2.00"
#ifdef __cplusplus
diff --git a/src/rm.c b/src/rm.c
index 792b945ef1551b0b05b4b9ed299467f74274c91d..c539fe42ecb5cc6462826c353c7cd967abe9819d 100644 (file)
--- a/src/rm.c
+++ b/src/rm.c
* is allocated via the rmAllocPkt API using the
* appTransport handle provided by the application
*/
-static void createResourceReqPkt(Rm_Packet *rmPkt, char *localInstName,
- Rm_Transaction *transaction)
+static Rm_Packet *createResourceReqPkt(Rm_ResourceReqPktType resReqType,
+ Rm_Transport *dstTrans,
+ const char *locInstName,
+ Rm_Transaction *transaction,
+ Rm_PacketHandle *pktHandle)
{
+ Rm_Packet *rmPkt = NULL;
Rm_ResourceRequestPkt *resourceReqPkt = NULL;
+ rmPkt = dstTrans->callouts.rmAllocPkt(dstTrans->appTransportHandle,
+ sizeof(Rm_Packet), pktHandle);
+ if ((rmPkt == NULL) || (pktHandle == NULL)) {
+ transaction->state = RM_ERROR_TRANSPORT_ALLOC_PKT_ERROR;
+ goto errorExit;
+ }
+
rmPkt->pktType = Rm_pktType_RESOURCE_REQUEST;
resourceReqPkt = (Rm_ResourceRequestPkt *) rmPkt->data;
- resourceReqPkt->requestId = transaction->localId;
- if (transaction->type == Rm_service_RESOURCE_ALLOCATE_INIT) {
- resourceReqPkt->resourceReqType = Rm_resReqPktType_ALLOCATE_INIT;
- } else if (transaction->type == Rm_service_RESOURCE_ALLOCATE_USE) {
- resourceReqPkt->resourceReqType = Rm_resReqPktType_ALLOCATE_USE;
- } else if (transaction->type == Rm_service_RESOURCE_STATUS) {
- resourceReqPkt->resourceReqType = Rm_resReqPktType_GET_STATUS;
- } else if (transaction->type == Rm_service_RESOURCE_FREE) {
- resourceReqPkt->resourceReqType = Rm_resReqPktType_FREE;
- } else if (transaction->type == Rm_service_RESOURCE_GET_BY_NAME) {
- resourceReqPkt->resourceReqType = Rm_resReqPktType_GET_NAMED;
- }
- rm_strncpy(resourceReqPkt->pktSrcInstName, localInstName,
+ resourceReqPkt->requestId = transaction->localId;
+ resourceReqPkt->resourceReqType = resReqType;
+ rm_strncpy(resourceReqPkt->pktSrcInstName, locInstName,
RM_NAME_MAX_CHARS);
rm_strncpy(resourceReqPkt->serviceSrcInstName,
transaction->serviceSrcInstName, RM_NAME_MAX_CHARS);
memcpy((void *)&(resourceReqPkt->resourceInfo),
(void *)&(transaction->resourceInfo),
sizeof(Rm_ResourceInfo));
+
+errorExit:
+ return(rmPkt);
}
/* FUNCTION PURPOSE: Creates a resource response packet
* is allocated via the rmAllocPkt API using the
* appTransport handle provided by the application
*/
-static void createNsRequestPkt(Rm_Packet *rmPkt, char *localInstName,
- Rm_Transaction *transaction)
-{
+static Rm_Packet *createNsRequestPkt(Rm_NsReqPktType nsReqType,
+ Rm_Transport *dstTrans,
+ const char *locInstName,
+ Rm_Transaction *transaction,
+ Rm_PacketHandle *pktHandle)
+{
+ Rm_Packet *rmPkt = NULL;
Rm_NsRequestPkt *nsReqPkt = NULL;
+
+ rmPkt = dstTrans->callouts.rmAllocPkt(dstTrans->appTransportHandle,
+ sizeof(Rm_Packet), pktHandle);
+ if ((rmPkt == NULL) || (pktHandle == NULL)) {
+ transaction->state = RM_ERROR_TRANSPORT_ALLOC_PKT_ERROR;
+ goto errorExit;
+ }
+
rmPkt->pktType = Rm_pktType_NAMESERVER_REQUEST;
nsReqPkt = (Rm_NsRequestPkt *)rmPkt->data;
- nsReqPkt->requestId = transaction->localId;
- if (transaction->type == Rm_service_RESOURCE_MAP_TO_NAME) {
- nsReqPkt->nsRequestType = Rm_nsReqPktType_MAP_RESOURCE;
- } else if (transaction->type == Rm_service_RESOURCE_UNMAP_NAME) {
- nsReqPkt->nsRequestType = Rm_nsReqPktType_UNMAP_RESOURCE;
- }
- rm_strncpy(nsReqPkt->pktSrcInstName, localInstName, RM_NAME_MAX_CHARS);
+ nsReqPkt->requestId = transaction->localId;
+ nsReqPkt->nsRequestType = nsReqType;
+ rm_strncpy(nsReqPkt->pktSrcInstName, locInstName, RM_NAME_MAX_CHARS);
rm_strncpy(nsReqPkt->serviceSrcInstName, transaction->serviceSrcInstName,
RM_NAME_MAX_CHARS);
memcpy((void *)&(nsReqPkt->resourceInfo),
(void *)&(transaction->resourceInfo),
sizeof(Rm_ResourceInfo));
+
+errorExit:
+ return(rmPkt);
}
/* FUNCTION PURPOSE: Creates a NameServer response packet
nsRespPkt->requestState = transaction->state;
}
+/* FUNCTION PURPOSE: Creates a request packet
+ ***********************************************************************
+ * DESCRIPTION: Returns a RM packet handle that points to a request packet.
+ * The request packet type is based on the transaction type.
+ */
+static Rm_Packet *createRequestPkt(Rm_Transport *dstTrans,
+ const char *locInstName,
+ Rm_Transaction *transaction,
+ Rm_PacketHandle *pktHandle)
+{
+ Rm_Packet *rmPkt = NULL;
+
+ switch (transaction->type) {
+ case Rm_service_RESOURCE_ALLOCATE_INIT:
+ rmPkt = createResourceReqPkt(Rm_resReqPktType_ALLOCATE_INIT,
+ dstTrans, locInstName, transaction,
+ pktHandle);
+ break;
+ case Rm_service_RESOURCE_ALLOCATE_USE:
+ rmPkt = createResourceReqPkt(Rm_resReqPktType_ALLOCATE_USE,
+ dstTrans, locInstName, transaction,
+ pktHandle);
+ break;
+ case Rm_service_RESOURCE_STATUS:
+ rmPkt = createResourceReqPkt(Rm_resReqPktType_GET_STATUS,
+ dstTrans, locInstName, transaction,
+ pktHandle);
+ break;
+ case Rm_service_RESOURCE_FREE:
+ rmPkt = createResourceReqPkt(Rm_resReqPktType_FREE,
+ dstTrans, locInstName, transaction,
+ pktHandle);
+ break;
+ case Rm_service_RESOURCE_GET_BY_NAME:
+ rmPkt = createResourceReqPkt(Rm_resReqPktType_GET_NAMED,
+ dstTrans, locInstName, transaction,
+ pktHandle);
+ break;
+ case Rm_service_RESOURCE_MAP_TO_NAME:
+ rmPkt = createNsRequestPkt(Rm_nsReqPktType_MAP_RESOURCE,
+ dstTrans, locInstName, transaction,
+ pktHandle);
+ break;
+ case Rm_service_RESOURCE_UNMAP_NAME:
+ rmPkt = createNsRequestPkt(Rm_nsReqPktType_UNMAP_RESOURCE,
+ dstTrans, locInstName, transaction,
+ pktHandle);
+ break;
+ default:
+ transaction->state = RM_ERROR_INVALID_SERVICE_TYPE;
+ break;
+ }
+
+ return(rmPkt);
+}
+
/* FUNCTION PURPOSE: Issues a service response to application
***********************************************************************
* DESCRIPTION: Provides a service response back to the application
* The request is sent via the RM transport API which is
* plugged with an application created transport path.
*/
-static void transactionForwarder (Rm_Inst *rmInst, Rm_Transaction *transaction)
+static void transactionForwarder(Rm_Inst *rmInst, Rm_Transaction *transaction)
{
- Rm_Transport *dstTransport = NULL;
- Rm_Packet *rmPkt = NULL;
- Rm_PacketHandle pktHandle = NULL;
+ Rm_Transport *dstTrans;
if (rmInst->instType == Rm_instType_CLIENT) {
- dstTransport = rmTransportFindRemoteInstType(rmInst->transports,
- Rm_instType_CLIENT_DELEGATE);
-
- if (!dstTransport) {
- dstTransport = rmTransportFindRemoteInstType(rmInst->transports,
- Rm_instType_SERVER);
+ dstTrans = rmTransportFindRemoteInstType(rmInst->transports,
+ Rm_instType_CLIENT_DELEGATE);
+ if (dstTrans == NULL) {
+ dstTrans = rmTransportFindRemoteInstType(rmInst->transports,
+ Rm_instType_SERVER);
}
} else if (rmInst->instType == Rm_instType_CLIENT_DELEGATE) {
- dstTransport = rmTransportFindRemoteInstType(rmInst->transports,
- Rm_instType_SERVER);
+ dstTrans = rmTransportFindRemoteInstType(rmInst->transports,
+ Rm_instType_SERVER);
+ } else {
+ dstTrans = NULL;
}
/* Just queue transaction if transport hasn't been registered. Do not
* return error */
- if (dstTransport) {
- rmPkt = dstTransport->callouts.rmAllocPkt(dstTransport->appTransportHandle,
- sizeof(Rm_Packet), &pktHandle);
- if (!rmPkt || !pktHandle) {
- transaction->state = RM_ERROR_TRANSPORT_ALLOC_PKT_ERROR;
+ if (dstTrans) {
+ Rm_Packet *rmPkt = NULL;
+ Rm_PacketHandle pktHandle = NULL;
+
+ rmPkt = createRequestPkt(dstTrans, rmInst->instName, transaction,
+ &pktHandle);
+ if ((rmPkt == NULL) || (pktHandle == NULL)) {
+ /* Error returned via transaction->state */
goto errorExit;
}
- switch (transaction->type) {
- case Rm_service_RESOURCE_ALLOCATE_INIT:
- case Rm_service_RESOURCE_ALLOCATE_USE:
- case Rm_service_RESOURCE_STATUS:
- case Rm_service_RESOURCE_FREE:
- case Rm_service_RESOURCE_GET_BY_NAME:
- createResourceReqPkt(rmPkt, rmInst->instName, transaction);
- break;
- case Rm_service_RESOURCE_MAP_TO_NAME:
- case Rm_service_RESOURCE_UNMAP_NAME:
- createNsRequestPkt(rmPkt, rmInst->instName, transaction);
- break;
- default:
- transaction->state = RM_ERROR_INVALID_SERVICE_TYPE;
- goto errorExit;
- }
-
- if (dstTransport->callouts.rmSendPkt(dstTransport->appTransportHandle,
- pktHandle) < RM_OK) {
+ if (dstTrans->callouts.rmSendPkt(dstTrans->appTransportHandle,
+ pktHandle) < RM_OK) {
transaction->state = RM_ERROR_TRANSPORT_SEND_ERROR;
goto errorExit;
}
transaction->hasBeenForwarded = RM_TRUE;
- /* Transaction not deleted. Waiting for response from RM CD or Server */
+ /* Transaction not deleted. Waiting for response from RM CD or
+ * Server */
+ } else {
+ transaction->state = RM_ERROR_TRANSPORT_HANDLE_DOES_NOT_EXIST;
}
errorExit:
/* Do not delete transaction on transport error. Transport error
allocNode = rmAllocatorFind(rmHandle, transaction->resourceInfo.name);
if (allocNode &&
- (transaction->type == Rm_service_RESOURCE_ALLOCATE_INIT) ||
- (transaction->type == Rm_service_RESOURCE_ALLOCATE_USE)) {
+ ((transaction->type == Rm_service_RESOURCE_ALLOCATE_INIT) ||
+ (transaction->type == Rm_service_RESOURCE_ALLOCATE_USE))) {
/* Check request against static policy */
memset((void *)&privCheckCfg, 0, sizeof(Rm_PolicyCheckCfg));
transaction->resourceInfo.name);
if (allocNode) {
- if (allocSize = rmPolicyGetCdAllocSize(allocNode->policyRoot)) {
- if (newTrans = rmTransactionQueueAdd(rmInst)) {
+ if ((allocSize = rmPolicyGetCdAllocSize(allocNode->policyRoot))) {
+ if ((newTrans = rmTransactionQueueAdd(rmInst))) {
newTrans->type = transaction->type;
rm_strncpy(newTrans->serviceSrcInstName, rmInst->instName,
RM_NAME_MAX_CHARS);
retVal = cdRequestServerResources(rmInst, transaction);
}
}
+ /* else: fall through to return */
} else {
retVal = cdRequestServerResources(rmInst, transaction);
}
}
retVal = rmAllocatorOperation((Rm_Handle)rmInst, &opInfo);
}
+ } else {
+ retVal = RM_ERROR_INVALID_INST_TYPE;
}
errorExit:
transaction->state = retVal;
}
}
retVal = rmAllocatorOperation((Rm_Handle)rmInst, &opInfo);
+ } else {
+ retVal = RM_ERROR_INVALID_INST_TYPE;
}
errorExit:
transaction->state = retVal;
* so request is forwarded to Server */
retVal = RM_SERVICE_PROCESSING;
}
+ /* else: fall through to exit */
} else if ((rmInst->instType == Rm_instType_SERVER) ||
(rmInst->instType == Rm_instType_SHARED_SERVER)) {
/* Populated NameServer name has precedence over base */
}
}
retVal = rmAllocatorOperation((Rm_Handle)rmInst, &opInfo);
+ } else {
+ retVal = RM_ERROR_INVALID_INST_TYPE;
}
errorExit:
transaction->state = retVal;
if (transaction->pendingTransactionId) {
Rm_Transaction *pendingTrans = rmTransactionQueueFind(rmInst,
transaction->pendingTransactionId);
-
+
/* Transaction is response from Server for transaction sent to get
* information in order to complete pending transaction */
if (transaction->state == RM_SERVICE_APPROVED) {
if (transaction->type == Rm_service_RESOURCE_GET_BY_NAME) {
- /* Transfer resource data tied to name to pending transaction */
+ /* Transfer resource data tied to name to pending
+ * transaction */
rm_strncpy(pendingTrans->resourceInfo.name,
transaction->resourceInfo.name,
RM_NAME_MAX_CHARS);
- pendingTrans->resourceInfo.base = transaction->resourceInfo.base;
+ pendingTrans->resourceInfo.base = transaction->resourceInfo.base;
pendingTrans->resourceInfo.length = transaction->resourceInfo.length;
/* Delete NS name from pending transaction so Server isn't
* queried again */
/* Allow original free to complete */
pendingTrans->state = RM_SERVICE_APPROVED;
+ } else {
+ pendingTrans->state = RM_ERROR_SERVER_RESP_INVALID_SERVICE_TYPE;
}
} else {
if (transaction->type == Rm_service_RESOURCE_FREE) {
}
}
- if ((transaction->type == Rm_service_RESOURCE_ALLOCATE_INIT) ||
- (transaction->type == Rm_service_RESOURCE_ALLOCATE_USE)) {
- if (transaction->state == RM_SERVICE_PROCESSING) {
- allocationHandler(rmInst, transaction);
- }
- } else if (transaction->type == Rm_service_RESOURCE_STATUS) {
- if (transaction->state == RM_SERVICE_PROCESSING) {
- statusHandler(rmInst, transaction);
- }
- } else if (transaction->type == Rm_service_RESOURCE_FREE) {
- if (transaction->state == RM_SERVICE_PROCESSING) {
- freeHandler(rmInst, transaction);
+ if (transaction->state == RM_SERVICE_PROCESSING) {
+ switch(transaction->type) {
+ case Rm_service_RESOURCE_ALLOCATE_INIT:
+ case Rm_service_RESOURCE_ALLOCATE_USE:
+ allocationHandler(rmInst, transaction);
+ break;
+ case Rm_service_RESOURCE_FREE:
+ freeHandler(rmInst, transaction);
+ break;
+ case Rm_service_RESOURCE_STATUS:
+ statusHandler(rmInst, transaction);
+ break;
+ case Rm_service_RESOURCE_MAP_TO_NAME:
+ case Rm_service_RESOURCE_GET_BY_NAME:
+ case Rm_service_RESOURCE_UNMAP_NAME:
+ /* Forward all NameServer-based transactions */
+ break;
+ default:
+ transaction->state = RM_ERROR_INVALID_SERVICE_TYPE;
+ break;
}
}
- /* Forward all NameServer-based transactions */
if (transaction->state == RM_SERVICE_PROCESSING) {
- /* CD could not complete transaction. Forward to Server */
+ uint32_t transId = transaction->localId;
+
+ /* NameServer transaction or CD could not complete alloc/free
+ * transaction. Forward to Server */
transactionForwarder(rmInst, transaction);
- } else if (transaction->state != RM_SERVICE_PENDING_SERVER_RESPONSE) {
- /* Transaction completed by CD or completed response received from
- * Server. Return result */
- if (strncmp(transaction->serviceSrcInstName, rmInst->instName,
- RM_NAME_MAX_CHARS)) {
- /* Transaction did not originate on this instance */
- transactionResponder(rmInst, transaction);
- } else {
- /* Transaction originated on this instance */
- serviceResponder(rmInst, transaction);
+
+ /* Refresh transaction for reentrancy of cases where mix of Client
+ * CD and Server are running on the same core and connected via
+ * transport implemented over direct function calls instead of
+ * traditional transport that returns after sending the data */
+ transaction = rmTransactionQueueFind(rmInst, transId);
+ }
+
+ if (transaction) {
+ if ((transaction->state != RM_SERVICE_PROCESSING) &&
+ (transaction->state != RM_SERVICE_PENDING_SERVER_RESPONSE)) {
+ /* Transaction completed by CD or completed response received
+ * from Server. Return result */
+ if (strncmp(transaction->serviceSrcInstName, rmInst->instName,
+ RM_NAME_MAX_CHARS)) {
+ /* Transaction did not originate on this instance */
+ transactionResponder(rmInst, transaction);
+ } else {
+ /* Transaction originated on this instance */
+ serviceResponder(rmInst, transaction);
+ }
}
}
} else if (transaction->type ==
Rm_service_RESOURCE_UNMAP_NAME) {
transaction->state = rmNameServerDeleteObject(&nameServerObjCfg);
+ } else {
+ transaction->state = RM_ERROR_INVALID_SERVICE_TYPE;
}
if (rmInst->instType == Rm_instType_SHARED_SERVER) {
* DESCRIPTION: Routes a received transaction to the appropriate
* instance processing routine
*/
-void rmProcessRouter (Rm_Inst *rmInst, Rm_Transaction *transaction)
+void rmProcessRouter(Rm_Inst *rmInst, Rm_Transaction *transaction)
{
if (rmInst->instType == Rm_instType_CLIENT) {
clientProcess(rmInst, transaction);
} else if ((rmInst->instType == Rm_instType_SERVER) ||
(rmInst->instType == Rm_instType_SHARED_SERVER)) {
serverProcess(rmInst, transaction);
+ } else {
+ transaction->state = RM_ERROR_INVALID_INST_TYPE;
}
}
Rm_osalLog("Type: Shared Server\n");
} else if (rmInst->instType == Rm_instType_SHARED_CLIENT) {
Rm_osalLog("Type: Shared Client\n");
+ } else {
+ Rm_osalLog("Type: UNKNOWN\n");
+ goto errorExit;
}
Rm_osalLog("\nResource Status:\n\n");
totalResOwners = RM_ERROR_INVALID_RES_STATUS_INSTANCE;
}
+errorExit:
/* Free sem object using originating instance in case the Shared Client to Shared
* Server instance switch took place */
if (((Rm_Inst *)rmHandle)->mtSemObj) {
rmInst = rmInst->u.sharedClient.sharedServerHandle;
Rm_osalLog("Instance name: %s\n", rmInst->instName);
Rm_osalLog("Handle: 0x%08x\n", rmHandle);
+ } else {
+ Rm_osalLog("Type: UNKNOWN\n");
+ goto errorExit;
}
transportList = rmInst->transports;
}
}
+errorExit:
/* Free sem object using originating instance in case the Shared Client
* to Shared Server instance switch took place */
if (((Rm_Inst *)rmHandle)->mtSemObj) {
*result = RM_ERROR_INVALID_SHARED_SERVER_HANDLE;
goto errorExit;
}
+ } else {
+ *result = RM_ERROR_INVALID_INST_TYPE;
+ goto errorExit;
}
if (initCfg->instType == Rm_instType_SHARED_SERVER) {
/* Create the instance's task blocking mechanism */
rmInst->blockHandle = Rm_osalTaskBlockCreate();
}
+ /* else: fall through */
return((Rm_Handle)rmInst);
} else if (rmInst->transactionQueue && !ignorePendingServices) {
return(RM_ERROR_CANT_DELETE_PENDING_TRANSACTIONS);
}
+ /* else: delete instance since no more deletion failure cases */
if (rmInst->instType != Rm_instType_SHARED_CLIENT) {
rmNameServerDelete(rmHandle);
diff --git a/src/rm_allocator.c b/src/rm_allocator.c
index 8864f5ed8cfdce19e6bbc616aa728b8de1da95c3..9ffc1feab7a847d68653d157479e48e1f6e528e8 100644 (file)
--- a/src/rm_allocator.c
+++ b/src/rm_allocator.c
if (node1 && node2) {
node1End = node1->base + node1->length - 1;
node2End = node2->base + node2->length - 1;
-
+
if (node1->base < node2->base) {
if (node1End == (node2->base - 1)) {
return(RM_TRUE);
return(RM_TRUE);
}
}
+ /* else: fall through to return false, not neighbors */
}
return(RM_FALSE);
}
if (matchingNode) {
findEnd = findNode.base + findNode.length - 1;
matchingEnd = matchingNode->base + matchingNode->length - 1;
-
+
if ((findNode.base >= matchingNode->base) && (findEnd <= matchingEnd)) {
if (opInfo->serviceInstNode == rmPolicyGetLinuxInstNode(rmHandle)) {
/* Bypass policy checks since Linux Kernel has full
opInfo->resourceInfo->instAllocCount = allocatorResNodeOwnerGetRefCnt(rmHandle,
leftNode,
opInfo->serviceInstNode);
- } else if (findEnd == matchingEnd) {
+ } else /* (findEnd == matchingEnd) */ {
/* findNode end and matchingNode end are equivalent.
* May be combine possibilities to the right
*
rmResourceNodeFree(leftNode);
if (rightNode) {
RB_INSERT(_Rm_AllocatorResourceTree,
- allocator->resourceRoot, rightNode);
+ allocator->resourceRoot, rightNode);
}
} else if (combineRight) {
/* Combine right and matching nodes.
opInfo->resourceInfo->instAllocCount = allocatorResNodeOwnerGetRefCnt(rmHandle,
leftNode,
opInfo->serviceInstNode);
- } else if (findEnd == matchingEnd) {
+ } else /* (findEnd == matchingEnd) */ {
/* Case 4: Free range is on right boundary of
* matched node. Try to combine free range
* with right node.
opInfo->resourceInfo->length = linuxValues->value;
lengthFound = RM_TRUE;
}
+ /* else: value was not a base or length so skip to next alias value */
linuxValues = (Rm_LinuxValueRange *)linuxValues->nextValue;
valueIndex++;
int32_t retVal = RM_OK;
while (range != NULL) {
- if (resNode = rmResourceNodeNew(range->base, range->length)) {
+ if ((resNode = rmResourceNodeNew(range->base, range->length))) {
RB_INSERT(_Rm_AllocatorResourceTree, resTree,
resNode);
} else {
goto errorExit;
}
- if (resTree = Rm_osalMalloc(sizeof(*resTree))) {
+ if ((resTree = Rm_osalMalloc(sizeof(*resTree)))) {
RB_INIT(resTree);
newAllocNode->resourceRoot = resTree;
} else {
goto errorExit;
}
- if (polTree = Rm_osalMalloc(sizeof(*polTree))) {
+ if ((polTree = Rm_osalMalloc(sizeof(*polTree)))) {
RB_INIT(polTree);
newAllocNode->policyRoot = polTree;
} else {
retVal = propOffset;
goto errorExit;
}
+ /* else: fall through to get next property */
}
if (propOffset < -FDT_ERR_NOTFOUND) {
/* Error returned by LIBFDT */
return(retVal);
}
-/* FUNCTION PURPOSE: Populate the allocator tree based on the GRL
+/* FUNCTION PURPOSE: Populate the allocator tree based on the Policy DTB
***********************************************************************
* DESCRIPTION: Populates the allocator tree using the policy DTB. The
* resource trees in each allocator will be created on the fly
retVal = RM_ERROR_UNKNOWN_POLICY_RESOURCE_PROPERTY;
goto errorExit;
}
+ /* else: fall through to get next property since read property
+ * wasn't an assignment */
propOffset = fdt_next_property_offset(policyDtb, propOffset);
}
Rm_AllocatorNode *allocator = NULL;
int32_t retVal;
- if (allocator = rmAllocatorFind(rmHandle, opInfo->resourceInfo->name)) {
+ if ((allocator = rmAllocatorFind(rmHandle, opInfo->resourceInfo->name))) {
if (rmInst->instType == Rm_instType_SHARED_SERVER) {
rmResourceTreeInv(allocator->resourceRoot);
}
retVal = allocatorAllocate(rmHandle, allocator, opInfo);
} else if (opInfo->operation == Rm_allocatorOp_FREE) {
retVal = allocatorFree(rmHandle, allocator, opInfo);
+ } else {
+ retVal = RM_ERROR_INVALID_SERVICE_TYPE;
}
if ((rmInst->instType == Rm_instType_SHARED_SERVER) &&
}
if (grlDtb && policyDtb &&
- (rmInst->instType == Rm_instType_SERVER) ||
- (rmInst->instType == Rm_instType_SHARED_SERVER)) {
+ ((rmInst->instType == Rm_instType_SERVER) ||
+ (rmInst->instType == Rm_instType_SHARED_SERVER))) {
/* Create an allocator for each resource node in GRL. Companion
* policy info will be pulled and placed into policy tree */
retVal = allocatorPopulateGrlBased(rmInst, grlDtb, policyDtb, linuxDtb);
} else if (policyDtb &&
- (rmInst->instType == Rm_instType_CLIENT_DELEGATE) ||
- (rmInst->instType == Rm_instType_CLIENT)) {
+ ((rmInst->instType == Rm_instType_CLIENT_DELEGATE) ||
+ (rmInst->instType == Rm_instType_CLIENT))) {
/* Create an allocator for each resource node in the policy.
* Resource tree portion of the allocator will be NULL. Resource
* trees will be added at run time for Client Delegate instances.
} else if ((rmInst->instType != Rm_instType_CLIENT) &&
(rmInst->instType != Rm_instType_SHARED_CLIENT)) {
retVal = RM_ERROR_INVALID_ALLOCATOR_INIT;
+ } else {
+ retVal = RM_ERROR_INVALID_INST_TYPE;
}
errorExit:
@@ -2009,7 +2018,7 @@ int32_t rmAllocatorAddResNode(Rm_Handle rmHandle, Rm_AllocatorNode *allocator,
rmResourceTreeInv(allocator->resourceRoot);
}
- if (resNode = rmResourceNodeNew(resBase, resLen)) {
+ if ((resNode = rmResourceNodeNew(resBase, resLen))) {
if (RB_INSERT(_Rm_AllocatorResourceTree, allocator->resourceRoot,
resNode)) {
retVal = RM_ERROR_RES_SPECIFIED_MORE_THAN_ONCE;
diff --git a/src/rm_dtb_util.c b/src/rm_dtb_util.c
index 249aeea79a1e6797d6a38e87c15957d7c1fa7049..191f92e0c238961fd6fac0625286d744ed73d80e 100644 (file)
--- a/src/rm_dtb_util.c
+++ b/src/rm_dtb_util.c
*/
Rm_ResourcePropType rmDtbUtilResGetPropertyType(const char * propertyName)
{
- Rm_ResourcePropType propertyType = Rm_resourcePropType_UNKNOWN;
+ Rm_ResourcePropType propertyType;
if(strcmp(dtbUtilResRangeProp, propertyName) == 0) {
propertyType = Rm_resourcePropType_RESOURCE_RANGE;
propertyType = Rm_resourcePropType_RESOURCE_LINUX_ALIAS;
} else if(strcmp(dtbUtilResNsAssignmentProp, propertyName) == 0) {
propertyType = Rm_resourcePropType_NSASSIGNMENT;
+ } else {
+ propertyType = Rm_resourcePropType_UNKNOWN;
}
- return (propertyType);
+ return(propertyType);
}
/* FUNCTION PURPOSE: Extracts a resource range list from a GRL DTB
*/
Rm_PolicyPropType rmDtbUtilPolicyGetPropertyType(const char * propertyName)
{
- Rm_PolicyPropType propertyType = Rm_policyPropType_UNKNOWN;
+ Rm_PolicyPropType propertyType;
if(strcmp(dtbUtilPolicyAssignments, propertyName) == 0) {
propertyType = Rm_policyPropType_ASSIGNMENTS;
propertyType = Rm_policyPropType_ALLOCATION_ALIGNMENT;
} else if(strcmp(dtbUtilPolicyValidInstances, propertyName) == 0) {
propertyType = Rm_policyPropType_VALID_INSTANCES;
+ } else {
+ propertyType = Rm_policyPropType_UNKNOWN;
}
return(propertyType);
}
diff --git a/src/rm_policy.c b/src/rm_policy.c
index 01421dcb8fe6718239bb9aece9ec63167f75c6b5..9b9e211d669948bc2ebe19e72de7c63569cab81e 100644 (file)
--- a/src/rm_policy.c
+++ b/src/rm_policy.c
instNameComplete = RM_FALSE;
instNameIndex = 0;
foundInstName = RM_FALSE;
- } else if (instNameIndex == RM_NAME_MAX_CHARS) {
+ }
+
+ if (instNameIndex == RM_NAME_MAX_CHARS) {
/* Instance name is longer than max length */
*result = RM_ERROR_INST_NAME_IN_ASSIGNMENT_TOO_LONG;
goto parseError;
if (!strncmp(extractedPerms->instName, Rm_policyGlobalInst,
RM_NAME_MAX_CHARS)) {
instIdx = RM_POLICY_GLOBAL_PERM_INDEX;
- } else if (vInst = rmPolicyGetValidInstNode((Rm_Handle)rmInst,
- extractedPerms->instName)) {
+ } else if ((vInst = rmPolicyGetValidInstNode((Rm_Handle)rmInst,
+ extractedPerms->instName))) {
instIdx = vInst->instIdx;
} else {
retVal = RM_ERROR_PERM_STR_INST_NOT_VALID;
if (validInstOffset < -FDT_ERR_NOTFOUND) {
*result = validInstOffset;
return(NULL);
- } else if (validInstOffset == -FDT_ERR_NOTFOUND) {
+ }
+
+ if (validInstOffset == -FDT_ERR_NOTFOUND) {
*result = RM_ERROR_NO_VALID_INST_IN_POLICY;
return(NULL);
}
diff --git a/src/rm_services.c b/src/rm_services.c
index ed3d758adedc46f57dd7aa6adc3539ba1b8b56a6..97c828d728043c76dde2c2505f29c3f9987b5e40 100644 (file)
--- a/src/rm_services.c
+++ b/src/rm_services.c
@@ -134,7 +134,7 @@ void Rm_serviceHandler (void *rmHandle, const Rm_ServiceReqInfo *serviceRequest,
rmInst = rmInst->u.sharedClient.sharedServerHandle;
}
- if (transaction = rmTransactionQueueAdd(rmInst)) {
+ if ((transaction = rmTransactionQueueAdd(rmInst))) {
transaction->type = serviceRequest->type;
rm_strncpy(transaction->serviceSrcInstName, instanceName,
RM_NAME_MAX_CHARS);
diff --git a/src/rm_transport.c b/src/rm_transport.c
index db14c8853bd65a04cbf2b1be6a23aebb9c3f6a54..a84b021fb162a82226d5a3153639da8a29398681 100644 (file)
--- a/src/rm_transport.c
+++ b/src/rm_transport.c
if (!transportCfg->transportCallouts.rmAllocPkt) {\r
*result = RM_ERROR_TRANSPORT_ALLOC_PKT_NOT_REGD;\r
goto errorExit;\r
- } else if (!transportCfg->transportCallouts.rmSendPkt) {\r
+ }\r
+ if (!transportCfg->transportCallouts.rmSendPkt) {\r
*result = RM_ERROR_TRANSPORT_SEND_NOT_REGD;\r
goto errorExit;\r
}\r
} else if (resourceReqPkt->resourceReqType ==\r
Rm_resReqPktType_GET_NAMED) {\r
transaction->type = Rm_service_RESOURCE_GET_BY_NAME;\r
+ } else {\r
+ retVal = RM_ERROR_RECEIVED_INVALID_PACKET_TYPE;\r
+ goto errorExit;\r
}\r
rm_strncpy(transaction->serviceSrcInstName,\r
resourceReqPkt->serviceSrcInstName, RM_NAME_MAX_CHARS);\r
index c775345894a942ce53c032f0da274963217ad5ca..d1769ac755160e2982a77515a83b9491ac68808e 100644 (file)
endif
# Compiler options
-INTERNALDEFS = $(DEBUG_FLAG) -D__ARMv7 -D_VIRTUAL_ADDR_SUPPORT -D__LINUX_USER_SPACE -D_LITTLE_ENDIAN=1 -DMAKEFILE_BUILD
+INTERNALDEFS = $(DEBUG_FLAG) -D__ARMv7 -D_VIRTUAL_ADDR_SUPPORT -D__LINUX_USER_SPACE -D_LITTLE_ENDIAN=1 -DMAKEFILE_BUILD -D_GNU_SOURCE
# Linker options
INTERNALLINKDEFS = -Wl,--start-group -L $(ARMV7LIBDIR) $(LIBS) -lrt -Wl,--end-group -pthread $(LDFLAGS)
index 92253d12e37aa794733cb63f2640d28154cb6ced..8644f2412f9aaa5c5aa04aeb74d60cd1e461b874 100644 (file)
printf("recv RM pkt failed from socket, "
"received = %d, expected = %d\n",
err, rm_pkt_len);
- return;
+ return(-1);
}
/* send back to DSP */
exit:
printf("Leaving rmServerExchange_execute\n\n");
- return 0;
+ return(0);
}
int main(int argc, char ** argv)
index b3d658867912521ce2e43be5bd4285f3f6bd71e7..6b546ca91abc3a58006333561369d29d5dd4517e 100644 (file)
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
-
+
+ /*
+ * Shut off: remark #880-D: parameter "appTransport" was never referenced
+ *
+ * This is better than removing the argument since removal would break
+ * backwards compatibility
+ */
+#ifdef _TMS320C6X
+#pragma diag_suppress 880
+#pragma diag_suppress 681
+#elif defined(__GNUC__)
+ /* Same for GCC:
+ * warning: unused parameter \91appTransport\92 [-Wunused-parameter]
+ */
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
/* Standard includes */
#include <stdio.h>
#include <errno.h>
@@ -311,13 +327,9 @@ Rm_Packet *transportAlloc(Rm_AppTransportHandle appTransport, uint32_t pktSize,
void transportFree (Rm_Packet *rm_pkt)
{
- uint32_t pkt_size;
- int32_t status;
-
if (rm_pkt) {
- pkt_size = rm_pkt->pktLenBytes;
- free (rm_pkt);
- }
+ free(rm_pkt);
+ }
}
int32_t transportSend (Rm_AppTransportHandle appTransport, Rm_PacketHandle pktHandle)
int32_t rm_result;
int retval;
int length = 0;
- sock_name_t serv_sock_name;
sock_name_t server_sock_addr;
Rm_Packet *rm_pkt = NULL;
struct timeval tv = {0, CLIENT_SOCK_TIMEOUT_USEC};
return;
}
- if (length < sizeof(*rm_pkt)) {
+ if (length < ((int)sizeof(*rm_pkt))) {
error_msg("invalid RM message length %d\n", length);
return;
}
info_msg("received RM pkt of size %d bytes from %s\n", length, server_sock_addr.s.addr->sun_path);
- /* Provide packet to RM Server for processing */
- if (rm_result = Rm_receivePacket(rmTransportMap[SERVER_TO_CLIENT_MAP_ENTRY].transportHandle, rm_pkt)) {
+ /* Provide packet to RM Server for processing */
+ if ((rm_result = Rm_receivePacket(rmTransportMap[SERVER_TO_CLIENT_MAP_ENTRY].transportHandle, rm_pkt))) {
printf("RM failed to process received packet: %d\n", rm_result);
}
int32_t rm_result;
int i;
sock_name_t sock_name;
- int32_t result = 0;
char server_sock_name[] = RM_SERVER_SOCKET_NAME;
/* Initialize the transport map */
rmTransportMap[i].transportHandle = NULL;
}
- sock_name.type = sock_name_e;
- sock_name.s.name = rmClientSockName;
+ sock_name.type = sock_name_e;
+ sock_name.s.name = rmClientSockName;
- rmClientSocket = sock_open(&sock_name);
- if (!rmClientSocket) {
- error_msg("Client socket open failed\n");
- exit(EXIT_FAILURE);
- }
+ rmClientSocket = sock_open(&sock_name);
+ if (!rmClientSocket) {
+ error_msg("Client socket open failed\n");
+ exit(EXIT_FAILURE);
+ }
rmTransportMap[SERVER_TO_CLIENT_MAP_ENTRY].remote_sock = calloc(1, sizeof(sock_name_t));
rmTransportMap[SERVER_TO_CLIENT_MAP_ENTRY].remote_sock->type = sock_name_e;
{
int fd;
struct stat file_stat;
- char *static_policy_addr = NULL;
+ char *static_policy_addr = NULL;
Rm_InitCfg rmInitCfg;
- int status;
- Rm_ServiceReqInfo requestInfo;
- Rm_ServiceRespInfo responseInfo;
- int32_t result;
+ Rm_ServiceReqInfo requestInfo;
+ Rm_ServiceRespInfo responseInfo;
+ int32_t result;
printf ("*********************************************************\n");
printf ("*************** RM Linux Client Testing *****************\n");
if (argc > 2)
{
error_msg("Invalid number of input arguments\n");
- exit(EXIT_FAILURE);
+ exit(EXIT_FAILURE);
}
if (argc == 2){
connection_setup();
client_test();
- cleanup();
+ cleanup();
- return (0);
+ return (0);
}
diff --git a/test/armv7/linux/rm_linux_mt_client_test.c b/test/armv7/linux/rm_linux_mt_client_test.c
index 47b34d281132ea8b3f73c7833ad9bb8fa659d4ae..e37be0fcc1bd1b45f6e13c5f3e7e304bb2730a42 100644 (file)
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
-
+
+ /*
+ * Shut off: remark #880-D: parameter "appTransport" was never referenced
+ *
+ * This is better than removing the argument since removal would break
+ * backwards compatibility
+ */
+#ifdef _TMS320C6X
+#pragma diag_suppress 880
+#pragma diag_suppress 681
+#elif defined(__GNUC__)
+ /* Same for GCC:
+ * warning: unused parameter \91appTransport\92 [-Wunused-parameter]
+ */
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
/* Standard includes */
#include <stdio.h>
#include <errno.h>
int length = 0;
sock_name_t server_sock_addr;
Rm_Packet *rm_pkt = NULL;
- struct sockaddr_un server_addr;
+ struct sockaddr_un server_addr;
retval = sock_wait(client_sock, &length, NULL, -1);
if (retval == -2) {
return;
}
- if (length < sizeof(*rm_pkt)) {
+ if (length < ((int)sizeof(*rm_pkt))) {
printf("invalid RM message length %d\n", length);
test_errors++;
return;
}
/* Provide packet to RM Server for processing */
- if (rm_result = Rm_receivePacket(rm_trans_map[MAP_ENTRY_SERVER_TO_CLIENT].transport_handle, rm_pkt)) {
+ if ((rm_result = Rm_receivePacket(rm_trans_map[MAP_ENTRY_SERVER_TO_CLIENT].transport_handle, rm_pkt))) {
printf("RM failed to process received packet: %d\n", rm_result);
}
@@ -331,7 +347,6 @@ int32_t transportSendRcv(Rm_AppTransportHandle appTransport, Rm_PacketHandle pkt
void *allocate_test (void *args)
{
uint32_t *thread_num = (uint32_t *)args;
- int32_t result;
Rm_ServiceReqInfo request;
Rm_ServiceRespInfo response;
uint32_t i;
void resource_cleanup(void)
{
- int32_t result;
Rm_ServiceReqInfo request;
Rm_ServiceRespInfo response;
uint32_t i;
int32_t rm_result;
int i;
sock_name_t sock_name;
- int32_t result = 0;
char server_sock_name[] = RM_SERVER_SOCKET_NAME;
printf("Setting up socket connection to RM Server\n");
rm_trans_map[i].transport_handle = NULL;
}
- sock_name.type = sock_name_e;
- sock_name.s.name = client_sock_name;
+ sock_name.type = sock_name_e;
+ sock_name.s.name = client_sock_name;
- client_sock = sock_open(&sock_name);
- if (!client_sock) {
- printf("Client socket open failed\n");
- exit(EXIT_FAILURE);
- }
+ client_sock = sock_open(&sock_name);
+ if (!client_sock) {
+ printf("Client socket open failed\n");
+ exit(EXIT_FAILURE);
+ }
rm_trans_map[MAP_ENTRY_SERVER_TO_CLIENT].remote_sock = calloc(1, sizeof(sock_name_t));
rm_trans_map[MAP_ENTRY_SERVER_TO_CLIENT].remote_sock->type = sock_name_e;
rm_trans_cfg.remoteInstType = Rm_instType_SERVER;
rm_trans_cfg.transportCallouts.rmAllocPkt = transportAlloc;
rm_trans_cfg.transportCallouts.rmSendPkt = transportSendRcv;
- rm_trans_map[MAP_ENTRY_SERVER_TO_CLIENT].transport_handle = Rm_transportRegister(&rm_trans_cfg, &rm_result);
+ rm_trans_map[MAP_ENTRY_SERVER_TO_CLIENT].transport_handle = Rm_transportRegister(&rm_trans_cfg, &rm_result);
}
void connection_close(void)
int32_t result;
/* Initialize the pthread mutex */
- if (pthread_result = pthread_mutex_init(&client_mutex_lock, NULL)) {
- printf("Error : Failed to init client pthread mutex with error code: \n", pthread_result);
+ if ((pthread_result = pthread_mutex_init(&client_mutex_lock, NULL))) {
+ printf("Error : Failed to init client pthread mutex with error code: %d\n", pthread_result);
test_errors++;
goto error_exit;
}
printf("Deleting RM Client\n");
if (service_handle) {
- Rm_serviceCloseHandle(service_handle);
+ result = Rm_serviceCloseHandle(service_handle);
ERROR_CHECK(RM_OK, result, client_name, "Service handle close failed");
}
ERROR_CHECK(RM_OK, result, client_name, "Instance delete failed");
}
- if (pthread_result = pthread_mutex_destroy(&client_mutex_lock)) {
- printf("Error : Failed to destroy client pthread mutex with error code: \n", pthread_result);
+ if ((pthread_result = pthread_mutex_destroy(&client_mutex_lock))) {
+ printf("Error : Failed to destroy client pthread mutex with error code: %d\n", pthread_result);
test_errors++;
}
}
int main(int argc, char *argv[])
{
- int32_t result;
int32_t malloc_free_diff;
int32_t byte_free_diff;
task_handle first_th;
index 6646f28242f528f6558c505f8dc47810c9c29e63..4663a604eb9c6266bde3e552c17bc7e03d590a2c 100644 (file)
*
* \par
* ============================================================================
- * @n (C) Copyright 2012-2014, Texas Instruments, Inc.
+ * @n (C) Copyright 2012-2015, Texas Instruments, Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* \par
*/
+/*
+ * Shut off: remark #880-D: parameter "CsHandle, mtSemObj, etc." are function
+ * input parameters but not referenced if the OSAL function is not
+ * used.
+ *
+ * The input arguments can't be removed without breaking the OSAL usage
+ */
+#ifdef _TMS320C6X
+#pragma diag_suppress 880
+#pragma diag_suppress 681
+#elif defined(__GNUC__)
+/* Same for GCC:
+ * warning: unused parameter CsHandle, mtSemObj, etc. [-Wunused-parameter]
+ */
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
/* Standard Includes */
+#include <stdio.h>
#include <stdint.h>
#include <stdarg.h>
#include <stdlib.h>
rmMallocCounter++;
rmByteAlloc += num_bytes;
- /* Allocate memory. */
- return calloc(1, num_bytes);
+ /* Allocate memory. */
+ return calloc(1, num_bytes);
}
/* FUNCTION PURPOSE: Frees memory
/* Increment the free counter. */
rmFreeCounter++;
rmByteFree += size;
- free(ptr);
+ free(ptr);
}
/* FUNCTION PURPOSE: Critical section enter
*/
void *Osal_rmCsEnter(void)
{
- return NULL;
+ return(NULL);
}
/* FUNCTION PURPOSE: Critical section exit
index e1f1f8a1b649eabaa24e8edccc23e539f2a0e1ca..ab7e80f59572bbe012b206f1908e8069346e7fcc 100644 (file)
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+/*
+ * Shut off: remark #880-D: parameter "appTransport" was never referenced
+ *
+ * This is better than removing the argument since removal would break
+ * backwards compatibility
+ */
+#ifdef _TMS320C6X
+#pragma diag_suppress 880
+#pragma diag_suppress 681
+#elif defined(__GNUC__)
+/* Same for GCC:
+ * warning: unused parameter \91appTransport\92 [-Wunused-parameter]
+ */
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
/* Standard includes */
#include <stdio.h>
#include <errno.h>
exit(EXIT_FAILURE); \
}
+#define MAX_LOG_LEVEL LOG_DEBUG
+
/* logging errors */
#define error_msg(...) rmsrv_log(LOG_ERR, __func__, __FILE__, __LINE__, __VA_ARGS__);
/* logging warnings */
@@ -130,35 +148,37 @@ void rmsrv_log(const int loglevel, const char* functionName, const char* fileNam
va_list args;
struct stat fbuf;
- snprintf(lineno_a, sizeof(lineno_a), "%d", lineNo);
+ if (loglevel <= MAX_LOG_LEVEL) {
+ snprintf(lineno_a, sizeof(lineno_a), "%d", lineNo);
- rmsrv_log_buf[0] = 0;
+ rmsrv_log_buf[0] = 0;
- LOG_APPEND(fileName);
- LOG_APPEND(":");
- LOG_APPEND(lineno_a);
- LOG_APPEND(":");
- LOG_APPEND(functionName);
- LOG_APPEND(":");
+ LOG_APPEND(fileName);
+ LOG_APPEND(":");
+ LOG_APPEND(lineno_a);
+ LOG_APPEND(":");
+ LOG_APPEND(functionName);
+ LOG_APPEND(":");
- len = MAX_PRE_LOG_BUF_LEN - strlen(rmsrv_log_buf);
- if (len <= 0) {
- return;
- }
+ len = MAX_PRE_LOG_BUF_LEN - strlen(rmsrv_log_buf);
+ if (len <= 0) {
+ return;
+ }
- va_start(args, format);
- vsnprintf(&rmsrv_log_buf[strlen(rmsrv_log_buf)], len, format, args);
- va_end(args);
+ va_start(args, format);
+ vsnprintf(&rmsrv_log_buf[strlen(rmsrv_log_buf)], len, format, args);
+ va_end(args);
- /* logfile reset if going over max_len */
- if (fstat(fileno(rmsrv_cfg.logfile_p), &fbuf) == 0) {
- if ((fbuf.st_size + strlen(rmsrv_log_buf)) > rmsrv_cfg.logfile_max_len) {
- freopen(RMSERVER_DAEMON_LOG_FILE_NAME, "w+", rmsrv_cfg.logfile_p);
+ /* logfile reset if going over max_len */
+ if (fstat(fileno(rmsrv_cfg.logfile_p), &fbuf) == 0) {
+ if ((fbuf.st_size + ((int)strlen(rmsrv_log_buf))) > rmsrv_cfg.logfile_max_len) {
+ freopen(RMSERVER_DAEMON_LOG_FILE_NAME, "w+", rmsrv_cfg.logfile_p);
+ }
}
- }
- fprintf(rmsrv_cfg.logfile_p, "%s", rmsrv_log_buf);
- fflush(rmsrv_cfg.logfile_p);
+ fprintf(rmsrv_cfg.logfile_p, "%s", rmsrv_log_buf);
+ fflush(rmsrv_cfg.logfile_p);
+ }
}
Rm_Packet *transportAlloc(Rm_AppTransportHandle appTransport, uint32_t pktSize, Rm_PacketHandle *pktHandle)
@@ -177,13 +197,11 @@ Rm_Packet *transportAlloc(Rm_AppTransportHandle appTransport, uint32_t pktSize,
return(rm_pkt);
}
-void transportFree (Rm_Packet *rm_pkt)
+void transportFree(Rm_Packet *rm_pkt)
{
- int32_t status;
-
if (rm_pkt) {
- free (rm_pkt);
- }
+ free(rm_pkt);
+ }
}
int32_t transportSend (Rm_AppTransportHandle appTransport, Rm_PacketHandle pktHandle)
goto loop_continue;
}
- if (length < sizeof(rm_pkt)) {
+ if (length < ((int)sizeof(rm_pkt))) {
error_msg("invalid RM message length %d\n", length);
goto loop_continue;
}
}
/* Provide packet to RM Server for processing */
- if (rm_result = Rm_receivePacket(map_index->trans_handle, rm_pkt)) {
+ if ((rm_result = Rm_receivePacket(map_index->trans_handle, rm_pkt))) {
error_msg("RM failed to process received packet: %d\n", rm_result);
}
exit(EXIT_FAILURE);
}
- if (check_and_create_path (get_pid_file_name()) < 0) {
+ if (check_and_create_path(get_pid_file_name()) < 0) {
printf("Failed to create pid file path: %s\n", get_pid_file_name());
exit(EXIT_FAILURE);
}
}
printf("Daemon returned %i as return value.\n", ret);
- return ret;
+ return(ret);
}
/* Close FDs */
daemon_retval_send(255);
daemon_signal_done();
daemon_pid_file_remove();
- }
+ }
+
+ return(0);
}
index 8f18f10bf08f5d8fc672e525fdc5396105a6f8df..d411435d53083a1bdedf66bb8677a9f986af1ad3 100644 (file)
* \par
*/
+/*
+ * Shut off: remark #880-D: parameter "CsHandle, mtSemObj, etc." are function
+ * input parameters but not referenced if the OSAL function is not
+ * used.
+ *
+ * The input arguments can't be removed without breaking the OSAL usage
+ */
+#ifdef _TMS320C6X
+#pragma diag_suppress 880
+#pragma diag_suppress 681
+#elif defined(__GNUC__)
+/* Same for GCC:
+ * warning: unused parameter CsHandle, mtSemObj, etc. [-Wunused-parameter]
+ */
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
/* Standard Includes */
#include <stdint.h>
#include <stdarg.h>
rmMallocCounter++;
rmByteAlloc += num_bytes;
- /* Allocate memory. */
- return calloc(1, num_bytes);
+ /* Allocate memory. */
+ return calloc(1, num_bytes);
}
/* FUNCTION PURPOSE: Frees memory
/* Increment the free counter. */
rmFreeCounter++;
rmByteFree += size;
- free(ptr);
+ free(ptr);
}
/* FUNCTION PURPOSE: Critical section enter
/* logfile reset if going over max_len */
if (fstat(fileno(rmsrv_cfg.logfile_p), &fbuf) == 0) {
- if ((fbuf.st_size + strlen(rmsrv_log_buf)) > rmsrv_cfg.logfile_max_len) {
+ if ((fbuf.st_size + ((int)strlen(rmsrv_log_buf))) > rmsrv_cfg.logfile_max_len) {
freopen(RMSERVER_DAEMON_LOG_FILE_NAME, "w+", rmsrv_cfg.logfile_p);
}
}
index 57cdacb60f7462c41422369610d5d03c5ef82628..fafddccdce440e9443e2e0025228e28231e106ed 100644 (file)
int fd;
} sock_data_t;
-int check_and_create_path (char *path)
+int check_and_create_path(char *path)
{
char *d = path;
if (!d)
return -1;
- while (d = strchr(d + 1, '/')) {
+ while ((d = strchr(d + 1, '/'))) {
*d = 0;
if (mkdir(path, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) < 0) {
if (errno != EEXIST) {
@@ -230,8 +230,6 @@ int sock_wait (sock_h handle, int *size, struct timeval *timeout, int extern_fd)
int sock_recv (sock_h handle, char *data, int length, sock_name_t *from)
{
int size;
- int retval;
- fd_set fds;
sock_data_t *sd = (sock_data_t *) handle;
socklen_t from_length = 0;
index dc5d811eef40d85db4807a53fc44cae968a273dc..92d65b375126926b9f87dadb34d6e27420e92b90 100644 (file)
#define sock_h void *
+int check_and_create_path(char *path);
+
sock_h sock_open (sock_name_t *sock_name);
int sock_close (sock_h handle);