While the core frequency scale-up and scale down all works fine with the
fifo-per-core functionaliry, there was a gap for policy handling. When
creating or destroying a policy, the core associated with the fifo
needs to be automatically added to the core list, so the policy is
associated with the correct core.

Fixes: 221e7026d521 ("examples/power: add FIFO per core for JSON interface")

Signed-off-by: David Hunt <david.h...@intel.com>
---
 examples/vm_power_manager/channel_monitor.c | 24 ++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/examples/vm_power_manager/channel_monitor.c 
b/examples/vm_power_manager/channel_monitor.c
index 496772f8a..fe6088a18 100644
--- a/examples/vm_power_manager/channel_monitor.c
+++ b/examples/vm_power_manager/channel_monitor.c
@@ -835,6 +835,8 @@ read_json_packet(struct channel_info *chan_info)
        json_t *root;
        json_error_t error;
        const char *resource_name;
+       char *start, *end;
+       uint32_t n;
 
 
        /* read opening brace to closing brace */
@@ -882,7 +884,27 @@ read_json_packet(struct channel_info *chan_info)
                                        "Error validating JSON profile data\n");
                                break;
                        }
-                       process_request(&pkt, chan_info);
+                       start = strstr(pkt.vm_name,
+                                       CHANNEL_MGR_FIFO_PATTERN_NAME);
+                       if (start != NULL) {
+                               /* move past pattern to start of fifo id */
+                               start += strlen(CHANNEL_MGR_FIFO_PATTERN_NAME);
+
+                               end = start;
+                               n = (uint32_t)strtoul(start, &end, 10);
+
+                               if (end[0] == '\0') {
+                                       /* Add core id to core list */
+                                       pkt.num_vcpu = 1;
+                                       pkt.vcpu_to_control[0] = n;
+                                       process_request(&pkt, chan_info);
+                               } else {
+                                       RTE_LOG(ERR, CHANNEL_MONITOR,
+                                               "Cannot extract core id from 
fifo name\n");
+                               }
+                       } else {
+                               process_request(&pkt, chan_info);
+                       }
                } else {
                        RTE_LOG(ERR, CHANNEL_MONITOR,
                                        "JSON error on line %d: %s\n",
-- 
2.17.1

Reply via email to