From abeef65dfdefbaedd14464dd07a8eb5f6a6ebacf Mon Sep 17 00:00:00 2001 From: David Hunt Date: Tue, 16 Jul 2019 12:11:12 +0100 Subject: [PATCH] examples/power: fix policy handling for FIFO While the core frequency scale-up and scale down all works fine with the fifo-per-core functionality, 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 Acked-by: Anatoly Burakov --- 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 496772f8af..fe6088a186 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.20.1