[dpdk-dev] [PATCH v3 5/8] examples/power: add json string handling
Burakov, Anatoly
anatoly.burakov at intel.com
Tue Sep 25 13:27:42 CEST 2018
On 14-Sep-18 2:54 PM, David Hunt wrote:
> Add JSON string handling to vm_power_manager for JSON strings received
> through the fifo. The format of the JSON strings are detailed in the
> next patch, the vm_power_manager user guide documentation updates.
>
> This patch introduces a new dependency on Jansson, a C library for
> encoding, decoding and manipulating JSON data. To compile the sample app
> you now need to have installed libjansson4 and libjansson-dev (these may
> be named slightly differently depending on your Operating System)
>
> Signed-off-by: David Hunt <david.hunt at intel.com>
> ---
<snip>
> void channel_monitor_exit(void)
> {
> run_loop = 0;
> @@ -124,18 +259,11 @@ get_pcpu_to_control(struct policy *pol)
>
> ci = get_core_info();
>
> - RTE_LOG(INFO, CHANNEL_MONITOR,
> - "Looking for pcpu for %s\n", pol->pkt.vm_name);
> -
> /*
> * So now that we're handling virtual and physical cores, we need to
> * differenciate between them when adding them to the branch monitor.
> * Virtual cores need to be converted to physical cores.
> */
> -
> -
> -
> -
Now you're removing those newlines you added in previous commit :)
> if (pol->pkt.core_type == CORE_TYPE_VIRTUAL) {
> /*
> * If the cores in the policy are virtual, we need to map them
> @@ -295,8 +423,6 @@ apply_traffic_profile(struct policy *pol)
>
> diff = get_pkt_diff(pol);
>
> - RTE_LOG(INFO, CHANNEL_MONITOR, "Applying traffic profile\n");
> -
Here and in a few other places: these log message removals look to be
unrelated to this commit. Also, in my experience, more logging is better
than less logging, especially when something goes wrong - maybe instead
of removing them, just switch the level to debug?
> if (diff >= (pol->pkt.traffic_policy.max_max_packet_thresh)) {
> for (count = 0; count < pol->pkt.num_vcpu; count++) {
> if (pol->core_share[count].status != 1)
> @@ -340,9 +466,6 @@ apply_time_profile(struct policy *pol)
> if (pol->core_share[count].status != 1) {
> power_manager_scale_core_max(
> pol->core_share[count].pcpu);
> - RTE_LOG(INFO, CHANNEL_MONITOR,
<snip>
> + int idx = 0;
> + int indent = 0;
> + do {
> + n_bytes = read(chan_info->fd, &json_data[idx], 1);
> + if (n_bytes == 0)
> + break;
> + if (json_data[idx] == '{')
> + indent++;
> + if (json_data[idx] == '}')
> + indent--;
What happens if someone sends a string with a "{" or "}" inside?
> + if ((indent > 0) || (idx >> 0))
idx > 0?
> + idx++;
> + if (indent == 0)
> + json_data[idx] = 0;
> + if (idx >= MAX_JSON_STRING_LEN)
> + break;
This looks like a potential overflow to me, because you increment idx,
check if it's >= max, but still write into that location if indent == 0
on previous line.
> + } while (indent > 0);
> +
> + if (indent > 0)
> + /*
> + * We've broken out of the read loop without getting
> + * a closing brace, so throw away the datai
I think "data" is plural already, no need to invent a new word :)
> + */
> + json_data[idx] = 0;
idx could potentially be overflown already due to code above?
> +
> + if (strlen(json_data) == 0)
> + continue;
> +
> + printf("got [%s]\n", json_data);
> +
<snip>
> void
> run_channel_monitor(void)
> {
> @@ -570,11 +785,16 @@ run_channel_monitor(void)
> if (!run_loop)
> break;
> for (i = 0; i < n_events; i++) {
> + if (!global_events_list[i].data.ptr) {
> + fflush(stdout);
> + continue;
> + }
This change looks unrelated to this commit.
> struct channel_info *chan_info = (struct channel_info *)
> global_events_list[i].data.ptr;
> if ((global_events_list[i].events & EPOLLERR) ||
--
Thanks,
Anatoly
More information about the dev
mailing list