@@ -104,6 +104,9 @@ static int8_t isKey(const std::string& keyName) {
104104 INIT_CONFIGS_ELEM_CACHE_INFO_TYPE,
105105 INIT_CONFIGS_ELEM_CACHE_INFO_BLK_CNT,
106106 INIT_CONFIGS_ELEM_CACHE_INFO_PRIO_AWARE,
107+ INIT_CONFIGS_IRQ_CONFIGS_LIST,
108+ INIT_CONFIG_IRQ_AFFINE_TO_CLUSTER,
109+ INIT_CONFIG_IRQ_AFFINE_ONE,
107110 SIGNAL_CONFIGS_ROOT,
108111 SIGNAL_CONFIGS_ELEM_SIGID,
109112 SIGNAL_CONFIGS_ELEM_CATEGORY,
@@ -147,6 +150,10 @@ static int8_t isKeyTypeList(const std::string& keyName) {
147150 if (keyName == INIT_CONFIGS_ELEM_MPAM_GROUPS_LIST) return true ;
148151 if (keyName == INIT_CONFIGS_ELEM_CACHE_INFO_LIST) return true ;
149152
153+ if (keyName == INIT_CONFIGS_IRQ_CONFIGS_LIST) return true ;
154+ if (keyName == INIT_CONFIG_IRQ_AFFINE_TO_CLUSTER) return true ;
155+ if (keyName == INIT_CONFIG_IRQ_AFFINE_ONE) return true ;
156+
150157 if (keyName == RESOURCE_CONFIGS_ELEM_MODES) return true ;
151158 if (keyName == RESOURCE_CONFIGS_ELEM_TARGETS_ENABLED) return true ;
152159 if (keyName == RESOURCE_CONFIGS_ELEM_TARGETS_DISABLED) return true ;
@@ -456,10 +463,13 @@ ErrCode RestuneParser::parseInitConfigYamlNode(const std::string& filePath) {
456463
457464 int8_t parsingDone = false ;
458465 int8_t docMarker = false ;
466+ int8_t inAffineClusterList = false ;
467+ int8_t inAffineOneList = false ;
459468
460469 std::string value;
461470 std::string topKey;
462471 std::stack<std::string> keyTracker;
472+ std::vector<std::string> itemArray;
463473
464474 CGroupConfigInfoBuilder* cGroupConfigBuilder = nullptr ;
465475 MpamGroupConfigInfoBuilder* mpamGroupConfigBuilder = nullptr ;
@@ -475,11 +485,47 @@ ErrCode RestuneParser::parseInitConfigYamlNode(const std::string& filePath) {
475485 parsingDone = true ;
476486 break ;
477487
488+ case YAML_SEQUENCE_START_EVENT:
489+ if (keyTracker.empty ()) {
490+ return RC_YAML_INVALID_SYNTAX;
491+ }
492+
493+ topKey = keyTracker.top ();
494+
495+ if (topKey == INIT_CONFIG_IRQ_AFFINE_TO_CLUSTER) {
496+ inAffineClusterList = true ;
497+ } else if (topKey == INIT_CONFIG_IRQ_AFFINE_ONE) {
498+ inAffineOneList = true ;
499+ }
500+
501+ break ;
502+
478503 case YAML_SEQUENCE_END_EVENT:
479504 if (keyTracker.empty ()) {
480505 return RC_YAML_INVALID_SYNTAX;
481506 }
482507
508+ if (inAffineClusterList) {
509+ if (RC_IS_OK (rc)) {
510+ rc = TargetRegistry::getInstance ()->addIrqAffine (itemArray, true );
511+ if (RC_IS_NOTOK (rc)) {
512+ return RC_YAML_INVALID_SYNTAX;
513+ }
514+ }
515+ itemArray.clear ();
516+ inAffineClusterList = !inAffineClusterList;
517+
518+ } else if (inAffineOneList) {
519+ if (RC_IS_OK (rc)) {
520+ rc = TargetRegistry::getInstance ()->addIrqAffine (itemArray);
521+ if (RC_IS_NOTOK (rc)) {
522+ return RC_YAML_INVALID_SYNTAX;
523+ }
524+ }
525+ itemArray.clear ();
526+ inAffineOneList = !inAffineOneList;
527+ }
528+
483529 keyTracker.pop ();
484530 break ;
485531
@@ -552,6 +598,7 @@ ErrCode RestuneParser::parseInitConfigYamlNode(const std::string& filePath) {
552598
553599 delete cacheInfoBuilder;
554600 cacheInfoBuilder = nullptr ;
601+
555602 }
556603
557604 break ;
@@ -588,6 +635,10 @@ ErrCode RestuneParser::parseInitConfigYamlNode(const std::string& filePath) {
588635 ADD_TO_CACHE_INFO_BUILDER (INIT_CONFIGS_ELEM_CACHE_INFO_BLK_CNT, setNumBlocks);
589636 ADD_TO_CACHE_INFO_BUILDER (INIT_CONFIGS_ELEM_CACHE_INFO_PRIO_AWARE, setPriorityAware);
590637
638+ if (topKey == INIT_CONFIG_IRQ_AFFINE_TO_CLUSTER || topKey == INIT_CONFIG_IRQ_AFFINE_ONE) {
639+ itemArray.push_back (value);
640+ }
641+
591642 break ;
592643
593644 default :
0 commit comments