summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (from parent 1: 33121b1)
raw | patch | inline | side by side (from parent 1: 33121b1)
author | Justin Sobota <jsobota@ti.com> | |
Thu, 16 May 2013 22:16:59 +0000 (18:16 -0400) | ||
committer | Justin Sobota <jsobota@ti.com> | |
Thu, 16 May 2013 22:16:59 +0000 (18:16 -0400) |
rm.h | patch | blob | history | |
src/rm.c | patch | blob | history | |
src/rm_policy.c | patch | blob | history | |
test/src/rm_mem_test.c | patch | blob | history | |
test/src/rm_test.c | patch | blob | history |
index 91947c78aa9bc74868f6dc3ddef8940075dba594..349508b8ddf111b7ded33421d58416714b290ab0 100644 (file)
--- a/rm.h
+++ b/rm.h
/** Status request resource range partially found (Handling of partial status requests not yet implemented) */
#define RM_SERVICE_DENIED_PARTIAL_STATUS RM_SERVICE_DENIED_BASE+18
+/** RM Client Delegate instance is not stable. RM system operation cannot be guarateed
+ * if a CD instance is used. At the time please manage resources using Server and Client
+ * instances - tracked by SDOCM00100797 */
+#define RM_WARNING_CD_INSTANCE_NOT_STABLE (-1024)
+
/** Start of libfdt.h error codes */
#define RM_ERROR_LIBFDT_START (-1)
/** End of libfdt.h error codes */
diff --git a/src/rm.c b/src/rm.c
index f82d62b48e6d6ea6c3d08a5446066da10ad733f2..e99d5190d9a8a5db815b2683bd0a6b783b214636 100644 (file)
--- a/src/rm.c
+++ b/src/rm.c
}
rmInst->u.cd.allocators = NULL;
+
+ /* Remove once CD instance is stable - tracked by SDOCM00100797 */
+ *result = RM_WARNING_CD_INSTANCE_NOT_STABLE;
}
else if (rmInst->instType == Rm_instType_CLIENT) {
if (initCfg->instCfg.clientCfg.staticPolicy) {
diff --git a/src/rm_policy.c b/src/rm_policy.c
index 418a19737df32c4326b3f1c8be887360066a2ece..d83b4bc7273c9fb26248a80f52a8fd99b7dd3895 100644 (file)
--- a/src/rm_policy.c
+++ b/src/rm_policy.c
nodeOffset = RM_DTB_UTIL_STARTING_NODE_OFFSET;
/* Find node offset for provided resource name */
- while ((nodeOffset >= RM_DTB_UTIL_STARTING_NODE_OFFSET) &&
- (depth >= RM_DTB_UTIL_STARTING_DEPTH)) {
+ while (nodeOffset >= RM_DTB_UTIL_STARTING_NODE_OFFSET) {
nodeOffset = fdt_next_node(policyDtb, nodeOffset, &depth);
if (depth < RM_DTB_UTIL_STARTING_DEPTH) {
/* Resource name not found */
nodeOffset = RM_SERVICE_DENIED_RES_DOES_NOT_EXIST;
+ break;
}
else {
nodeName = fdt_get_name(policyDtb, nodeOffset, NULL);
/* Parse DTB, verifying each resource's assignment permissions.
* Permissions must have correct syntax and contain valid instance names
* according validInstList */
- while ((nodeOffset >= RM_DTB_UTIL_STARTING_NODE_OFFSET) &&
- (depth >= RM_DTB_UTIL_STARTING_DEPTH)) {
+ while (nodeOffset >= RM_DTB_UTIL_STARTING_NODE_OFFSET) {
nodeOffset = fdt_next_node(policyDtb, nodeOffset, &depth);
+ if (depth < RM_DTB_UTIL_STARTING_DEPTH) {
+ break;
+ }
nodeName = fdt_get_name(policyDtb, nodeOffset, NULL);
if (fdt_first_property_offset(policyDtb, nodeOffset) > RM_DTB_UTIL_STARTING_NODE_OFFSET) {
if (rmAllocatorFind(rmHandle, nodeName) == NULL) {
/* Parse DTB, verifying each resource's assignment permissions.
* Permissions must have correct syntax and contain valid instance names
* according validInstList */
- while ((nodeOffset >= RM_DTB_UTIL_STARTING_NODE_OFFSET) &&
- (depth >= RM_DTB_UTIL_STARTING_DEPTH)) {
+ while (nodeOffset >= RM_DTB_UTIL_STARTING_NODE_OFFSET) {
nodeOffset = fdt_next_node(policyDtb, nodeOffset, &depth);
+ if (depth < RM_DTB_UTIL_STARTING_DEPTH) {
+ break;
+ }
propertyOffset = fdt_first_property_offset(policyDtb, nodeOffset);
while (propertyOffset > RM_DTB_UTIL_STARTING_NODE_OFFSET) {
propertyData = fdt_getprop_by_offset(policyDtb, propertyOffset, &propertyName, &propertyLen);
diff --git a/test/src/rm_mem_test.c b/test/src/rm_mem_test.c
index c1ff7900ce765ccce1f2eba3af52964a4de18c81..da276310227ed3896487a5b82471b1445846c03f 100644 (file)
--- a/test/src/rm_mem_test.c
+++ b/test/src/rm_mem_test.c
rmInitCfg.instType = Rm_instType_CLIENT_DELEGATE;
rmInitCfg.instCfg.cdCfg.cdPolicy = (void *)rmGlobalPolicy;
rmHandle = Rm_init(&rmInitCfg, &rmResult);
- ERROR_CHECK(RM_OK, rmResult, rmInstName, "Initialization failed");
+ ERROR_CHECK(RM_WARNING_CD_INSTANCE_NOT_STABLE, rmResult, rmInstName, "Initialization failed");
MEM_TEST_MID_STORE();
rmResult = Rm_delete(rmHandle, RM_TEST_TRUE);
ERROR_CHECK(RM_OK, rmResult, rmInstName, "Delete failed");
MEM_TEST_START_STORE();
rmInitCfg.instCfg.cdCfg.cdPolicy = (void *)rmStaticPolicy;
rmHandle = Rm_init(&rmInitCfg, &rmResult);
- ERROR_CHECK(RM_OK, rmResult, rmInstName, "Initialization failed");
+ ERROR_CHECK(RM_WARNING_CD_INSTANCE_NOT_STABLE, rmResult, rmInstName, "Initialization failed");
MEM_TEST_MID_STORE();
rmResult = Rm_delete(rmHandle, RM_TEST_TRUE);
ERROR_CHECK(RM_OK, rmResult, rmInstName, "Delete failed");
MEM_TEST_START_STORE();
rmHandle = Rm_init(&rmInitCfg, &rmResult);
- ERROR_CHECK(RM_OK, rmResult, rmInstName, "Initialization failed");
+ ERROR_CHECK(RM_WARNING_CD_INSTANCE_NOT_STABLE, rmResult, rmInstName, "Initialization failed");
/* Open service handle */
serviceHandle = Rm_serviceOpenHandle(rmHandle, &rmResult);
ERROR_CHECK(RM_OK, rmResult, rmInstName, "Service handle open failed");
rmInitCfg.instType = Rm_instType_CLIENT_DELEGATE;
rmInitCfg.instCfg.cdCfg.cdPolicy = (void *)rmGlobalPolicy;
cdHandle = Rm_init(&rmInitCfg, &rmResult);
- ERROR_CHECK(RM_OK, rmResult, cdName, "Initialization failed");
+ ERROR_CHECK(RM_WARNING_CD_INSTANCE_NOT_STABLE, rmResult, cdName, "Initialization failed");
/* Init Client */
memset((void *)&rmInitCfg, 0, sizeof(rmInitCfg));
System_sprintf (clientName, "RM_Client");
diff --git a/test/src/rm_test.c b/test/src/rm_test.c
index 4e7b7a9539c04d2e7efc09eaa052aebcb95e8fe3..e1b87868ce842f88fe250e2565a876cd942aa06a 100644 (file)
--- a/test/src/rm_test.c
+++ b/test/src/rm_test.c
rmInitCfg.instType = Rm_instType_CLIENT_DELEGATE;
rmInitCfg.instCfg.cdCfg.cdPolicy = (void *)rmGlobalPolicy;
rmCdHandle = Rm_init(&rmInitCfg, &result);
- ERROR_CHECK(RM_OK, result, rmCdName, "Initialization failed");
+ ERROR_CHECK(RM_WARNING_CD_INSTANCE_NOT_STABLE, result, rmCdName, "Initialization failed");
/* Open CD service handle */
rmCdServiceHandle = Rm_serviceOpenHandle(rmCdHandle, &result);