power: fix make build for power apps
PATCH 1/1 power: fix make build for power apps
From: Bruce Richardson <[email protected]>
The guest channel message definitions and commands in guest_channel.h file are needed by applications and need to be made public.
This patch is needed because make is broken for the power_mgmt apps, as the channel commands API is private. This previously built within DPDK, but now with all the meson/ninja changes, making these apps externally no longer works. To fix, we need to move the header file with the API definitions for the channel commands public, and rename the functionss accordingly.
The main change is to rename channel_commands.h to rte_power_guest_channel.h so that it gets picked up by the installer and copied to /usr/local/include. Other changes include renaming #defines to have RTE_ at the beginning instead of CPU_. Finally we refactor the code to work with those changes.
--- examples/vm_power_manager/channel_manager.c | 1 - examples/vm_power_manager/channel_monitor.c | 148 ++++++++-------- examples/vm_power_manager/channel_monitor.h | 10 +- examples/vm_power_manager/guest_cli/main.c | 31 ++-- .../guest_cli/vm_power_cli_guest.c | 70 ++++---- .../guest_cli/vm_power_cli_guest.h | 6 +- examples/vm_power_manager/main.c | 2 +- examples/vm_power_manager/vm_power_cli.c | 1 - lib/librte_power/channel_commands.h | 125 -------------- lib/librte_power/guest_channel.c | 11 +- lib/librte_power/guest_channel.h | 45 +---- lib/librte_power/meson.build | 3 +- lib/librte_power/power_kvm_vm.c | 17 +- lib/librte_power/rte_power.h | 1 + lib/librte_power/rte_power_guest_channel.h | 160 ++++++++++++++++++ 15 files changed, 320 insertions(+), 311 deletions(-) delete mode 100644 lib/librte_power/channel_commands.h create mode 100644 lib/librte_power/rte_power_guest_channel.h
examples/vm_power_manager/channel_manager.c +0 -1
@@ -27,7 +27,6 @@#include <libvirt/libvirt.h> #include "channel_manager.h" -#include "channel_commands.h" #include "channel_monitor.h" #include "power_manager.h"
examples/vm_power_manager/channel_monitor.c +77 -71
419 lines not on this page · raw message
examples/vm_power_manager/channel_monitor.h +5 -5
@@ -5,8 +5,8 @@ #ifndef CHANNEL_MONITOR_H_ #define CHANNEL_MONITOR_H_ +#include <rte_power.h> #include "channel_manager.h" -#include "channel_commands.h" struct core_share { unsigned int pcpu;
@@ -18,11 +18,11 @@ struct core_share { };struct policy { -struct channel_packet pkt; -uint32_t pfid[MAX_VFS ]; -uint32_t port[MAX_VFS ]; +struct rte_power_channel_packet pkt; +uint32_t pfid[RTE_POWER_MAX_VFS ]; +uint32_t port[RTE_POWER_MAX_VFS ];unsigned int enabled; -struct core_share core_share[MAX_VCPU_PER_VM ]; +struct core_share core_share[RTE_POWER_MAX_VCPU_PER_VM ]; };#ifdef __cplusplus
examples/vm_power_manager/guest_cli/main.c +19 -12
@@ -48,10 +48,10 @@ parse_args(int argc, char **argv) { "policy", required_argument, 0, 'o'}, {NULL, 0, 0, 0} }; -struct channel_packet *policy; +struct rte_power_channel_packet *policy;unsigned short int hours[MAX_HOURS ]; -unsigned short int cores[MAX_VCPU_PER_VM ]; -unsigned short int ports[MAX_VCPU_PER_VM ]; +unsigned short int cores[RTE_POWER_MAX_VCPU_PER_VM ]; +unsigned short int ports[RTE_POWER_MAX_VCPU_PER_VM ];int i, cnt, idx; policy =get_policy ();
@@ -69,7 +69,8 @@ parse_args(int argc, char **argv)switch (opt) {/* portmask */ case 'n' : -strlcpy (policy->vm_name, optarg,VM_MAX_NAME_SZ ); +strlcpy (policy->vm_name, optarg, +RTE_POWER_VM_MAX_NAME_SZ );printf ("Setting VM Name to [%s]\n" , policy->vm_name);break ;case 'b' :
@@ -97,14 +98,15 @@ parse_args(int argc, char **argv) }break ;case 'l' : - cnt =parse_set (optarg, cores,MAX_VCPU_PER_VM ); + cnt =parse_set (optarg, cores, +RTE_POWER_MAX_VCPU_PER_VM );if (cnt <0 ) {printf ("Invalid value passed to vcpu-list - [%s]\n" , optarg);break ; } idx =0 ; -for (i =0 ; i <MAX_VCPU_PER_VM ; i++) { +for (i =0 ; i <RTE_POWER_MAX_VCPU_PER_VM ; i++) {if (cores[i]) {printf ("***Using core %d\n" , i); policy->vcpu_to_control[idx++] = i;
@@ -114,14 +116,15 @@ parse_args(int argc, char **argv)printf ("Total cores: %d\n" , idx);break ;case 'p' : - cnt =parse_set (optarg, ports,MAX_VCPU_PER_VM ); + cnt =parse_set (optarg, ports, +RTE_POWER_MAX_VCPU_PER_VM );if (cnt <0 ) {printf ("Invalid value passed to port-list - [%s]\n" , optarg);break ; } idx =0 ; -for (i =0 ; i <MAX_VCPU_PER_VM ; i++) { +for (i =0 ; i <RTE_POWER_MAX_VCPU_PER_VM ; i++) {if (ports[i]) {printf ("***Using port %d\n" , i);if (set_policy_mac (i, idx++) !=0 ) {
@@ -135,13 +138,17 @@ parse_args(int argc, char **argv)break ;case 'o' :if (!strcmp (optarg,"TRAFFIC" )) - policy->policy_to_use =TRAFFIC ; + policy->policy_to_use = +RTE_POWER_POLICY_TRAFFIC ;else if (!strcmp (optarg,"TIME" )) - policy->policy_to_use =TIME ; + policy->policy_to_use = +RTE_POWER_POLICY_TIME ;else if (!strcmp (optarg,"WORKLOAD" )) - policy->policy_to_use =WORKLOAD ; + policy->policy_to_use = +RTE_POWER_POLICY_WORKLOAD ;else if (!strcmp (optarg,"BRANCH_RATIO" )) - policy->policy_to_use =BRANCH_RATIO ; + policy->policy_to_use = +RTE_POWER_POLICY_BRANCH_RATIO ;else {printf ("Invalid policy specified: %s\n" , optarg);
examples/vm_power_manager/guest_cli/vm_power_cli_guest.c +36 -34
209 lines not on this page · raw message
examples/vm_power_manager/guest_cli/vm_power_cli_guest.h +2 -4
@@ -9,13 +9,11 @@extern "C" {#endif -#include "channel_commands.h" - -struct channel_packet *get_policy (void ); +struct rte_power_channel_packet *get_policy (void );int set_policy_mac (int port,int idx); -int set_policy_defaults (struct channel_packet *pkt); +int set_policy_defaults (struct rte_power_channel_packet *pkt); void run_cli(__rte_unused void *arg);
examples/vm_power_manager/main.c +1 -1
@@ -394,7 +394,7 @@ main(int argc, char **argv)"Cannot init port %" PRIu8"\n" , portid); -for (w =0 ; w <MAX_VFS ; w++) { +for (w =0 ; w <RTE_POWER_MAX_VFS ; w++) { eth.addr_bytes[5 ] = w +0xf0 ; ret = -ENOTSUP ;
examples/vm_power_manager/vm_power_cli.c +0 -1
@@ -21,7 +21,6 @@#include "channel_manager.h" #include "channel_monitor.h" #include "power_manager.h" -#include "channel_commands.h" struct cmd_quit_result {cmdline_fixed_string_t quit;
lib/librte_power/channel_commands.h deleted +0 -125
125 lines not on this page · raw message
lib/librte_power/guest_channel.c +6 -5
@@ -15,9 +15,9 @@#include <rte_log.h> +#include <rte_power.h> #include "guest_channel.h" -#include "channel_commands.h" #define RTE_LOGTYPE_GUEST_CHANNEL RTE_LOGTYPE_USER1
@@ -55,7 +55,7 @@ int guest_channel_host_connect(const char *path, unsigned int lcore_id) { int flags, ret; -struct channel_packet pkt; +struct rte_power_channel_packet pkt;char fd_path[PATH_MAX ];int fd =-1 ;
@@ -100,7 +100,7 @@ guest_channel_host_connect(const char *path, unsigned int lcore_id)/* Send a test packet, this command is ignored by the host, but a successful * send indicates that the host endpoint is monitoring. */ - pkt.command =CPU_POWER_CONNECT ; + pkt.command =RTE_POWER_CPU_POWER_CONNECT ; global_fds[lcore_id] = fd; ret =guest_channel_send_msg (&pkt, lcore_id);if (ret !=0 ) {
@@ -119,7 +119,8 @@ guest_channel_host_connect(const char *path, unsigned int lcore_id) }int -guest_channel_send_msg (struct channel_packet *pkt,unsigned int lcore_id) +guest_channel_send_msg (struct rte_power_channel_packet *pkt, +unsigned int lcore_id) {int ret, buffer_len =sizeof (*pkt);void *buffer = pkt;
@@ -149,7 +150,7 @@ guest_channel_send_msg(struct channel_packet *pkt, unsigned int lcore_id)return 0 ; } -int rte_power_guest_channel_send_msg (struct channel_packet *pkt, +int rte_power_guest_channel_send_msg (struct rte_power_channel_packet *pkt,unsigned int lcore_id) {return guest_channel_send_msg (pkt, lcore_id);
lib/librte_power/guest_channel.h +3 -42
64 lines not on this page · raw message
lib/librte_power/meson.build +2 -1
@@ -10,5 +10,6 @@ sources = files('rte_power.c', 'power_acpi_cpufreq.c', 'rte_power_empty_poll.c', 'power_pstate_cpufreq.c', 'power_common.c') -headers = files('rte_power.h','rte_power_empty_poll.h') +headers = files('rte_power.h','rte_power_empty_poll.h', + 'rte_power_guest_channel.h') deps += ['timer']
lib/librte_power/power_kvm_vm.c +8 -9
@@ -7,13 +7,12 @@#include <rte_log.h> #include "guest_channel.h" -#include "channel_commands.h" #include "power_kvm_vm.h" #include "power_common.h" #define FD_PATH "/dev/virtio-ports/virtio.serial.port.poweragent" -static struct channel_packet pkt[RTE_MAX_LCORE ]; +static struct rte_power_channel_packet pkt[RTE_MAX_LCORE ];int power_kvm_vm_check_supported (void )
@@ -29,7 +28,7 @@ power_kvm_vm_init(unsigned int lcore_id) lcore_id, RTE_MAX_LCORE-1);return -1 ; } - pkt[lcore_id].command =CPU_POWER ; + pkt[lcore_id].command =RTE_POWER_CPU_POWER ; pkt[lcore_id].resource_id = lcore_id;return guest_channel_host_connect (FD_PATH , lcore_id); }
@@ -90,25 +89,25 @@ send_msg(unsigned int lcore_id, uint32_t scale_direction)int power_kvm_vm_freq_up (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_SCALE_UP ); +return send_msg (lcore_id,RTE_POWER_SCALE_UP ); }int power_kvm_vm_freq_down (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_SCALE_DOWN ); +return send_msg (lcore_id,RTE_POWER_SCALE_DOWN ); }int power_kvm_vm_freq_max (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_SCALE_MAX ); +return send_msg (lcore_id,RTE_POWER_SCALE_MAX ); }int power_kvm_vm_freq_min (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_SCALE_MIN ); +return send_msg (lcore_id,RTE_POWER_SCALE_MIN ); }int
@@ -121,13 +120,13 @@ power_kvm_vm_turbo_status(__rte_unused unsigned int lcore_id)int power_kvm_vm_enable_turbo (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_ENABLE_TURBO ); +return send_msg (lcore_id,RTE_POWER_ENABLE_TURBO ); }int power_kvm_vm_disable_turbo (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_DISABLE_TURBO ); +return send_msg (lcore_id,RTE_POWER_DISABLE_TURBO ); }struct rte_power_core_capabilities ;
lib/librte_power/rte_power.h +1 -0
@@ -14,6 +14,7 @@#include <rte_byteorder.h> #include <rte_log.h> #include <rte_string_fns.h> +#include <rte_power_guest_channel.h> #ifdef __cplusplusextern "C" {
lib/librte_power/rte_power_guest_channel.h new file +160 -0
160 lines not on this page · raw message
Signature · 1 line
2.17.1
cover power: fix make build for power apps
The power example applications that uses the virtio-serial method of communication cannot currently be built with make, and can only be built using meson/ninja.
The guest channel message definitions and functions in guest_channel.h are needed by applications and need to be made public.
This worked pre-20.11, but now with all the meson/ninja changes, making these apps externally no longer works. To fix, we need to move the header file with the API definitions for the channel commands public, and rename the functions accordingly.
The main change is to rename channel_commands.h to rte_power_guest_channel.h so that it gets picked up by the installer and copied to /usr/local/include. Other changes include renaming #defines to have RTE_ at the beginning instead of CPU_. Finally we refactor the code to work with those changes.
---
v2 changes
- re-worked from monolithic patch to a 6 patch patchset for easier review
[PATCH v2 1/6] power: create guest channel public header file [PATCH v2 2/6] power: make channel msg functions public [PATCH v2 3/6] power: rename public structs
[PATCH v2 4/6] power: rename defines
[PATCH v2 5/6] power: add new header file to export list [PATCH v2 6/6] power: clean up includes
PATCH v2 1/6 power: create guest channel public header file
From: Bruce Richardson <[email protected]>
In preparation for making the header file public, we first rename channel_commands.h as rte_power_guest_channel.h.
---
examples/vm_power_manager/channel_manager.c | 2 +-
examples/vm_power_manager/channel_monitor.c | 2 +-
examples/vm_power_manager/channel_monitor.h | 2 +-
examples/vm_power_manager/guest_cli/vm_power_cli_guest.h | 2 +-
examples/vm_power_manager/vm_power_cli.c | 2 +-
lib/librte_power/guest_channel.c | 2 +-
lib/librte_power/guest_channel.h | 2 +-
lib/librte_power/power_kvm_vm.c | 2 +-
.../{channel_commands.h => rte_power_guest_channel.h} | 9 ++++-----
9 files changed, 12 insertions(+), 13 deletions(-)
rename lib/librte_power/{channel_commands.h => rte_power_guest_channel.h} (94%)examples/vm_power_manager/channel_manager.c +1 -1
@@ -27,7 +27,7 @@#include <libvirt/libvirt.h> #include "channel_manager.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" #include "channel_monitor.h" #include "power_manager.h"
examples/vm_power_manager/channel_monitor.c +1 -1
@@ -35,7 +35,7 @@#include <libvirt/libvirt.h> #include "channel_monitor.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" #include "channel_manager.h" #include "power_manager.h" #include "oob_monitor.h"
examples/vm_power_manager/channel_monitor.h +1 -1
@@ -6,7 +6,7 @@#define CHANNEL_MONITOR_H_ #include "channel_manager.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" struct core_share {unsigned int pcpu;
examples/vm_power_manager/guest_cli/vm_power_cli_guest.h +1 -1
@@ -9,7 +9,7 @@extern "C" {#endif -#include "channel_commands.h" +#include "rte_power_guest_channel.h" struct channel_packet *get_policy (void );
examples/vm_power_manager/vm_power_cli.c +1 -1
@@ -21,7 +21,7 @@#include "channel_manager.h" #include "channel_monitor.h" #include "power_manager.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" struct cmd_quit_result {cmdline_fixed_string_t quit;
lib/librte_power/guest_channel.c +1 -1
@@ -17,7 +17,7 @@#include <rte_log.h> #include "guest_channel.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" #define RTE_LOGTYPE_GUEST_CHANNEL RTE_LOGTYPE_USER1
lib/librte_power/guest_channel.h +1 -1
@@ -8,7 +8,7 @@extern "C" {#endif -#include <channel_commands.h> +#include <rte_power_guest_channel.h> /** * Check if any Virtio-Serial VM end-points exist in path.
lib/librte_power/power_kvm_vm.c +1 -1
@@ -7,7 +7,7 @@#include <rte_log.h> #include "guest_channel.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" #include "power_kvm_vm.h" #include "power_common.h"
lib/librte_power/rte_power_guest_channel.h renamed from lib/librte_power/channel_commands.h +4 -5
@@ -1,9 +1,8 @@/* SPDX-License-Identifier: BSD-3-Clause -* Copyright(c) 2010-2014 Intel Corporation +* Copyright(c) 2010-2021 Intel Corporation */ - -#ifndef CHANNEL_COMMANDS_H_ -#define CHANNEL_COMMANDS_H_ +#ifndef RTE_POWER_GUEST_CHANNEL_H +#define RTE_POWER_GUEST_CHANNEL_H #ifdef __cplusplus extern "C" {
@@ -122,4 +121,4 @@ struct channel_packet_caps_list { }#endif -#endif /* CHANNEL_COMMANDS_H_ */ +#endif /* RTE_POWER_GUEST_CHANNEL_H_ */
Signature · 1 line
2.17.1
v3 cover power: fix make build for power apps
The guest channel message definitions and functions in guest_channel.h are needed by applications and need to be made public.
This worked pre-20.11, but now with all the meson/ninja changes, making these apps externally no longer works. To fix, we need to move the header file with the API definitions for the channel commands public, and rename the functions accordingly.
The main change is to rename channel_commands.h to rte_power_guest_channel.h so that it gets picked up by the installer and copied to /usr/local/include. Other changes include renaming #defines to have RTE_ at the beginning instead of CPU_. Finally we refactor the code to work with those changes.
---
v2 changes
- re-worked from monolithic patch to a 6 patch patchset for easier review
v3 changes
- Ensure both functions added to the API are tagged as experimental
PATCH v3 1/6 power: create guest channel public header file
From: Bruce Richardson <[email protected]>
In preparation for making the header file public, we first rename channel_commands.h as rte_power_guest_channel.h.
---
examples/vm_power_manager/channel_manager.c | 2 +-
examples/vm_power_manager/channel_monitor.c | 2 +-
examples/vm_power_manager/channel_monitor.h | 2 +-
examples/vm_power_manager/guest_cli/vm_power_cli_guest.h | 2 +-
examples/vm_power_manager/vm_power_cli.c | 2 +-
lib/librte_power/guest_channel.c | 2 +-
lib/librte_power/guest_channel.h | 2 +-
lib/librte_power/power_kvm_vm.c | 2 +-
.../{channel_commands.h => rte_power_guest_channel.h} | 9 ++++-----
9 files changed, 12 insertions(+), 13 deletions(-)
rename lib/librte_power/{channel_commands.h => rte_power_guest_channel.h} (94%)examples/vm_power_manager/channel_manager.c +1 -1
@@ -27,7 +27,7 @@#include <libvirt/libvirt.h> #include "channel_manager.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" #include "channel_monitor.h" #include "power_manager.h"
examples/vm_power_manager/channel_monitor.c +1 -1
@@ -35,7 +35,7 @@#include <libvirt/libvirt.h> #include "channel_monitor.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" #include "channel_manager.h" #include "power_manager.h" #include "oob_monitor.h"
examples/vm_power_manager/channel_monitor.h +1 -1
@@ -6,7 +6,7 @@#define CHANNEL_MONITOR_H_ #include "channel_manager.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" struct core_share {unsigned int pcpu;
examples/vm_power_manager/guest_cli/vm_power_cli_guest.h +1 -1
@@ -9,7 +9,7 @@extern "C" {#endif -#include "channel_commands.h" +#include "rte_power_guest_channel.h" struct channel_packet *get_policy (void );
examples/vm_power_manager/vm_power_cli.c +1 -1
@@ -21,7 +21,7 @@#include "channel_manager.h" #include "channel_monitor.h" #include "power_manager.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" struct cmd_quit_result {cmdline_fixed_string_t quit;
lib/librte_power/guest_channel.c +1 -1
@@ -17,7 +17,7 @@#include <rte_log.h> #include "guest_channel.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" #define RTE_LOGTYPE_GUEST_CHANNEL RTE_LOGTYPE_USER1
lib/librte_power/guest_channel.h +1 -1
@@ -8,7 +8,7 @@extern "C" {#endif -#include <channel_commands.h> +#include <rte_power_guest_channel.h> /** * Check if any Virtio-Serial VM end-points exist in path.
lib/librte_power/power_kvm_vm.c +1 -1
@@ -7,7 +7,7 @@#include <rte_log.h> #include "guest_channel.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" #include "power_kvm_vm.h" #include "power_common.h"
lib/librte_power/rte_power_guest_channel.h renamed from lib/librte_power/channel_commands.h +4 -5
@@ -1,9 +1,8 @@/* SPDX-License-Identifier: BSD-3-Clause -* Copyright(c) 2010-2014 Intel Corporation +* Copyright(c) 2010-2021 Intel Corporation */ - -#ifndef CHANNEL_COMMANDS_H_ -#define CHANNEL_COMMANDS_H_ +#ifndef RTE_POWER_GUEST_CHANNEL_H +#define RTE_POWER_GUEST_CHANNEL_H #ifdef __cplusplus extern "C" {
@@ -122,4 +121,4 @@ struct channel_packet_caps_list { }#endif -#endif /* CHANNEL_COMMANDS_H_ */ +#endif /* RTE_POWER_GUEST_CHANNEL_H_ */
Signature · 1 line
2.17.1
Re: [dpdk-dev] [PATCH v3 1/6] power: create guest channel public header file
Quoted 5 lines · David Hunt
From: Bruce Richardson <[email protected]>
In preparation for making the header file public, we first rename
channel_commands.hasrte_power_guest_channel.h.
Quoted 7 lines
Fixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>---
You should also add the new API's to the map file.
Signature · 2 lines
Thanks, Anatoly
Re: [dpdk-dev] [PATCH v3 1/6] power: create guest channel public header file
Quoted 10 lines · Anatoly
Quoted 9 lines · David Hunt
From: Bruce Richardson <[email protected]>
In preparation for making the header file public, we first rename
channel_commands.hasrte_power_guest_channel.h.Fixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")
Quoted 6 lines
Quoted 3 lines
Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>---
You should also add the new API's to the map file.
Yes, spotted this earlier. Will be in the next respin. Thanks.
v4 cover power: fix make build for power apps
In reply to David HuntThe guest channel message definitions and functions in guest_channel.h are needed by applications and need to be made public.
This worked pre-20.11, but now with all the meson/ninja changes, making these apps externally no longer works. To fix, we need to move the header file with the API definitions for the channel commands public, and rename the functions accordingly.
The main change is to rename channel_commands.h to rte_power_guest_channel.h so that it gets picked up by the installer and copied to /usr/local/include. Other changes include renaming #defines to have RTE_ at the beginning instead of CPU_. Finally we refactor the code to work with those changes.
---
v2 changes
- re-worked from monolithic patch to a 6 patch patchset for easier review
v3 changes
- Ensure both functions added to the API are tagged as experimental
v4 changes
- add @internal tag on 2 functions for Doxygen
- add @warning EXPERIMENTAL tag on 2 functions for Doxygen
- improve description of lcore param in API docs
- Improve maintainability sizeof's
- add the 2 added functions to the version.map file
[PATCH v4 1/6] power: create guest channel public header file [PATCH v4 2/6] power: make channel msg functions public [PATCH v4 3/6] power: rename public structs
[PATCH v4 4/6] power: rename defines
[PATCH v4 5/6] power: add new header file to export list [PATCH v4 6/6] power: clean up includes
PATCH v4 1/6 power: create guest channel public header file
From: Bruce Richardson <[email protected]>
In preparation for making the header file public, we first rename channel_commands.h as rte_power_guest_channel.h.
---
examples/vm_power_manager/channel_manager.c | 2 +-
examples/vm_power_manager/channel_monitor.c | 2 +-
examples/vm_power_manager/channel_monitor.h | 2 +-
examples/vm_power_manager/guest_cli/vm_power_cli_guest.h | 2 +-
examples/vm_power_manager/vm_power_cli.c | 2 +-
lib/librte_power/guest_channel.c | 2 +-
lib/librte_power/guest_channel.h | 2 +-
lib/librte_power/power_kvm_vm.c | 2 +-
.../{channel_commands.h => rte_power_guest_channel.h} | 9 ++++-----
9 files changed, 12 insertions(+), 13 deletions(-)
rename lib/librte_power/{channel_commands.h => rte_power_guest_channel.h} (94%)examples/vm_power_manager/channel_manager.c +1 -1
@@ -27,7 +27,7 @@#include <libvirt/libvirt.h> #include "channel_manager.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" #include "channel_monitor.h" #include "power_manager.h"
examples/vm_power_manager/channel_monitor.c +1 -1
@@ -35,7 +35,7 @@#include <libvirt/libvirt.h> #include "channel_monitor.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" #include "channel_manager.h" #include "power_manager.h" #include "oob_monitor.h"
examples/vm_power_manager/channel_monitor.h +1 -1
@@ -6,7 +6,7 @@#define CHANNEL_MONITOR_H_ #include "channel_manager.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" struct core_share {unsigned int pcpu;
examples/vm_power_manager/guest_cli/vm_power_cli_guest.h +1 -1
@@ -9,7 +9,7 @@extern "C" {#endif -#include "channel_commands.h" +#include "rte_power_guest_channel.h" struct channel_packet *get_policy (void );
examples/vm_power_manager/vm_power_cli.c +1 -1
@@ -21,7 +21,7 @@#include "channel_manager.h" #include "channel_monitor.h" #include "power_manager.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" struct cmd_quit_result {cmdline_fixed_string_t quit;
lib/librte_power/guest_channel.c +1 -1
@@ -17,7 +17,7 @@#include <rte_log.h> #include "guest_channel.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" #define RTE_LOGTYPE_GUEST_CHANNEL RTE_LOGTYPE_USER1
lib/librte_power/guest_channel.h +1 -1
@@ -8,7 +8,7 @@extern "C" {#endif -#include <channel_commands.h> +#include <rte_power_guest_channel.h> /** * Check if any Virtio-Serial VM end-points exist in path.
lib/librte_power/power_kvm_vm.c +1 -1
@@ -7,7 +7,7 @@#include <rte_log.h> #include "guest_channel.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" #include "power_kvm_vm.h" #include "power_common.h"
lib/librte_power/rte_power_guest_channel.h renamed from lib/librte_power/channel_commands.h +4 -5
@@ -1,9 +1,8 @@/* SPDX-License-Identifier: BSD-3-Clause -* Copyright(c) 2010-2014 Intel Corporation +* Copyright(c) 2010-2021 Intel Corporation */ - -#ifndef CHANNEL_COMMANDS_H_ -#define CHANNEL_COMMANDS_H_ +#ifndef RTE_POWER_GUEST_CHANNEL_H +#define RTE_POWER_GUEST_CHANNEL_H #ifdef __cplusplus extern "C" {
@@ -122,4 +121,4 @@ struct channel_packet_caps_list { }#endif -#endif /* CHANNEL_COMMANDS_H_ */ +#endif /* RTE_POWER_GUEST_CHANNEL_H_ */
Signature · 1 line
2.17.1
v5 cover power: fix make build for power apps
The guest channel message definitions and functions in guest_channel.h are needed by applications and need to be made public.
This worked pre-20.11, but now with all the meson/ninja changes, making these apps externally no longer works. To fix, we need to move the header file with the API definitions for the channel commands public, and rename the functions accordingly.
The main change is to rename channel_commands.h to rte_power_guest_channel.h so that it gets picked up by the installer and copied to /usr/local/include. Other changes include renaming #defines to have RTE_ at the beginning instead of CPU_. Finally we refactor the code to work with those changes.
---
v2 changes
- re-worked from monolithic patch to a 6 patch patchset for easier review
v3 changes
- Ensure both functions added to the API are tagged as experimental
v4 changes
- add @internal tag on 2 functions for Doxygen
- add @warning EXPERIMENTAL tag on 2 functions for Doxygen
- improve description of lcore param in API docs
- Improve maintainability sizeof's
- add the 2 added functions to the version.map file
v5 changes
- moved version.map additions from patch 3 to patch 2
[v5 1/6] power: create guest channel public header file [v5 2/6] power: make channel msg functions public [v5 3/6] power: rename public structs
[v5 4/6] power: rename defines
[v5 5/6] power: add new header file to export list [v5 6/6] power: clean up includes
PATCH v5 1/6 power: create guest channel public header file
From: Bruce Richardson <[email protected]>
In preparation for making the header file public, we first rename channel_commands.h as rte_power_guest_channel.h.
---
examples/vm_power_manager/channel_manager.c | 2 +-
examples/vm_power_manager/channel_monitor.c | 2 +-
examples/vm_power_manager/channel_monitor.h | 2 +-
examples/vm_power_manager/guest_cli/vm_power_cli_guest.h | 2 +-
examples/vm_power_manager/vm_power_cli.c | 2 +-
lib/librte_power/guest_channel.c | 2 +-
lib/librte_power/guest_channel.h | 2 +-
lib/librte_power/power_kvm_vm.c | 2 +-
.../{channel_commands.h => rte_power_guest_channel.h} | 9 ++++-----
9 files changed, 12 insertions(+), 13 deletions(-)
rename lib/librte_power/{channel_commands.h => rte_power_guest_channel.h} (94%)examples/vm_power_manager/channel_manager.c +1 -1
@@ -27,7 +27,7 @@#include <libvirt/libvirt.h> #include "channel_manager.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" #include "channel_monitor.h" #include "power_manager.h"
examples/vm_power_manager/channel_monitor.c +1 -1
@@ -35,7 +35,7 @@#include <libvirt/libvirt.h> #include "channel_monitor.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" #include "channel_manager.h" #include "power_manager.h" #include "oob_monitor.h"
examples/vm_power_manager/channel_monitor.h +1 -1
@@ -6,7 +6,7 @@#define CHANNEL_MONITOR_H_ #include "channel_manager.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" struct core_share {unsigned int pcpu;
examples/vm_power_manager/guest_cli/vm_power_cli_guest.h +1 -1
@@ -9,7 +9,7 @@extern "C" {#endif -#include "channel_commands.h" +#include "rte_power_guest_channel.h" struct channel_packet *get_policy (void );
examples/vm_power_manager/vm_power_cli.c +1 -1
@@ -21,7 +21,7 @@#include "channel_manager.h" #include "channel_monitor.h" #include "power_manager.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" struct cmd_quit_result {cmdline_fixed_string_t quit;
lib/librte_power/guest_channel.c +1 -1
@@ -17,7 +17,7 @@#include <rte_log.h> #include "guest_channel.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" #define RTE_LOGTYPE_GUEST_CHANNEL RTE_LOGTYPE_USER1
lib/librte_power/guest_channel.h +1 -1
@@ -8,7 +8,7 @@extern "C" {#endif -#include <channel_commands.h> +#include <rte_power_guest_channel.h> /** * Check if any Virtio-Serial VM end-points exist in path.
lib/librte_power/power_kvm_vm.c +1 -1
@@ -7,7 +7,7 @@#include <rte_log.h> #include "guest_channel.h" -#include "channel_commands.h" +#include "rte_power_guest_channel.h" #include "power_kvm_vm.h" #include "power_common.h"
lib/librte_power/rte_power_guest_channel.h renamed from lib/librte_power/channel_commands.h +4 -5
@@ -1,9 +1,8 @@/* SPDX-License-Identifier: BSD-3-Clause -* Copyright(c) 2010-2014 Intel Corporation +* Copyright(c) 2010-2021 Intel Corporation */ - -#ifndef CHANNEL_COMMANDS_H_ -#define CHANNEL_COMMANDS_H_ +#ifndef RTE_POWER_GUEST_CHANNEL_H +#define RTE_POWER_GUEST_CHANNEL_H #ifdef __cplusplus extern "C" {
@@ -122,4 +121,4 @@ struct channel_packet_caps_list { }#endif -#endif /* CHANNEL_COMMANDS_H_ */ +#endif /* RTE_POWER_GUEST_CHANNEL_H_ */
Signature · 1 line
2.17.1
PATCH v5 2/6 power: make channel msg functions public
In reply to David HuntFrom: Bruce Richardson <[email protected]>
Move the 2 public functions into rte_power_guest_channel.h
---
changes in v3
* Mark both added functions as experimental changes in v4
* add @internal tag for Doxygen
* add @warning EXPERIMENTAL tag for Doxygen
* improve description of lcore param
changes in v5
* moved version.map additions from patch 3 to patch 2
--- lib/librte_power/guest_channel.h | 40 +---------------- lib/librte_power/rte_power_guest_channel.h | 50 ++++++++++++++++++++++ lib/librte_power/version.map | 4 ++ 3 files changed, 55 insertions(+), 39 deletions(-)
lib/librte_power/guest_channel.h +1 -39
@@ -65,21 +65,7 @@ void guest_channel_host_disconnect(unsigned int lcore_id);*/ int guest_channel_send_msg (struct channel_packet *pkt,unsigned int lcore_id); -/** -* Send a message contained in pkt over the Virtio-Serial to the host endpoint. -* -* @param pkt -* Pointer to a populated struct channel_packet -* -* @param lcore_id -* lcore_id. -* -* @return -* - 0 on success. -* - Negative on error. -*/ -int rte_power_guest_channel_send_msg (struct channel_packet *pkt, -unsigned int lcore_id); +/** * Read a message contained in pkt over the Virtio-Serial
@@ -103,30 +89,6 @@ int power_guest_channel_read_msg(void *pkt,size_t pkt_len, unsigned int lcore_id); -/** -* Receive a message contained in pkt over the Virtio-Serial -* from the host endpoint. -* -* @param pkt -* Pointer to channel_packet or -* channel_packet_freq_list struct. -* -* @param pkt_len -* Size of expected data packet. -* -* @param lcore_id -* lcore_id. -* -* @return -* - 0 on success. -* - Negative on error. -*/ -__rte_experimental -int -rte_power_guest_channel_receive_msg (void *pkt, -size_t pkt_len, -unsigned int lcore_id); - #ifdef __cplusplus }
lib/librte_power/rte_power_guest_channel.h +50 -0
56 lines not on this page · raw message
lib/librte_power/version.map +4 -0
@@ -34,4 +34,8 @@ EXPERIMENTAL { rte_power_guest_channel_receive_msg; rte_power_poll_stat_fetch; rte_power_poll_stat_update; + + # added in 21.02 + rte_power_guest_channel_receive_msg; + rte_power_guest_channel_send_msg; };
Signature · 1 line
2.17.1
PATCH v5 3/6 power: rename public structs
In reply to David HuntFrom: Bruce Richardson <[email protected]>
rename the public structs to have an rte_power_ prefix and add them to version.map in experimental section.
---
changes in v4
* Improve sizeof's
* add the 2 functions to the version.map file changes in v5
* Moved version.map additions from patch 3 to patch 2
--- examples/vm_power_manager/channel_monitor.c | 33 ++++++------ examples/vm_power_manager/channel_monitor.h | 2 +- examples/vm_power_manager/guest_cli/main.c | 2 +- .../guest_cli/vm_power_cli_guest.c | 38 +++++++------- .../guest_cli/vm_power_cli_guest.h | 4 +- lib/librte_power/guest_channel.c | 7 +-- lib/librte_power/guest_channel.h | 7 +-- lib/librte_power/power_kvm_vm.c | 2 +- lib/librte_power/rte_power_guest_channel.h | 51 +++++++++---------- 9 files changed, 73 insertions(+), 73 deletions(-)
examples/vm_power_manager/channel_monitor.c +17 -16
@@ -108,7 +108,7 @@ str_to_ether_addr(const char *a, struct rte_ether_addr *ether_addr) }static int -set_policy_mac (struct channel_packet *pkt,int idx,char *mac) +set_policy_mac (struct rte_power_channel_packet *pkt,int idx,char *mac) {union PFID pfid;int ret;
@@ -165,7 +165,7 @@ get_resource_id_from_vmname(const char *vm_name) }static int -parse_json_to_pkt (json_t *element,struct channel_packet *pkt, +parse_json_to_pkt (json_t *element,struct rte_power_channel_packet *pkt,const char *vm_name) {const char *key;
@@ -173,7 +173,7 @@ parse_json_to_pkt(json_t *element, struct channel_packet *pkt,int ret;int resource_id; -memset (pkt,0 ,sizeof (struct channel_packet )); +memset (pkt,0 ,sizeof (*pkt)); pkt->nb_mac_to_monitor =0 ; pkt->t_boost_status.tbEnabled = false;
@@ -463,7 +463,7 @@ get_pfid(struct policy *pol) }static int -update_policy (struct channel_packet *pkt) +update_policy (struct rte_power_channel_packet *pkt) {unsigned int updated =0 ;
@@ -512,7 +512,7 @@ update_policy(struct channel_packet *pkt) }static int -remove_policy(struct channel_packet *pkt __rte_unused) +remove_policy(struct rte_power_channel_packet *pkt __rte_unused) {unsigned int i;
@@ -673,7 +673,7 @@ static void apply_policy(struct policy *pol) { -struct channel_packet *pkt = &pol->pkt; +struct rte_power_channel_packet *pkt = &pol->pkt;/*Check policy to use*/ if (pkt->policy_to_use ==TRAFFIC )
@@ -715,12 +715,12 @@ write_binary_packet(void *buffer, }static int -send_freq (struct channel_packet *pkt, +send_freq (struct rte_power_channel_packet *pkt,struct channel_info *chan_info,bool freq_list) {unsigned int vcore_id = pkt->resource_id; -struct channel_packet_freq_list channel_pkt_freq_list; +struct rte_power_channel_packet_freq_list channel_pkt_freq_list;struct vm_info info;if (get_info_vm (pkt->vm_name, &info) !=0 )
@@ -751,12 +751,12 @@ send_freq(struct channel_packet *pkt, }static int -send_capabilities (struct channel_packet *pkt, +send_capabilities (struct rte_power_channel_packet *pkt,struct channel_info *chan_info,bool list_requested) {unsigned int vcore_id = pkt->resource_id; -struct channel_packet_caps_list channel_pkt_caps_list; +struct rte_power_channel_packet_caps_list channel_pkt_caps_list;struct vm_info info;struct rte_power_core_capabilities caps;int ret;
@@ -805,18 +805,19 @@ send_capabilities(struct channel_packet *pkt, }static int -send_ack_for_received_cmd (struct channel_packet *pkt, +send_ack_for_received_cmd (struct rte_power_channel_packet *pkt,struct channel_info *chan_info,uint32_t command) { pkt->command = command;return write_binary_packet (pkt, -sizeof (struct channel_packet ), +sizeof (*pkt), chan_info); }static int -process_request (struct channel_packet *pkt,struct channel_info *chan_info) +process_request (struct rte_power_channel_packet *pkt, +struct channel_info *chan_info) {int ret;
@@ -988,7 +989,7 @@ channel_monitor_init(void)static void read_binary_packet (struct channel_info *chan_info) { -struct channel_packet pkt; +struct rte_power_channel_packet pkt;void *buffer = &pkt;int buffer_len =sizeof (pkt);int n_bytes, err =0 ;
@@ -1019,7 +1020,7 @@ read_binary_packet(struct channel_info *chan_info)static void read_json_packet (struct channel_info *chan_info) { -struct channel_packet pkt; +struct rte_power_channel_packet pkt;int n_bytes, ret;json_t *root;json_error_t error;
@@ -1063,7 +1064,7 @@ read_json_packet(struct channel_info *chan_info)/* * Because our data is now in the json * object, we can overwrite the pkt -* with a channel_packet struct, using +* with a rte_power_channel_packet struct, using * parse_json_to_pkt() */ ret =parse_json_to_pkt (root, &pkt, resource_name);
examples/vm_power_manager/channel_monitor.h +1 -1
@@ -18,7 +18,7 @@ struct core_share { };struct policy { -struct channel_packet pkt; +struct rte_power_channel_packet pkt;uint32_t pfid[MAX_VFS ];uint32_t port[MAX_VFS ];unsigned int enabled;
examples/vm_power_manager/guest_cli/main.c +1 -1
@@ -48,7 +48,7 @@ parse_args(int argc, char **argv) { "policy", required_argument, 0, 'o'}, {NULL, 0, 0, 0} }; -struct channel_packet *policy; +struct rte_power_channel_packet *policy;unsigned short int hours[MAX_HOURS ];unsigned short int cores[MAX_VCPU_PER_VM ];unsigned short int ports[MAX_VCPU_PER_VM ];
examples/vm_power_manager/guest_cli/vm_power_cli_guest.c +19 -19
@@ -38,9 +38,9 @@ union PFID {uint64_t pfid; }; -static struct channel_packet policy; +static struct rte_power_channel_packet policy; -struct channel_packet * +struct rte_power_channel_packet *get_policy (void ) {return &policy;
@@ -49,7 +49,7 @@ get_policy(void)int set_policy_mac (int port,int idx) { -struct channel_packet *policy; +struct rte_power_channel_packet *policy;union PFID pfid;int ret;
@@ -73,7 +73,7 @@ set_policy_mac(int port, int idx) }int -set_policy_defaults (struct channel_packet *pkt) +set_policy_defaults (struct rte_power_channel_packet *pkt) {int ret;
@@ -145,7 +145,7 @@ struct cmd_freq_list_result { };static int -query_data (struct channel_packet *pkt,unsigned int lcore_id) +query_data (struct rte_power_channel_packet *pkt,unsigned int lcore_id) {int ret; ret =rte_power_guest_channel_send_msg (pkt, lcore_id);
@@ -157,13 +157,13 @@ query_data(struct channel_packet *pkt, unsigned int lcore_id) }static int -receive_freq_list (struct channel_packet_freq_list *pkt_freq_list, +receive_freq_list (struct rte_power_channel_packet_freq_list *pkt_freq_list,unsigned int lcore_id) {int ret; ret =rte_power_guest_channel_receive_msg (pkt_freq_list, -sizeof (struct channel_packet_freq_list ), +sizeof (*pkt_freq_list), lcore_id);if (ret <0 ) {RTE_LOG (ERR ,GUEST_CLI ,"Error receiving message.\n" );
@@ -183,14 +183,14 @@ cmd_query_freq_list_parsed(void *parsed_result, {struct cmd_freq_list_result *res = parsed_result;unsigned int lcore_id; -struct channel_packet_freq_list pkt_freq_list; -struct channel_packet pkt; +struct rte_power_channel_packet_freq_list pkt_freq_list; +struct rte_power_channel_packet pkt;bool query_list = false;int ret;char *ep; -memset (&pkt,0 ,sizeof (struct channel_packet )); -memset (&pkt_freq_list,0 ,sizeof (struct channel_packet_freq_list )); +memset (&pkt,0 ,sizeof (pkt)); +memset (&pkt_freq_list,0 ,sizeof (pkt_freq_list));if (!strcmp (res->cpu_num,"all" )) {
@@ -267,13 +267,13 @@ struct cmd_query_caps_result { };static int -receive_capabilities (struct channel_packet_caps_list *pkt_caps_list, +receive_capabilities (struct rte_power_channel_packet_caps_list *pkt_caps_list,unsigned int lcore_id) {int ret; ret =rte_power_guest_channel_receive_msg (pkt_caps_list, -sizeof (struct channel_packet_caps_list ), +sizeof (*pkt_caps_list), lcore_id);if (ret <0 ) {RTE_LOG (ERR ,GUEST_CLI ,"Error receiving message.\n" );
@@ -293,14 +293,14 @@ cmd_query_caps_list_parsed(void *parsed_result, {struct cmd_query_caps_result *res = parsed_result;unsigned int lcore_id; -struct channel_packet_caps_list pkt_caps_list; -struct channel_packet pkt; +struct rte_power_channel_packet_caps_list pkt_caps_list; +struct rte_power_channel_packet pkt;bool query_list = false;int ret;char *ep; -memset (&pkt,0 ,sizeof (struct channel_packet )); -memset (&pkt_caps_list,0 ,sizeof (struct channel_packet_caps_list )); +memset (&pkt,0 ,sizeof (pkt)); +memset (&pkt_caps_list,0 ,sizeof (pkt_caps_list));if (!strcmp (res->cpu_num,"all" )) {
@@ -380,7 +380,7 @@ cmdline_parse_inst_t cmd_query_caps_list = {static int check_response_cmd (unsigned int lcore_id,int *result) { -struct channel_packet pkt; +struct rte_power_channel_packet pkt;int ret; ret =rte_power_guest_channel_receive_msg (&pkt,sizeof pkt, lcore_id);
@@ -473,7 +473,7 @@ struct cmd_send_policy_result { };static inline int -send_policy (struct channel_packet *pkt,struct cmdline *cl) +send_policy (struct rte_power_channel_packet *pkt,struct cmdline *cl) {int ret;
examples/vm_power_manager/guest_cli/vm_power_cli_guest.h +2 -2
@@ -11,11 +11,11 @@ extern "C" {#include "rte_power_guest_channel.h" -struct channel_packet *get_policy (void ); +struct rte_power_channel_packet *get_policy (void );int set_policy_mac (int port,int idx); -int set_policy_defaults (struct channel_packet *pkt); +int set_policy_defaults (struct rte_power_channel_packet *pkt); void run_cli(__rte_unused void *arg);
lib/librte_power/guest_channel.c +4 -3
@@ -55,7 +55,7 @@ int guest_channel_host_connect(const char *path, unsigned int lcore_id) { int flags, ret; -struct channel_packet pkt; +struct rte_power_channel_packet pkt;char fd_path[PATH_MAX ];int fd =-1 ;
@@ -119,7 +119,8 @@ guest_channel_host_connect(const char *path, unsigned int lcore_id) }int -guest_channel_send_msg (struct channel_packet *pkt,unsigned int lcore_id) +guest_channel_send_msg (struct rte_power_channel_packet *pkt, +unsigned int lcore_id) {int ret, buffer_len =sizeof (*pkt);void *buffer = pkt;
@@ -149,7 +150,7 @@ guest_channel_send_msg(struct channel_packet *pkt, unsigned int lcore_id)return 0 ; } -int rte_power_guest_channel_send_msg (struct channel_packet *pkt, +int rte_power_guest_channel_send_msg (struct rte_power_channel_packet *pkt,unsigned int lcore_id) {return guest_channel_send_msg (pkt, lcore_id);
lib/librte_power/guest_channel.h +4 -3
@@ -63,7 +63,8 @@ void guest_channel_host_disconnect(unsigned int lcore_id);* - Negative on channel not connected. * - errno on write to channel error. */ -int guest_channel_send_msg (struct channel_packet *pkt,unsigned int lcore_id); +int guest_channel_send_msg (struct rte_power_channel_packet *pkt, +unsigned int lcore_id);
@@ -72,8 +73,8 @@ int guest_channel_send_msg(struct channel_packet *pkt, unsigned int lcore_id);* from the host endpoint. * * @param pkt -* Pointer to channel_packet or -* channel_packet_freq_list struct. +* Pointer to rte_power_channel_packet or +* rte_power_channel_packet_freq_list struct. * * @param pkt_len * Size of expected data packet.
lib/librte_power/power_kvm_vm.c +1 -1
@@ -13,7 +13,7 @@#define FD_PATH "/dev/virtio-ports/virtio.serial.port.poweragent" -static struct channel_packet pkt[RTE_MAX_LCORE ]; +static struct rte_power_channel_packet pkt[RTE_MAX_LCORE ];int power_kvm_vm_check_supported (void )
lib/librte_power/rte_power_guest_channel.h +24 -27
109 lines not on this page · raw message
Signature · 1 line
2.17.1
PATCH v5 4/6 power: rename defines
In reply to David HuntFrom: Bruce Richardson <[email protected]>
Rename the #defines to have an RTE_POWER_ prefix
--- examples/vm_power_manager/channel_monitor.c | 116 +++++++++--------- examples/vm_power_manager/channel_monitor.h | 6 +- examples/vm_power_manager/guest_cli/main.c | 29 +++-- .../guest_cli/vm_power_cli_guest.c | 28 ++--- examples/vm_power_manager/main.c | 2 +- lib/librte_power/guest_channel.c | 2 +- lib/librte_power/power_kvm_vm.c | 14 +-- lib/librte_power/rte_power_guest_channel.h | 98 +++++++-------- 8 files changed, 155 insertions(+), 140 deletions(-)
examples/vm_power_manager/channel_monitor.c +61 -55
@@ -177,10 +177,10 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt, pkt->nb_mac_to_monitor =0 ; pkt->t_boost_status.tbEnabled = false; - pkt->workload =LOW ; - pkt->policy_to_use =TIME ; - pkt->command =PKT_POLICY ; - pkt->core_type =CORE_TYPE_PHYSICAL ; + pkt->workload =RTE_POWER_WL_LOW ; + pkt->policy_to_use =RTE_POWER_POLICY_TIME ; + pkt->command =RTE_POWER_PKT_POLICY ; + pkt->core_type =RTE_POWER_CORE_TYPE_PHYSICAL ;if (vm_name ==NULL ) { RTE_LOG(ERR, CHANNEL_MONITOR,
@@ -203,11 +203,11 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt,char command[32 ];strlcpy (command,json_string_value (value),32 );if (!strcmp (command,"power" )) { - pkt->command =CPU_POWER ; + pkt->command =RTE_POWER_CPU_POWER ; }else if (!strcmp (command,"create" )) { - pkt->command =PKT_POLICY ; + pkt->command =RTE_POWER_PKT_POLICY ; }else if (!strcmp (command,"destroy" )) { - pkt->command =PKT_POLICY_REMOVE ; + pkt->command =RTE_POWER_PKT_POLICY_REMOVE ; }else {RTE_LOG (ERR ,CHANNEL_MONITOR ,"Invalid command received in JSON\n" );
@@ -217,13 +217,17 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt,char command[32 ];strlcpy (command,json_string_value (value),32 );if (!strcmp (command,"TIME" )) { - pkt->policy_to_use =TIME ; + pkt->policy_to_use = +RTE_POWER_POLICY_TIME ; }else if (!strcmp (command,"TRAFFIC" )) { - pkt->policy_to_use =TRAFFIC ; + pkt->policy_to_use = +RTE_POWER_POLICY_TRAFFIC ; }else if (!strcmp (command,"WORKLOAD" )) { - pkt->policy_to_use =WORKLOAD ; + pkt->policy_to_use = +RTE_POWER_POLICY_WORKLOAD ; }else if (!strcmp (command,"BRANCH_RATIO" )) { - pkt->policy_to_use =BRANCH_RATIO ; + pkt->policy_to_use = +RTE_POWER_POLICY_BRANCH_RATIO ; }else {RTE_LOG (ERR ,CHANNEL_MONITOR ,"Wrong policy_type received in JSON\n" );
@@ -233,11 +237,11 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt,char command[32 ];strlcpy (command,json_string_value (value),32 );if (!strcmp (command,"HIGH" )) { - pkt->workload =HIGH ; + pkt->workload =RTE_POWER_WL_HIGH ; }else if (!strcmp (command,"MEDIUM" )) { - pkt->workload =MEDIUM ; + pkt->workload =RTE_POWER_WL_MEDIUM ; }else if (!strcmp (command,"LOW" )) { - pkt->workload =LOW ; + pkt->workload =RTE_POWER_WL_LOW ; }else {RTE_LOG (ERR ,CHANNEL_MONITOR ,"Wrong workload received in JSON\n" );
@@ -283,17 +287,17 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt,char unit[32 ];strlcpy (unit,json_string_value (value),32 );if (!strcmp (unit,"SCALE_UP" )) { - pkt->unit =CPU_POWER_SCALE_UP ; + pkt->unit =RTE_POWER_SCALE_UP ; }else if (!strcmp (unit,"SCALE_DOWN" )) { - pkt->unit =CPU_POWER_SCALE_DOWN ; + pkt->unit =RTE_POWER_SCALE_DOWN ; }else if (!strcmp (unit,"SCALE_MAX" )) { - pkt->unit =CPU_POWER_SCALE_MAX ; + pkt->unit =RTE_POWER_SCALE_MAX ; }else if (!strcmp (unit,"SCALE_MIN" )) { - pkt->unit =CPU_POWER_SCALE_MIN ; + pkt->unit =RTE_POWER_SCALE_MIN ; }else if (!strcmp (unit,"ENABLE_TURBO" )) { - pkt->unit =CPU_POWER_ENABLE_TURBO ; + pkt->unit =RTE_POWER_ENABLE_TURBO ; }else if (!strcmp (unit,"DISABLE_TURBO" )) { - pkt->unit =CPU_POWER_DISABLE_TURBO ; + pkt->unit =RTE_POWER_DISABLE_TURBO ; }else {RTE_LOG (ERR ,CHANNEL_MONITOR ,"Invalid command received in JSON\n" );
@@ -312,7 +316,7 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt, vm_name);return -1 ; } -strlcpy (pkt->vm_name, vm_name,VM_MAX_NAME_SZ ); +strlcpy (pkt->vm_name, vm_name,RTE_POWER_VM_MAX_NAME_SZ ); pkt->resource_id = resource_id; }return 0 ;
@@ -367,7 +371,7 @@ pcpu_monitor(struct policy *pol, struct core_info *ci, int pcpu, int count) {int ret =0 ; -if (pol->pkt.policy_to_use ==BRANCH_RATIO ) { +if (pol->pkt.policy_to_use ==RTE_POWER_POLICY_BRANCH_RATIO ) { ci->cd[pcpu].oob_enabled =1 ; ret =add_core_to_monitor (pcpu);if (ret ==0 )
@@ -407,7 +411,7 @@ get_pcpu_to_control(struct policy *pol)* differenciate between them when adding them to the branch monitor. * Virtual cores need to be converted to physical cores. */ -if (pol->pkt.core_type ==CORE_TYPE_VIRTUAL ) { +if (pol->pkt.core_type ==RTE_POWER_CORE_TYPE_VIRTUAL ) {/* * If the cores in the policy are virtual, we need to map them * to physical core. We look up the vm info and use that for
@@ -479,7 +483,8 @@ update_policy(struct rte_power_channel_packet *pkt) policies[i].pkt = *pkt;get_pcpu_to_control (&policies[i]);/* Check Eth dev only for Traffic policy */ -if (policies[i].pkt.policy_to_use ==TRAFFIC ) { +if (policies[i].pkt.policy_to_use == +RTE_POWER_POLICY_TRAFFIC ) {if (get_pfid (&policies[i]) <0 ) { updated =1 ;break ;
@@ -496,7 +501,8 @@ update_policy(struct rte_power_channel_packet *pkt) policies[i].pkt = *pkt;get_pcpu_to_control (&policies[i]);/* Check Eth dev only for Traffic policy */ -if (policies[i].pkt.policy_to_use ==TRAFFIC ) { +if (policies[i].pkt.policy_to_use == +RTE_POWER_POLICY_TRAFFIC ) {if (get_pfid (&policies[i]) <0 ) { updated =1 ;break ;
@@ -615,7 +621,7 @@ apply_time_profile(struct policy *pol)/* Format the date and time, down to a single second. */ strftime (time_string,sizeof (time_string),"%Y-%m-%d %H:%M:%S" , ptm); -for (x =0 ; x <HOURS ; x++) { +for (x =0 ; x <RTE_POWER_HOURS_PER_DAY ; x++) {if (ptm->tm_hour == pol->pkt.timer_policy.busy_hours[x]) {for (count =0 ; count < pol->pkt.num_vcpu; count++) {
@@ -648,19 +654,19 @@ apply_workload_profile(struct policy *pol)int count; -if (pol->pkt.workload ==HIGH ) { +if (pol->pkt.workload ==RTE_POWER_WL_HIGH ) {for (count =0 ; count < pol->pkt.num_vcpu; count++) {if (pol->core_share[count].status !=1 )power_manager_scale_core_max ( pol->core_share[count].pcpu); } - }else if (pol->pkt.workload ==MEDIUM ) { + }else if (pol->pkt.workload ==RTE_POWER_WL_MEDIUM ) {for (count =0 ; count < pol->pkt.num_vcpu; count++) {if (pol->core_share[count].status !=1 )power_manager_scale_core_med ( pol->core_share[count].pcpu); } - }else if (pol->pkt.workload ==LOW ) { + }else if (pol->pkt.workload ==RTE_POWER_WL_LOW ) {for (count =0 ; count < pol->pkt.num_vcpu; count++) {if (pol->core_share[count].status !=1 ) power_manager_scale_core_min(
@@ -676,11 +682,11 @@ apply_policy(struct policy *pol)struct rte_power_channel_packet *pkt = &pol->pkt;/*Check policy to use*/ -if (pkt->policy_to_use ==TRAFFIC ) +if (pkt->policy_to_use ==RTE_POWER_POLICY_TRAFFIC )apply_traffic_profile (pol); -else if (pkt->policy_to_use ==TIME ) +else if (pkt->policy_to_use ==RTE_POWER_POLICY_TIME )apply_time_profile (pol); -else if (pkt->policy_to_use ==WORKLOAD ) +else if (pkt->policy_to_use ==RTE_POWER_POLICY_WORKLOAD )apply_workload_profile (pol); }
@@ -726,13 +732,13 @@ send_freq(struct rte_power_channel_packet *pkt,if (get_info_vm (pkt->vm_name, &info) !=0 )return -1 ; -if (!freq_list && vcore_id >=MAX_VCPU_PER_VM ) +if (!freq_list && vcore_id >=RTE_POWER_MAX_VCPU_PER_VM )return -1 ;if (!info.allow_query)return -1 ; - channel_pkt_freq_list.command =CPU_POWER_FREQ_LIST ; + channel_pkt_freq_list.command =RTE_POWER_FREQ_LIST ; channel_pkt_freq_list.num_vcpu = info.num_vcpus;if (freq_list) {
@@ -764,13 +770,13 @@ send_capabilities(struct rte_power_channel_packet *pkt,if (get_info_vm (pkt->vm_name, &info) !=0 )return -1 ; -if (!list_requested && vcore_id >=MAX_VCPU_PER_VM ) +if (!list_requested && vcore_id >=RTE_POWER_MAX_VCPU_PER_VM )return -1 ;if (!info.allow_query)return -1 ; - channel_pkt_caps_list.command =CPU_POWER_CAPS_LIST ; + channel_pkt_caps_list.command =RTE_POWER_CAPS_LIST ; channel_pkt_caps_list.num_vcpu = info.num_vcpus;if (list_requested) {
@@ -828,10 +834,10 @@ process_request(struct rte_power_channel_packet *pkt, CHANNEL_MGR_CHANNEL_PROCESSING) == 0)return -1 ; -if (pkt->command ==CPU_POWER ) { +if (pkt->command ==RTE_POWER_CPU_POWER ) {unsigned int core_num; -if (pkt->core_type ==CORE_TYPE_VIRTUAL ) +if (pkt->core_type ==RTE_POWER_CORE_TYPE_VIRTUAL ) core_num =get_pcpu (chan_info, pkt->resource_id);else core_num = pkt->resource_id;
@@ -843,22 +849,22 @@ process_request(struct rte_power_channel_packet *pkt,bool valid_unit = true;switch (pkt->unit) { -case (CPU_POWER_SCALE_MIN ): +case (RTE_POWER_SCALE_MIN ): scale_res =power_manager_scale_core_min (core_num);break ; -case (CPU_POWER_SCALE_MAX ): +case (RTE_POWER_SCALE_MAX ): scale_res =power_manager_scale_core_max (core_num);break ; -case (CPU_POWER_SCALE_DOWN ): +case (RTE_POWER_SCALE_DOWN ): scale_res =power_manager_scale_core_down (core_num);break ; -case (CPU_POWER_SCALE_UP ): +case (RTE_POWER_SCALE_UP ): scale_res =power_manager_scale_core_up (core_num);break ; -case (CPU_POWER_ENABLE_TURBO ): +case (RTE_POWER_ENABLE_TURBO ): scale_res =power_manager_enable_turbo_core (core_num);break ; -case (CPU_POWER_DISABLE_TURBO ): +case (RTE_POWER_DISABLE_TURBO ): scale_res =power_manager_disable_turbo_core (core_num);break ;default :
@@ -870,8 +876,8 @@ process_request(struct rte_power_channel_packet *pkt, ret =send_ack_for_received_cmd (pkt, chan_info, scale_res >=0 ? -CPU_POWER_CMD_ACK : -CPU_POWER_CMD_NACK ); +RTE_POWER_CMD_ACK : +RTE_POWER_CMD_NACK );if (ret <0 )RTE_LOG (ERR ,CHANNEL_MONITOR ,"Error during sending ack command.\n" ); }else
@@ -879,19 +885,19 @@ process_request(struct rte_power_channel_packet *pkt, } -if (pkt->command ==PKT_POLICY ) { +if (pkt->command ==RTE_POWER_PKT_POLICY ) {RTE_LOG (INFO ,CHANNEL_MONITOR ,"Processing policy request %s\n" , pkt->vm_name);int ret =send_ack_for_received_cmd (pkt, chan_info, -CPU_POWER_CMD_ACK ); +RTE_POWER_CMD_ACK );if (ret <0 )RTE_LOG (ERR ,CHANNEL_MONITOR ,"Error during sending ack command.\n" );update_policy (pkt); policy_is_set =1 ; } -if (pkt->command ==PKT_POLICY_REMOVE ) { +if (pkt->command ==RTE_POWER_PKT_POLICY_REMOVE ) { ret =remove_policy (pkt);if (ret ==0 ) RTE_LOG(INFO, CHANNEL_MONITOR,
@@ -901,26 +907,26 @@ process_request(struct rte_power_channel_packet *pkt, "Policy %s does not exist\n", pkt->vm_name); } -if (pkt->command ==CPU_POWER_QUERY_FREQ_LIST || - pkt->command ==CPU_POWER_QUERY_FREQ ) { +if (pkt->command ==RTE_POWER_QUERY_FREQ_LIST || + pkt->command ==RTE_POWER_QUERY_FREQ ) {RTE_LOG (INFO ,CHANNEL_MONITOR ,"Frequency for %s requested.\n" , pkt->vm_name);int ret =send_freq (pkt, chan_info, - pkt->command ==CPU_POWER_QUERY_FREQ_LIST ); + pkt->command ==RTE_POWER_QUERY_FREQ_LIST );if (ret <0 )RTE_LOG (ERR ,CHANNEL_MONITOR ,"Error during frequency sending.\n" ); } -if (pkt->command ==CPU_POWER_QUERY_CAPS_LIST || - pkt->command ==CPU_POWER_QUERY_CAPS ) { +if (pkt->command ==RTE_POWER_QUERY_CAPS_LIST || + pkt->command ==RTE_POWER_QUERY_CAPS ) {RTE_LOG (INFO ,CHANNEL_MONITOR ,"Capabilities for %s requested.\n" , pkt->vm_name);int ret =send_capabilities (pkt, chan_info, - pkt->command ==CPU_POWER_QUERY_CAPS_LIST ); + pkt->command ==RTE_POWER_QUERY_CAPS_LIST );if (ret <0 )RTE_LOG (ERR ,CHANNEL_MONITOR ,"Error during sending capabilities.\n" ); }
examples/vm_power_manager/channel_monitor.h +3 -3
@@ -19,10 +19,10 @@ struct core_share {struct policy {struct rte_power_channel_packet pkt; -uint32_t pfid[MAX_VFS ]; -uint32_t port[MAX_VFS ]; +uint32_t pfid[RTE_POWER_MAX_VFS ]; +uint32_t port[RTE_POWER_MAX_VFS ];unsigned int enabled; -struct core_share core_share[MAX_VCPU_PER_VM ]; +struct core_share core_share[RTE_POWER_MAX_VCPU_PER_VM ]; };#ifdef __cplusplus
examples/vm_power_manager/guest_cli/main.c +18 -11
@@ -50,8 +50,8 @@ parse_args(int argc, char **argv) };struct rte_power_channel_packet *policy;unsigned short int hours[MAX_HOURS ]; -unsigned short int cores[MAX_VCPU_PER_VM ]; -unsigned short int ports[MAX_VCPU_PER_VM ]; +unsigned short int cores[RTE_POWER_MAX_VCPU_PER_VM ]; +unsigned short int ports[RTE_POWER_MAX_VCPU_PER_VM ];int i, cnt, idx; policy =get_policy ();
@@ -69,7 +69,8 @@ parse_args(int argc, char **argv)switch (opt) {/* portmask */ case 'n' : -strlcpy (policy->vm_name, optarg,VM_MAX_NAME_SZ ); +strlcpy (policy->vm_name, optarg, +RTE_POWER_VM_MAX_NAME_SZ );printf ("Setting VM Name to [%s]\n" , policy->vm_name);break ;case 'b' :
@@ -97,14 +98,15 @@ parse_args(int argc, char **argv) }break ;case 'l' : - cnt =parse_set (optarg, cores,MAX_VCPU_PER_VM ); + cnt =parse_set (optarg, cores, +RTE_POWER_MAX_VCPU_PER_VM );if (cnt <0 ) {printf ("Invalid value passed to vcpu-list - [%s]\n" , optarg);break ; } idx =0 ; -for (i =0 ; i <MAX_VCPU_PER_VM ; i++) { +for (i =0 ; i <RTE_POWER_MAX_VCPU_PER_VM ; i++) {if (cores[i]) {printf ("***Using core %d\n" , i); policy->vcpu_to_control[idx++] = i;
@@ -114,14 +116,15 @@ parse_args(int argc, char **argv)printf ("Total cores: %d\n" , idx);break ;case 'p' : - cnt =parse_set (optarg, ports,MAX_VCPU_PER_VM ); + cnt =parse_set (optarg, ports, +RTE_POWER_MAX_VCPU_PER_VM );if (cnt <0 ) {printf ("Invalid value passed to port-list - [%s]\n" , optarg);break ; } idx =0 ; -for (i =0 ; i <MAX_VCPU_PER_VM ; i++) { +for (i =0 ; i <RTE_POWER_MAX_VCPU_PER_VM ; i++) {if (ports[i]) {printf ("***Using port %d\n" , i);if (set_policy_mac (i, idx++) !=0 ) {
@@ -135,13 +138,17 @@ parse_args(int argc, char **argv)break ;case 'o' :if (!strcmp (optarg,"TRAFFIC" )) - policy->policy_to_use =TRAFFIC ; + policy->policy_to_use = +RTE_POWER_POLICY_TRAFFIC ;else if (!strcmp (optarg,"TIME" )) - policy->policy_to_use =TIME ; + policy->policy_to_use = +RTE_POWER_POLICY_TIME ;else if (!strcmp (optarg,"WORKLOAD" )) - policy->policy_to_use =WORKLOAD ; + policy->policy_to_use = +RTE_POWER_POLICY_WORKLOAD ;else if (!strcmp (optarg,"BRANCH_RATIO" )) - policy->policy_to_use =BRANCH_RATIO ; + policy->policy_to_use = +RTE_POWER_POLICY_BRANCH_RATIO ;else {printf ("Invalid policy specified: %s\n" , optarg);
examples/vm_power_manager/guest_cli/vm_power_cli_guest.c +14 -14
@@ -103,10 +103,10 @@ set_policy_defaults(struct rte_power_channel_packet *pkt) pkt->timer_policy.hours_to_use_traffic_profile[0 ] =8 ; pkt->timer_policy.hours_to_use_traffic_profile[1 ] =10 ; - pkt->core_type =CORE_TYPE_VIRTUAL ; - pkt->workload =LOW ; - pkt->policy_to_use =TIME ; - pkt->command =PKT_POLICY ; + pkt->core_type =RTE_POWER_CORE_TYPE_VIRTUAL ; + pkt->workload =RTE_POWER_WL_LOW ; + pkt->policy_to_use =RTE_POWER_POLICY_TIME ; + pkt->command =RTE_POWER_PKT_POLICY ;strlcpy (pkt->vm_name,"ubuntu2" ,sizeof (pkt->vm_name));return 0 ;
@@ -169,7 +169,7 @@ receive_freq_list(struct rte_power_channel_packet_freq_list *pkt_freq_list,RTE_LOG (ERR ,GUEST_CLI ,"Error receiving message.\n" );return -1 ; } -if (pkt_freq_list->command !=CPU_POWER_FREQ_LIST ) { +if (pkt_freq_list->command !=RTE_POWER_FREQ_LIST ) {RTE_LOG (ERR ,GUEST_CLI ,"Unexpected message received.\n" );return -1 ; }
@@ -203,18 +203,18 @@ cmd_query_freq_list_parsed(void *parsed_result,return ; } - pkt.command =CPU_POWER_QUERY_FREQ_LIST ; + pkt.command =RTE_POWER_QUERY_FREQ_LIST ;strlcpy (pkt.vm_name, policy.vm_name,sizeof (pkt.vm_name)); query_list = true; }else { errno =0 ; lcore_id = (unsigned int )strtol (res->cpu_num, &ep,10 ); -if (errno !=0 || lcore_id >=MAX_VCPU_PER_VM || +if (errno !=0 || lcore_id >=RTE_POWER_MAX_VCPU_PER_VM || ep == res->cpu_num) {cmdline_printf (cl,"Invalid parameter provided.\n" );return ; } - pkt.command =CPU_POWER_QUERY_FREQ ; + pkt.command =RTE_POWER_QUERY_FREQ ;strlcpy (pkt.vm_name, policy.vm_name,sizeof (pkt.vm_name)); pkt.resource_id = lcore_id; }
@@ -279,7 +279,7 @@ receive_capabilities(struct rte_power_channel_packet_caps_list *pkt_caps_list,RTE_LOG (ERR ,GUEST_CLI ,"Error receiving message.\n" );return -1 ; } -if (pkt_caps_list->command !=CPU_POWER_CAPS_LIST ) { +if (pkt_caps_list->command !=RTE_POWER_CAPS_LIST ) {RTE_LOG (ERR ,GUEST_CLI ,"Unexpected message received.\n" );return -1 ; }
@@ -313,18 +313,18 @@ cmd_query_caps_list_parsed(void *parsed_result,return ; } - pkt.command =CPU_POWER_QUERY_CAPS_LIST ; + pkt.command =RTE_POWER_QUERY_CAPS_LIST ;strlcpy (pkt.vm_name, policy.vm_name,sizeof (pkt.vm_name)); query_list = true; }else { errno =0 ; lcore_id = (unsigned int )strtol (res->cpu_num, &ep,10 ); -if (errno !=0 || lcore_id >=MAX_VCPU_PER_VM || +if (errno !=0 || lcore_id >=RTE_POWER_MAX_VCPU_PER_VM || ep == res->cpu_num) {cmdline_printf (cl,"Invalid parameter provided.\n" );return ; } - pkt.command =CPU_POWER_QUERY_CAPS ; + pkt.command =RTE_POWER_QUERY_CAPS ;strlcpy (pkt.vm_name, policy.vm_name,sizeof (pkt.vm_name)); pkt.resource_id = lcore_id; }
@@ -388,10 +388,10 @@ check_response_cmd(unsigned int lcore_id, int *result)return -1 ;switch (pkt.command) { -case (CPU_POWER_CMD_ACK ): +case (RTE_POWER_CMD_ACK ): *result =1 ;break ; -case (CPU_POWER_CMD_NACK ): +case (RTE_POWER_CMD_NACK ): *result =0 ;break ;default :
examples/vm_power_manager/main.c +1 -1
@@ -394,7 +394,7 @@ main(int argc, char **argv)"Cannot init port %" PRIu8"\n" , portid); -for (w =0 ; w <MAX_VFS ; w++) { +for (w =0 ; w <RTE_POWER_MAX_VFS ; w++) { eth.addr_bytes[5 ] = w +0xf0 ; ret = -ENOTSUP ;
lib/librte_power/guest_channel.c +1 -1
@@ -100,7 +100,7 @@ guest_channel_host_connect(const char *path, unsigned int lcore_id)/* Send a test packet, this command is ignored by the host, but a successful * send indicates that the host endpoint is monitoring. */ - pkt.command =CPU_POWER_CONNECT ; + pkt.command =RTE_POWER_CPU_POWER_CONNECT ; global_fds[lcore_id] = fd; ret =guest_channel_send_msg (&pkt, lcore_id);if (ret !=0 ) {
lib/librte_power/power_kvm_vm.c +7 -7
@@ -29,7 +29,7 @@ power_kvm_vm_init(unsigned int lcore_id) lcore_id, RTE_MAX_LCORE-1);return -1 ; } - pkt[lcore_id].command =CPU_POWER ; + pkt[lcore_id].command =RTE_POWER_CPU_POWER ; pkt[lcore_id].resource_id = lcore_id;return guest_channel_host_connect (FD_PATH , lcore_id); }
@@ -90,25 +90,25 @@ send_msg(unsigned int lcore_id, uint32_t scale_direction)int power_kvm_vm_freq_up (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_SCALE_UP ); +return send_msg (lcore_id,RTE_POWER_SCALE_UP ); }int power_kvm_vm_freq_down (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_SCALE_DOWN ); +return send_msg (lcore_id,RTE_POWER_SCALE_DOWN ); }int power_kvm_vm_freq_max (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_SCALE_MAX ); +return send_msg (lcore_id,RTE_POWER_SCALE_MAX ); }int power_kvm_vm_freq_min (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_SCALE_MIN ); +return send_msg (lcore_id,RTE_POWER_SCALE_MIN ); }int
@@ -121,13 +121,13 @@ power_kvm_vm_turbo_status(__rte_unused unsigned int lcore_id)int power_kvm_vm_enable_turbo (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_ENABLE_TURBO ); +return send_msg (lcore_id,RTE_POWER_ENABLE_TURBO ); }int power_kvm_vm_disable_turbo (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_DISABLE_TURBO ); +return send_msg (lcore_id,RTE_POWER_DISABLE_TURBO ); }struct rte_power_core_capabilities ;
lib/librte_power/rte_power_guest_channel.h +50 -48
144 lines not on this page · raw message
Signature · 1 line
2.17.1
PATCH v5 5/6 power: add new header file to export list
In reply to David HuntFrom: Bruce Richardson <[email protected]>
Adjust meson.build so that 'ninja install' copies the new header file into the installation directory.
--- lib/librte_power/meson.build | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
lib/librte_power/meson.build +2 -1
@@ -10,5 +10,6 @@ sources = files('rte_power.c', 'power_acpi_cpufreq.c', 'rte_power_empty_poll.c', 'power_pstate_cpufreq.c', 'power_common.c') -headers = files('rte_power.h','rte_power_empty_poll.h') +headers = files('rte_power.h','rte_power_empty_poll.h', + 'rte_power_guest_channel.h') deps += ['timer']
Signature · 1 line
2.17.1
PATCH v5 6/6 power: clean up includes
In reply to David HuntFrom: Bruce Richardson <[email protected]>
re-organise the including of the new public header file and remove un-needed includes
--- examples/vm_power_manager/channel_manager.c | 1 - examples/vm_power_manager/channel_monitor.c | 1 - examples/vm_power_manager/channel_monitor.h | 2 +- examples/vm_power_manager/guest_cli/vm_power_cli_guest.c | 1 - examples/vm_power_manager/guest_cli/vm_power_cli_guest.h | 2 -- examples/vm_power_manager/vm_power_cli.c | 1 - lib/librte_power/guest_channel.c | 2 +- lib/librte_power/guest_channel.h | 2 -- lib/librte_power/power_kvm_vm.c | 2 +- lib/librte_power/rte_power.h | 1 + lib/librte_power/rte_power_guest_channel.h | 3 --- 11 files changed, 4 insertions(+), 14 deletions(-)
examples/vm_power_manager/channel_manager.c +0 -1
@@ -27,7 +27,6 @@#include <libvirt/libvirt.h> #include "channel_manager.h" -#include "rte_power_guest_channel.h" #include "channel_monitor.h" #include "power_manager.h"
examples/vm_power_manager/channel_monitor.c +0 -1
@@ -35,7 +35,6 @@#include <libvirt/libvirt.h> #include "channel_monitor.h" -#include "rte_power_guest_channel.h" #include "channel_manager.h" #include "power_manager.h" #include "oob_monitor.h"
examples/vm_power_manager/channel_monitor.h +1 -1
@@ -5,8 +5,8 @@ #ifndef CHANNEL_MONITOR_H_ #define CHANNEL_MONITOR_H_ +#include <rte_power.h> #include "channel_manager.h" -#include "rte_power_guest_channel.h" struct core_share { unsigned int pcpu;
examples/vm_power_manager/guest_cli/vm_power_cli_guest.c +0 -1
@@ -19,7 +19,6 @@#include <rte_ethdev.h> #include <rte_power.h> -#include <guest_channel.h> #include "vm_power_cli_guest.h"
examples/vm_power_manager/guest_cli/vm_power_cli_guest.h +0 -2
@@ -9,8 +9,6 @@extern "C" {#endif -#include "rte_power_guest_channel.h" -struct rte_power_channel_packet *get_policy (void );int set_policy_mac (int port,int idx);
examples/vm_power_manager/vm_power_cli.c +0 -1
@@ -21,7 +21,6 @@#include "channel_manager.h" #include "channel_monitor.h" #include "power_manager.h" -#include "rte_power_guest_channel.h" struct cmd_quit_result {cmdline_fixed_string_t quit;
lib/librte_power/guest_channel.c +1 -1
@@ -15,9 +15,9 @@#include <rte_log.h> +#include <rte_power.h> #include "guest_channel.h" -#include "rte_power_guest_channel.h" #define RTE_LOGTYPE_GUEST_CHANNEL RTE_LOGTYPE_USER1
lib/librte_power/guest_channel.h +0 -2
@@ -8,8 +8,6 @@extern "C" {#endif -#include <rte_power_guest_channel.h> -/** * Check if any Virtio-Serial VM end-points exist in path. *
lib/librte_power/power_kvm_vm.c +1 -1
@@ -6,8 +6,8 @@#include <rte_log.h> -#include "guest_channel.h" #include "rte_power_guest_channel.h" +#include "guest_channel.h" #include "power_kvm_vm.h" #include "power_common.h"
lib/librte_power/rte_power.h +1 -0
@@ -14,6 +14,7 @@#include <rte_byteorder.h> #include <rte_log.h> #include <rte_string_fns.h> +#include <rte_power_guest_channel.h> #ifdef __cplusplusextern "C" {
lib/librte_power/rte_power_guest_channel.h +0 -3
@@ -8,9 +8,6 @@extern "C" {#endif -#include <stdint.h> -#include <stdbool.h> -#define RTE_POWER_MAX_VFS 10#define RTE_POWER_VM_MAX_NAME_SZ 32#define RTE_POWER_MAX_VCPU_PER_VM 8
Signature · 1 line
2.17.1
29/01/2021 11:21, David Hunt:
Quoted 14 lines
The guest channel message definitions and functions in
guest_channel.hare needed by applications and need to be made public.This worked pre-20.11, but now with all the meson/ninja changes, making these apps externally no longer works. To fix, we need to move the header file with the API definitions for the channel commands public, and rename the functions accordingly.
The main change is to rename
channel_commands.htorte_power_guest_channel.hso that it gets picked up by the installer and copied to/usr/local/include. Other changes include renaming #defines to haveRTE_at the beginning instead ofCPU_. Finally we refactor the code to work with those changes.
Quoted 13 lines
---
v2 changes
- re-worked from monolithic patch to a 6 patch patchset for easier review
v3 changes
- Ensure both functions added to the API are tagged as experimental
v4 changes
- add @internal tag on 2 functions for Doxygen
- add @warning EXPERIMENTAL tag on 2 functions for Doxygen
- improve description of lcore param in API docs
- Improve maintainability sizeof's
- add the 2 added functions to the version.map file
v5 changes
- moved version.map additions from patch 3 to patch 2
I already applied a modified v4 with the changes requested by Anatoly that you missed in this v5.
PATCH v4 2/6 power: make channel msg functions public
In reply to David HuntFrom: Bruce Richardson <[email protected]>
Move the 2 public functions into rte_power_guest_channel.h
---
changes in v3
* Mark both added functions as experimental
changes in v4
* add @internal tag for Doxygen
* add @warning EXPERIMENTAL tag for Doxygen
* improve description of lcore param
--- lib/librte_power/guest_channel.h | 40 +---------------- lib/librte_power/rte_power_guest_channel.h | 50 ++++++++++++++++++++++ 2 files changed, 51 insertions(+), 39 deletions(-)
lib/librte_power/guest_channel.h +1 -39
@@ -65,21 +65,7 @@ void guest_channel_host_disconnect(unsigned int lcore_id);*/ int guest_channel_send_msg (struct channel_packet *pkt,unsigned int lcore_id); -/** -* Send a message contained in pkt over the Virtio-Serial to the host endpoint. -* -* @param pkt -* Pointer to a populated struct channel_packet -* -* @param lcore_id -* lcore_id. -* -* @return -* - 0 on success. -* - Negative on error. -*/ -int rte_power_guest_channel_send_msg (struct channel_packet *pkt, -unsigned int lcore_id); +/** * Read a message contained in pkt over the Virtio-Serial
@@ -103,30 +89,6 @@ int power_guest_channel_read_msg(void *pkt,size_t pkt_len, unsigned int lcore_id); -/** -* Receive a message contained in pkt over the Virtio-Serial -* from the host endpoint. -* -* @param pkt -* Pointer to channel_packet or -* channel_packet_freq_list struct. -* -* @param pkt_len -* Size of expected data packet. -* -* @param lcore_id -* lcore_id. -* -* @return -* - 0 on success. -* - Negative on error. -*/ -__rte_experimental -int -rte_power_guest_channel_receive_msg (void *pkt, -size_t pkt_len, -unsigned int lcore_id); - #ifdef __cplusplus }
lib/librte_power/rte_power_guest_channel.h +50 -0
56 lines not on this page · raw message
Signature · 1 line
2.17.1
Re: [dpdk-dev] [PATCH v4 2/6] power: make channel msg functions public
Quoted 38 lines · David Hunt
From: Bruce Richardson <[email protected]>
Move the 2 public functions into
rte_power_guest_channel.hFixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>---
changes in v3
* Mark both added functions as experimental
changes in v4
* add @internal tag for Doxygen
* add @warning EXPERIMENTAL tag for Doxygen
* improve description of lcore param--- lib/librte_power/guest_channel.h | 40 +---------------- lib/librte_power/rte_power_guest_channel.h | 50 ++++++++++++++++++++++ 2 files changed, 51 insertions(+), 39 deletions(-)lib/librte_power/guest_channel.h +0
-7@@ -65,21 +65,7 @@ void guest_channel_host_disconnect(unsigned int lcore_id);*/ int guest_channel_send_msg (struct channel_packet *pkt,unsigned int lcore_id); -/** -* Send a message contained in pkt over the Virtio-Serial to the host endpoint. -* -* @param pkt -* Pointer to a populated struct channel_packet -* -* @param lcore_id
lib/librte_power/guest_channel.h void guest_channel_host_disconnect(unsigned int lcore_id); · line 69
Quoted 10 lines
lib/librte_power/guest_channel.h +1
-8-* lcore_id. -* -* @return -* - 0 on success. -* - Negative on error. -*/ -int rte_power_guest_channel_send_msg (struct channel_packet *pkt, -unsigned int lcore_id); +
Nitpick but you left an extra newline there :) can probably be fixed on apply, so
Signature · 2 lines
Thanks, Anatoly
Re: [dpdk-dev] [dpdk-stable] [PATCH v4 2/6] power: make channel msg functions public
In reply to David HuntQuoted 10 lines · David Hunt
From: Bruce Richardson <[email protected]>
Move the 2 public functions into
rte_power_guest_channel.hFixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>
<...>
Quoted 47 lines
index
ef3b064a8..c500c0cda100644lib/librte_power/rte_power_guest_channel.h +40
-0@@ -116,6 +116,56 @@ struct channel_packet_caps_list {uint8_t num_vcpu; }; +/** +* @internal +* +* @warning +* @b EXPERIMENTAL: this API may change without prior notice. +* +* Send a message contained in pkt over the Virtio-Serial to the host endpoint. +* +* @param pkt +* Pointer to a populated struct channel_packet. +* +* @param lcore_id +* Use channel specific to this lcore_id. +* +* @return +* - 0 on success. +* - Negative on error. +*/ +__rte_experimental +int rte_power_guest_channel_send_msg(struct channel_packet *pkt, +unsigned int lcore_id); + +/** +* @internal +* +* @warning +* @b EXPERIMENTAL: this API may change without prior notice. +* +* Receive a message contained in pkt over the Virtio-Serial +* from the host endpoint. +* +* @param pkt +* Pointer to channel_packet or +* channel_packet_freq_list struct. +* +* @param pkt_len +* Size of expected data packet. +* +* @param lcore_id +* Use channel specific to this lcore_id.
lib/librte_power/rte_power_guest_channel.h struct channel_packet_caps_list { · line 168
Quoted 10 lines
lib/librte_power/rte_power_guest_channel.h +10
-0+* +* @return +* - 0 on success. +* - Negative on error. +*/ +__rte_experimental +int rte_power_guest_channel_receive_msg(void *pkt, +size_t pkt_len, +unsigned int lcore_id); +
As far as I can see these function are public, so why they have '@internal' tag?
PATCH v4 3/6 power: rename public structs
In reply to David HuntFrom: Bruce Richardson <[email protected]>
rename the public structs to have an rte_power_ prefix and add them to version.map in experimental section.
---
changes in v4
* Improve sizeof's
* add the 2 functions to the version.map file
--- examples/vm_power_manager/channel_monitor.c | 33 ++++++------ examples/vm_power_manager/channel_monitor.h | 2 +- examples/vm_power_manager/guest_cli/main.c | 2 +- .../guest_cli/vm_power_cli_guest.c | 38 +++++++------- .../guest_cli/vm_power_cli_guest.h | 4 +- lib/librte_power/guest_channel.c | 7 +-- lib/librte_power/guest_channel.h | 7 +-- lib/librte_power/power_kvm_vm.c | 2 +- lib/librte_power/rte_power_guest_channel.h | 51 +++++++++---------- lib/librte_power/version.map | 4 ++ 10 files changed, 77 insertions(+), 73 deletions(-)
examples/vm_power_manager/channel_monitor.c +17 -16
@@ -108,7 +108,7 @@ str_to_ether_addr(const char *a, struct rte_ether_addr *ether_addr) }static int -set_policy_mac (struct channel_packet *pkt,int idx,char *mac) +set_policy_mac (struct rte_power_channel_packet *pkt,int idx,char *mac) {union PFID pfid;int ret;
@@ -165,7 +165,7 @@ get_resource_id_from_vmname(const char *vm_name) }static int -parse_json_to_pkt (json_t *element,struct channel_packet *pkt, +parse_json_to_pkt (json_t *element,struct rte_power_channel_packet *pkt,const char *vm_name) {const char *key;
@@ -173,7 +173,7 @@ parse_json_to_pkt(json_t *element, struct channel_packet *pkt,int ret;int resource_id; -memset (pkt,0 ,sizeof (struct channel_packet )); +memset (pkt,0 ,sizeof (*pkt)); pkt->nb_mac_to_monitor =0 ; pkt->t_boost_status.tbEnabled = false;
@@ -463,7 +463,7 @@ get_pfid(struct policy *pol) }static int -update_policy (struct channel_packet *pkt) +update_policy (struct rte_power_channel_packet *pkt) {unsigned int updated =0 ;
@@ -512,7 +512,7 @@ update_policy(struct channel_packet *pkt) }static int -remove_policy(struct channel_packet *pkt __rte_unused) +remove_policy(struct rte_power_channel_packet *pkt __rte_unused) {unsigned int i;
@@ -673,7 +673,7 @@ static void apply_policy(struct policy *pol) { -struct channel_packet *pkt = &pol->pkt; +struct rte_power_channel_packet *pkt = &pol->pkt;/*Check policy to use*/ if (pkt->policy_to_use ==TRAFFIC )
@@ -715,12 +715,12 @@ write_binary_packet(void *buffer, }static int -send_freq (struct channel_packet *pkt, +send_freq (struct rte_power_channel_packet *pkt,struct channel_info *chan_info,bool freq_list) {unsigned int vcore_id = pkt->resource_id; -struct channel_packet_freq_list channel_pkt_freq_list; +struct rte_power_channel_packet_freq_list channel_pkt_freq_list;struct vm_info info;if (get_info_vm (pkt->vm_name, &info) !=0 )
@@ -751,12 +751,12 @@ send_freq(struct channel_packet *pkt, }static int -send_capabilities (struct channel_packet *pkt, +send_capabilities (struct rte_power_channel_packet *pkt,struct channel_info *chan_info,bool list_requested) {unsigned int vcore_id = pkt->resource_id; -struct channel_packet_caps_list channel_pkt_caps_list; +struct rte_power_channel_packet_caps_list channel_pkt_caps_list;struct vm_info info;struct rte_power_core_capabilities caps;int ret;
@@ -805,18 +805,19 @@ send_capabilities(struct channel_packet *pkt, }static int -send_ack_for_received_cmd (struct channel_packet *pkt, +send_ack_for_received_cmd (struct rte_power_channel_packet *pkt,struct channel_info *chan_info,uint32_t command) { pkt->command = command;return write_binary_packet (pkt, -sizeof (struct channel_packet ), +sizeof (*pkt), chan_info); }static int -process_request (struct channel_packet *pkt,struct channel_info *chan_info) +process_request (struct rte_power_channel_packet *pkt, +struct channel_info *chan_info) {int ret;
@@ -988,7 +989,7 @@ channel_monitor_init(void)static void read_binary_packet (struct channel_info *chan_info) { -struct channel_packet pkt; +struct rte_power_channel_packet pkt;void *buffer = &pkt;int buffer_len =sizeof (pkt);int n_bytes, err =0 ;
@@ -1019,7 +1020,7 @@ read_binary_packet(struct channel_info *chan_info)static void read_json_packet (struct channel_info *chan_info) { -struct channel_packet pkt; +struct rte_power_channel_packet pkt;int n_bytes, ret;json_t *root;json_error_t error;
@@ -1063,7 +1064,7 @@ read_json_packet(struct channel_info *chan_info)/* * Because our data is now in the json * object, we can overwrite the pkt -* with a channel_packet struct, using +* with a rte_power_channel_packet struct, using * parse_json_to_pkt() */ ret =parse_json_to_pkt (root, &pkt, resource_name);
examples/vm_power_manager/channel_monitor.h +1 -1
@@ -18,7 +18,7 @@ struct core_share { };struct policy { -struct channel_packet pkt; +struct rte_power_channel_packet pkt;uint32_t pfid[MAX_VFS ];uint32_t port[MAX_VFS ];unsigned int enabled;
examples/vm_power_manager/guest_cli/main.c +1 -1
@@ -48,7 +48,7 @@ parse_args(int argc, char **argv) { "policy", required_argument, 0, 'o'}, {NULL, 0, 0, 0} }; -struct channel_packet *policy; +struct rte_power_channel_packet *policy;unsigned short int hours[MAX_HOURS ];unsigned short int cores[MAX_VCPU_PER_VM ];unsigned short int ports[MAX_VCPU_PER_VM ];
examples/vm_power_manager/guest_cli/vm_power_cli_guest.c +19 -19
@@ -38,9 +38,9 @@ union PFID {uint64_t pfid; }; -static struct channel_packet policy; +static struct rte_power_channel_packet policy; -struct channel_packet * +struct rte_power_channel_packet *get_policy (void ) {return &policy;
@@ -49,7 +49,7 @@ get_policy(void)int set_policy_mac (int port,int idx) { -struct channel_packet *policy; +struct rte_power_channel_packet *policy;union PFID pfid;int ret;
@@ -73,7 +73,7 @@ set_policy_mac(int port, int idx) }int -set_policy_defaults (struct channel_packet *pkt) +set_policy_defaults (struct rte_power_channel_packet *pkt) {int ret;
@@ -145,7 +145,7 @@ struct cmd_freq_list_result { };static int -query_data (struct channel_packet *pkt,unsigned int lcore_id) +query_data (struct rte_power_channel_packet *pkt,unsigned int lcore_id) {int ret; ret =rte_power_guest_channel_send_msg (pkt, lcore_id);
@@ -157,13 +157,13 @@ query_data(struct channel_packet *pkt, unsigned int lcore_id) }static int -receive_freq_list (struct channel_packet_freq_list *pkt_freq_list, +receive_freq_list (struct rte_power_channel_packet_freq_list *pkt_freq_list,unsigned int lcore_id) {int ret; ret =rte_power_guest_channel_receive_msg (pkt_freq_list, -sizeof (struct channel_packet_freq_list ), +sizeof (*pkt_freq_list), lcore_id);if (ret <0 ) {RTE_LOG (ERR ,GUEST_CLI ,"Error receiving message.\n" );
@@ -183,14 +183,14 @@ cmd_query_freq_list_parsed(void *parsed_result, {struct cmd_freq_list_result *res = parsed_result;unsigned int lcore_id; -struct channel_packet_freq_list pkt_freq_list; -struct channel_packet pkt; +struct rte_power_channel_packet_freq_list pkt_freq_list; +struct rte_power_channel_packet pkt;bool query_list = false;int ret;char *ep; -memset (&pkt,0 ,sizeof (struct channel_packet )); -memset (&pkt_freq_list,0 ,sizeof (struct channel_packet_freq_list )); +memset (&pkt,0 ,sizeof (pkt)); +memset (&pkt_freq_list,0 ,sizeof (pkt_freq_list));if (!strcmp (res->cpu_num,"all" )) {
@@ -267,13 +267,13 @@ struct cmd_query_caps_result { };static int -receive_capabilities (struct channel_packet_caps_list *pkt_caps_list, +receive_capabilities (struct rte_power_channel_packet_caps_list *pkt_caps_list,unsigned int lcore_id) {int ret; ret =rte_power_guest_channel_receive_msg (pkt_caps_list, -sizeof (struct channel_packet_caps_list ), +sizeof (*pkt_caps_list), lcore_id);if (ret <0 ) {RTE_LOG (ERR ,GUEST_CLI ,"Error receiving message.\n" );
@@ -293,14 +293,14 @@ cmd_query_caps_list_parsed(void *parsed_result, {struct cmd_query_caps_result *res = parsed_result;unsigned int lcore_id; -struct channel_packet_caps_list pkt_caps_list; -struct channel_packet pkt; +struct rte_power_channel_packet_caps_list pkt_caps_list; +struct rte_power_channel_packet pkt;bool query_list = false;int ret;char *ep; -memset (&pkt,0 ,sizeof (struct channel_packet )); -memset (&pkt_caps_list,0 ,sizeof (struct channel_packet_caps_list )); +memset (&pkt,0 ,sizeof (pkt)); +memset (&pkt_caps_list,0 ,sizeof (pkt_caps_list));if (!strcmp (res->cpu_num,"all" )) {
@@ -380,7 +380,7 @@ cmdline_parse_inst_t cmd_query_caps_list = {static int check_response_cmd (unsigned int lcore_id,int *result) { -struct channel_packet pkt; +struct rte_power_channel_packet pkt;int ret; ret =rte_power_guest_channel_receive_msg (&pkt,sizeof pkt, lcore_id);
@@ -473,7 +473,7 @@ struct cmd_send_policy_result { };static inline int -send_policy (struct channel_packet *pkt,struct cmdline *cl) +send_policy (struct rte_power_channel_packet *pkt,struct cmdline *cl) {int ret;
examples/vm_power_manager/guest_cli/vm_power_cli_guest.h +2 -2
@@ -11,11 +11,11 @@ extern "C" {#include "rte_power_guest_channel.h" -struct channel_packet *get_policy (void ); +struct rte_power_channel_packet *get_policy (void );int set_policy_mac (int port,int idx); -int set_policy_defaults (struct channel_packet *pkt); +int set_policy_defaults (struct rte_power_channel_packet *pkt); void run_cli(__rte_unused void *arg);
lib/librte_power/guest_channel.c +4 -3
@@ -55,7 +55,7 @@ int guest_channel_host_connect(const char *path, unsigned int lcore_id) { int flags, ret; -struct channel_packet pkt; +struct rte_power_channel_packet pkt;char fd_path[PATH_MAX ];int fd =-1 ;
@@ -119,7 +119,8 @@ guest_channel_host_connect(const char *path, unsigned int lcore_id) }int -guest_channel_send_msg (struct channel_packet *pkt,unsigned int lcore_id) +guest_channel_send_msg (struct rte_power_channel_packet *pkt, +unsigned int lcore_id) {int ret, buffer_len =sizeof (*pkt);void *buffer = pkt;
@@ -149,7 +150,7 @@ guest_channel_send_msg(struct channel_packet *pkt, unsigned int lcore_id)return 0 ; } -int rte_power_guest_channel_send_msg (struct channel_packet *pkt, +int rte_power_guest_channel_send_msg (struct rte_power_channel_packet *pkt,unsigned int lcore_id) {return guest_channel_send_msg (pkt, lcore_id);
lib/librte_power/guest_channel.h +4 -3
@@ -63,7 +63,8 @@ void guest_channel_host_disconnect(unsigned int lcore_id);* - Negative on channel not connected. * - errno on write to channel error. */ -int guest_channel_send_msg (struct channel_packet *pkt,unsigned int lcore_id); +int guest_channel_send_msg (struct rte_power_channel_packet *pkt, +unsigned int lcore_id);
@@ -72,8 +73,8 @@ int guest_channel_send_msg(struct channel_packet *pkt, unsigned int lcore_id);* from the host endpoint. * * @param pkt -* Pointer to channel_packet or -* channel_packet_freq_list struct. +* Pointer to rte_power_channel_packet or +* rte_power_channel_packet_freq_list struct. * * @param pkt_len * Size of expected data packet.
lib/librte_power/power_kvm_vm.c +1 -1
@@ -13,7 +13,7 @@#define FD_PATH "/dev/virtio-ports/virtio.serial.port.poweragent" -static struct channel_packet pkt[RTE_MAX_LCORE ]; +static struct rte_power_channel_packet pkt[RTE_MAX_LCORE ];int power_kvm_vm_check_supported (void )
lib/librte_power/rte_power_guest_channel.h +24 -27
109 lines not on this page · raw message
lib/librte_power/version.map +4 -0
@@ -34,4 +34,8 @@ EXPERIMENTAL { rte_power_guest_channel_receive_msg; rte_power_poll_stat_fetch; rte_power_poll_stat_update; + + # added in 21.02 + rte_power_guest_channel_receive_msg; + rte_power_guest_channel_send_msg; };
Signature · 1 line
2.17.1
Re: [dpdk-dev] [PATCH v4 3/6] power: rename public structs
Quoted 17 lines · David Hunt
From: Bruce Richardson <[email protected]>
rename the public structs to have an
rte_power_prefix and add them to version.map in experimental section.Fixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>---
changes in v4
* Improve sizeof's
* add the 2 functions to the version.map file
---
<snip>
Quoted 5 lines
lib/librte_power/rte_power_guest_channel.h +0
-0
lib/librte_power/rte_power_guest_channel.h extern "C" { · line 18
Quoted 9 lines
lib/librte_power/rte_power_guest_channel.h +4
-1@@ -11,7 +11,10 @@ extern "C" {#include <stdint.h> #include <stdbool.h> -/* --- Incoming messages --- */ +#define MAX_VFS 10 +#define VM_MAX_NAME_SZ 32 +#define MAX_VCPU_PER_VM 8 +#define HOURS 24
These and other defines are in public header, and they're not under RTE_ namespace. To avoid clashes with user code, I would suggest either adding an RTE_ prefix, or maybe #undef'ing them at the end of the file.
Signature · 2 lines
Thanks, Anatoly
Re: [dpdk-dev] [PATCH v4 3/6] power: rename public structs
Quoted 21 lines · Anatoly
Quoted 17 lines · David Hunt
From: Bruce Richardson <[email protected]>
rename the public structs to have an
rte_power_prefix and add them to version.map in experimental section.Fixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>---
changes in v4
* Improve sizeof's
* add the 2 functions to the version.map file
---<snip>
Quoted 15 lines
lib/librte_power/rte_power_guest_channel.h extern "C" { · line 16
Quoted 12 lines
lib/librte_power/rte_power_guest_channel.h +4
-1@@ -11,7 +11,10 @@ extern "C" { #include <stdint.h> #include <stdbool.h> -/* --- Incoming messages --- */ +#define MAX_VFS 10 +#define VM_MAX_NAME_SZ 32 +#define MAX_VCPU_PER_VM 8 +#define HOURS 24These and other defines are in public header, and they're not under
RTE_namespace. To avoid clashes with user code, I would suggest either adding anRTE_prefix, or maybe #undef'ing them at the end of the file.
Apologies, didn't realize this was in the next patch :D (also, #undef was a bad idea...)
Signature · 2 lines
Thanks, Anatoly
Re: [dpdk-dev] [PATCH v4 3/6] power: rename public structs
In reply to David HuntQuoted 9 lines · David Hunt
From: Bruce Richardson <[email protected]>
rename the public structs to have an
rte_power_prefix and add them to version.map in experimental section.Fixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")
Quoted 8 lines
Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>---
changes in v4
* Improve sizeof's
* add the 2 functions to the version.map file
---
Signature · 2 lines
Thanks, Anatoly
Re: [dpdk-dev] [dpdk-stable] [PATCH v4 3/6] power: rename public structs
In reply to David Hunt21/01/2021 18:21, David Hunt:
lib/librte_power/version.map EXPERIMENTAL { · line 40
Quoted 5 lines
lib/librte_power/version.map +3
-0+ # added in 21.02 + rte_power_guest_channel_receive_msg; + rte_power_guest_channel_send_msg;
This should be in the previous patch otherwise it does not compile.
Re: [dpdk-dev] [dpdk-stable] [PATCH v4 3/6] power: rename public structs
In reply to David HuntQuoted 12 lines · David Hunt
From: Bruce Richardson <[email protected]>
rename the public structs to have an
rte_power_prefix and add them to version.map in experimental section.Fixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>
<...>
lib/librte_power/version.map EXPERIMENTAL { · line 41
Quoted 13 lines
lib/librte_power/version.map +4
-0@@ -34,4 +34,8 @@ EXPERIMENTAL { rte_power_guest_channel_receive_msg; rte_power_poll_stat_fetch; rte_power_poll_stat_update; + + # added in 21.02 + rte_power_guest_channel_receive_msg; + rte_power_guest_channel_send_msg; };
These two new symbols are already in the .map file, which is causing a build error [1], need to remove the duplicate.
And one of the above symbols is already in the non-experimental section, I guess that was a mistake but just to double check, we are not downgrading an existing mature API to experimental API, right?
[1]
https://travis-ci.com/github/ovsrobot/dpdk/jobs/484119344
PATCH v4 4/6 power: rename defines
In reply to David HuntFrom: Bruce Richardson <[email protected]>
Rename the #defines to have an RTE_POWER_ prefix
--- examples/vm_power_manager/channel_monitor.c | 116 +++++++++--------- examples/vm_power_manager/channel_monitor.h | 6 +- examples/vm_power_manager/guest_cli/main.c | 29 +++-- .../guest_cli/vm_power_cli_guest.c | 28 ++--- examples/vm_power_manager/main.c | 2 +- lib/librte_power/guest_channel.c | 2 +- lib/librte_power/power_kvm_vm.c | 14 +-- lib/librte_power/rte_power_guest_channel.h | 98 +++++++-------- 8 files changed, 155 insertions(+), 140 deletions(-)
examples/vm_power_manager/channel_monitor.c +61 -55
@@ -177,10 +177,10 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt, pkt->nb_mac_to_monitor =0 ; pkt->t_boost_status.tbEnabled = false; - pkt->workload =LOW ; - pkt->policy_to_use =TIME ; - pkt->command =PKT_POLICY ; - pkt->core_type =CORE_TYPE_PHYSICAL ; + pkt->workload =RTE_POWER_WL_LOW ; + pkt->policy_to_use =RTE_POWER_POLICY_TIME ; + pkt->command =RTE_POWER_PKT_POLICY ; + pkt->core_type =RTE_POWER_CORE_TYPE_PHYSICAL ;if (vm_name ==NULL ) { RTE_LOG(ERR, CHANNEL_MONITOR,
@@ -203,11 +203,11 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt,char command[32 ];strlcpy (command,json_string_value (value),32 );if (!strcmp (command,"power" )) { - pkt->command =CPU_POWER ; + pkt->command =RTE_POWER_CPU_POWER ; }else if (!strcmp (command,"create" )) { - pkt->command =PKT_POLICY ; + pkt->command =RTE_POWER_PKT_POLICY ; }else if (!strcmp (command,"destroy" )) { - pkt->command =PKT_POLICY_REMOVE ; + pkt->command =RTE_POWER_PKT_POLICY_REMOVE ; }else {RTE_LOG (ERR ,CHANNEL_MONITOR ,"Invalid command received in JSON\n" );
@@ -217,13 +217,17 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt,char command[32 ];strlcpy (command,json_string_value (value),32 );if (!strcmp (command,"TIME" )) { - pkt->policy_to_use =TIME ; + pkt->policy_to_use = +RTE_POWER_POLICY_TIME ; }else if (!strcmp (command,"TRAFFIC" )) { - pkt->policy_to_use =TRAFFIC ; + pkt->policy_to_use = +RTE_POWER_POLICY_TRAFFIC ; }else if (!strcmp (command,"WORKLOAD" )) { - pkt->policy_to_use =WORKLOAD ; + pkt->policy_to_use = +RTE_POWER_POLICY_WORKLOAD ; }else if (!strcmp (command,"BRANCH_RATIO" )) { - pkt->policy_to_use =BRANCH_RATIO ; + pkt->policy_to_use = +RTE_POWER_POLICY_BRANCH_RATIO ; }else {RTE_LOG (ERR ,CHANNEL_MONITOR ,"Wrong policy_type received in JSON\n" );
@@ -233,11 +237,11 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt,char command[32 ];strlcpy (command,json_string_value (value),32 );if (!strcmp (command,"HIGH" )) { - pkt->workload =HIGH ; + pkt->workload =RTE_POWER_WL_HIGH ; }else if (!strcmp (command,"MEDIUM" )) { - pkt->workload =MEDIUM ; + pkt->workload =RTE_POWER_WL_MEDIUM ; }else if (!strcmp (command,"LOW" )) { - pkt->workload =LOW ; + pkt->workload =RTE_POWER_WL_LOW ; }else {RTE_LOG (ERR ,CHANNEL_MONITOR ,"Wrong workload received in JSON\n" );
@@ -283,17 +287,17 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt,char unit[32 ];strlcpy (unit,json_string_value (value),32 );if (!strcmp (unit,"SCALE_UP" )) { - pkt->unit =CPU_POWER_SCALE_UP ; + pkt->unit =RTE_POWER_SCALE_UP ; }else if (!strcmp (unit,"SCALE_DOWN" )) { - pkt->unit =CPU_POWER_SCALE_DOWN ; + pkt->unit =RTE_POWER_SCALE_DOWN ; }else if (!strcmp (unit,"SCALE_MAX" )) { - pkt->unit =CPU_POWER_SCALE_MAX ; + pkt->unit =RTE_POWER_SCALE_MAX ; }else if (!strcmp (unit,"SCALE_MIN" )) { - pkt->unit =CPU_POWER_SCALE_MIN ; + pkt->unit =RTE_POWER_SCALE_MIN ; }else if (!strcmp (unit,"ENABLE_TURBO" )) { - pkt->unit =CPU_POWER_ENABLE_TURBO ; + pkt->unit =RTE_POWER_ENABLE_TURBO ; }else if (!strcmp (unit,"DISABLE_TURBO" )) { - pkt->unit =CPU_POWER_DISABLE_TURBO ; + pkt->unit =RTE_POWER_DISABLE_TURBO ; }else {RTE_LOG (ERR ,CHANNEL_MONITOR ,"Invalid command received in JSON\n" );
@@ -312,7 +316,7 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt, vm_name);return -1 ; } -strlcpy (pkt->vm_name, vm_name,VM_MAX_NAME_SZ ); +strlcpy (pkt->vm_name, vm_name,RTE_POWER_VM_MAX_NAME_SZ ); pkt->resource_id = resource_id; }return 0 ;
@@ -367,7 +371,7 @@ pcpu_monitor(struct policy *pol, struct core_info *ci, int pcpu, int count) {int ret =0 ; -if (pol->pkt.policy_to_use ==BRANCH_RATIO ) { +if (pol->pkt.policy_to_use ==RTE_POWER_POLICY_BRANCH_RATIO ) { ci->cd[pcpu].oob_enabled =1 ; ret =add_core_to_monitor (pcpu);if (ret ==0 )
@@ -407,7 +411,7 @@ get_pcpu_to_control(struct policy *pol)* differenciate between them when adding them to the branch monitor. * Virtual cores need to be converted to physical cores. */ -if (pol->pkt.core_type ==CORE_TYPE_VIRTUAL ) { +if (pol->pkt.core_type ==RTE_POWER_CORE_TYPE_VIRTUAL ) {/* * If the cores in the policy are virtual, we need to map them * to physical core. We look up the vm info and use that for
@@ -479,7 +483,8 @@ update_policy(struct rte_power_channel_packet *pkt) policies[i].pkt = *pkt;get_pcpu_to_control (&policies[i]);/* Check Eth dev only for Traffic policy */ -if (policies[i].pkt.policy_to_use ==TRAFFIC ) { +if (policies[i].pkt.policy_to_use == +RTE_POWER_POLICY_TRAFFIC ) {if (get_pfid (&policies[i]) <0 ) { updated =1 ;break ;
@@ -496,7 +501,8 @@ update_policy(struct rte_power_channel_packet *pkt) policies[i].pkt = *pkt;get_pcpu_to_control (&policies[i]);/* Check Eth dev only for Traffic policy */ -if (policies[i].pkt.policy_to_use ==TRAFFIC ) { +if (policies[i].pkt.policy_to_use == +RTE_POWER_POLICY_TRAFFIC ) {if (get_pfid (&policies[i]) <0 ) { updated =1 ;break ;
@@ -615,7 +621,7 @@ apply_time_profile(struct policy *pol)/* Format the date and time, down to a single second. */ strftime (time_string,sizeof (time_string),"%Y-%m-%d %H:%M:%S" , ptm); -for (x =0 ; x <HOURS ; x++) { +for (x =0 ; x <RTE_POWER_HOURS_PER_DAY ; x++) {if (ptm->tm_hour == pol->pkt.timer_policy.busy_hours[x]) {for (count =0 ; count < pol->pkt.num_vcpu; count++) {
@@ -648,19 +654,19 @@ apply_workload_profile(struct policy *pol)int count; -if (pol->pkt.workload ==HIGH ) { +if (pol->pkt.workload ==RTE_POWER_WL_HIGH ) {for (count =0 ; count < pol->pkt.num_vcpu; count++) {if (pol->core_share[count].status !=1 )power_manager_scale_core_max ( pol->core_share[count].pcpu); } - }else if (pol->pkt.workload ==MEDIUM ) { + }else if (pol->pkt.workload ==RTE_POWER_WL_MEDIUM ) {for (count =0 ; count < pol->pkt.num_vcpu; count++) {if (pol->core_share[count].status !=1 )power_manager_scale_core_med ( pol->core_share[count].pcpu); } - }else if (pol->pkt.workload ==LOW ) { + }else if (pol->pkt.workload ==RTE_POWER_WL_LOW ) {for (count =0 ; count < pol->pkt.num_vcpu; count++) {if (pol->core_share[count].status !=1 ) power_manager_scale_core_min(
@@ -676,11 +682,11 @@ apply_policy(struct policy *pol)struct rte_power_channel_packet *pkt = &pol->pkt;/*Check policy to use*/ -if (pkt->policy_to_use ==TRAFFIC ) +if (pkt->policy_to_use ==RTE_POWER_POLICY_TRAFFIC )apply_traffic_profile (pol); -else if (pkt->policy_to_use ==TIME ) +else if (pkt->policy_to_use ==RTE_POWER_POLICY_TIME )apply_time_profile (pol); -else if (pkt->policy_to_use ==WORKLOAD ) +else if (pkt->policy_to_use ==RTE_POWER_POLICY_WORKLOAD )apply_workload_profile (pol); }
@@ -726,13 +732,13 @@ send_freq(struct rte_power_channel_packet *pkt,if (get_info_vm (pkt->vm_name, &info) !=0 )return -1 ; -if (!freq_list && vcore_id >=MAX_VCPU_PER_VM ) +if (!freq_list && vcore_id >=RTE_POWER_MAX_VCPU_PER_VM )return -1 ;if (!info.allow_query)return -1 ; - channel_pkt_freq_list.command =CPU_POWER_FREQ_LIST ; + channel_pkt_freq_list.command =RTE_POWER_FREQ_LIST ; channel_pkt_freq_list.num_vcpu = info.num_vcpus;if (freq_list) {
@@ -764,13 +770,13 @@ send_capabilities(struct rte_power_channel_packet *pkt,if (get_info_vm (pkt->vm_name, &info) !=0 )return -1 ; -if (!list_requested && vcore_id >=MAX_VCPU_PER_VM ) +if (!list_requested && vcore_id >=RTE_POWER_MAX_VCPU_PER_VM )return -1 ;if (!info.allow_query)return -1 ; - channel_pkt_caps_list.command =CPU_POWER_CAPS_LIST ; + channel_pkt_caps_list.command =RTE_POWER_CAPS_LIST ; channel_pkt_caps_list.num_vcpu = info.num_vcpus;if (list_requested) {
@@ -828,10 +834,10 @@ process_request(struct rte_power_channel_packet *pkt, CHANNEL_MGR_CHANNEL_PROCESSING) == 0)return -1 ; -if (pkt->command ==CPU_POWER ) { +if (pkt->command ==RTE_POWER_CPU_POWER ) {unsigned int core_num; -if (pkt->core_type ==CORE_TYPE_VIRTUAL ) +if (pkt->core_type ==RTE_POWER_CORE_TYPE_VIRTUAL ) core_num =get_pcpu (chan_info, pkt->resource_id);else core_num = pkt->resource_id;
@@ -843,22 +849,22 @@ process_request(struct rte_power_channel_packet *pkt,bool valid_unit = true;switch (pkt->unit) { -case (CPU_POWER_SCALE_MIN ): +case (RTE_POWER_SCALE_MIN ): scale_res =power_manager_scale_core_min (core_num);break ; -case (CPU_POWER_SCALE_MAX ): +case (RTE_POWER_SCALE_MAX ): scale_res =power_manager_scale_core_max (core_num);break ; -case (CPU_POWER_SCALE_DOWN ): +case (RTE_POWER_SCALE_DOWN ): scale_res =power_manager_scale_core_down (core_num);break ; -case (CPU_POWER_SCALE_UP ): +case (RTE_POWER_SCALE_UP ): scale_res =power_manager_scale_core_up (core_num);break ; -case (CPU_POWER_ENABLE_TURBO ): +case (RTE_POWER_ENABLE_TURBO ): scale_res =power_manager_enable_turbo_core (core_num);break ; -case (CPU_POWER_DISABLE_TURBO ): +case (RTE_POWER_DISABLE_TURBO ): scale_res =power_manager_disable_turbo_core (core_num);break ;default :
@@ -870,8 +876,8 @@ process_request(struct rte_power_channel_packet *pkt, ret =send_ack_for_received_cmd (pkt, chan_info, scale_res >=0 ? -CPU_POWER_CMD_ACK : -CPU_POWER_CMD_NACK ); +RTE_POWER_CMD_ACK : +RTE_POWER_CMD_NACK );if (ret <0 )RTE_LOG (ERR ,CHANNEL_MONITOR ,"Error during sending ack command.\n" ); }else
@@ -879,19 +885,19 @@ process_request(struct rte_power_channel_packet *pkt, } -if (pkt->command ==PKT_POLICY ) { +if (pkt->command ==RTE_POWER_PKT_POLICY ) {RTE_LOG (INFO ,CHANNEL_MONITOR ,"Processing policy request %s\n" , pkt->vm_name);int ret =send_ack_for_received_cmd (pkt, chan_info, -CPU_POWER_CMD_ACK ); +RTE_POWER_CMD_ACK );if (ret <0 )RTE_LOG (ERR ,CHANNEL_MONITOR ,"Error during sending ack command.\n" );update_policy (pkt); policy_is_set =1 ; } -if (pkt->command ==PKT_POLICY_REMOVE ) { +if (pkt->command ==RTE_POWER_PKT_POLICY_REMOVE ) { ret =remove_policy (pkt);if (ret ==0 ) RTE_LOG(INFO, CHANNEL_MONITOR,
@@ -901,26 +907,26 @@ process_request(struct rte_power_channel_packet *pkt, "Policy %s does not exist\n", pkt->vm_name); } -if (pkt->command ==CPU_POWER_QUERY_FREQ_LIST || - pkt->command ==CPU_POWER_QUERY_FREQ ) { +if (pkt->command ==RTE_POWER_QUERY_FREQ_LIST || + pkt->command ==RTE_POWER_QUERY_FREQ ) {RTE_LOG (INFO ,CHANNEL_MONITOR ,"Frequency for %s requested.\n" , pkt->vm_name);int ret =send_freq (pkt, chan_info, - pkt->command ==CPU_POWER_QUERY_FREQ_LIST ); + pkt->command ==RTE_POWER_QUERY_FREQ_LIST );if (ret <0 )RTE_LOG (ERR ,CHANNEL_MONITOR ,"Error during frequency sending.\n" ); } -if (pkt->command ==CPU_POWER_QUERY_CAPS_LIST || - pkt->command ==CPU_POWER_QUERY_CAPS ) { +if (pkt->command ==RTE_POWER_QUERY_CAPS_LIST || + pkt->command ==RTE_POWER_QUERY_CAPS ) {RTE_LOG (INFO ,CHANNEL_MONITOR ,"Capabilities for %s requested.\n" , pkt->vm_name);int ret =send_capabilities (pkt, chan_info, - pkt->command ==CPU_POWER_QUERY_CAPS_LIST ); + pkt->command ==RTE_POWER_QUERY_CAPS_LIST );if (ret <0 )RTE_LOG (ERR ,CHANNEL_MONITOR ,"Error during sending capabilities.\n" ); }
examples/vm_power_manager/channel_monitor.h +3 -3
@@ -19,10 +19,10 @@ struct core_share {struct policy {struct rte_power_channel_packet pkt; -uint32_t pfid[MAX_VFS ]; -uint32_t port[MAX_VFS ]; +uint32_t pfid[RTE_POWER_MAX_VFS ]; +uint32_t port[RTE_POWER_MAX_VFS ];unsigned int enabled; -struct core_share core_share[MAX_VCPU_PER_VM ]; +struct core_share core_share[RTE_POWER_MAX_VCPU_PER_VM ]; };#ifdef __cplusplus
examples/vm_power_manager/guest_cli/main.c +18 -11
@@ -50,8 +50,8 @@ parse_args(int argc, char **argv) };struct rte_power_channel_packet *policy;unsigned short int hours[MAX_HOURS ]; -unsigned short int cores[MAX_VCPU_PER_VM ]; -unsigned short int ports[MAX_VCPU_PER_VM ]; +unsigned short int cores[RTE_POWER_MAX_VCPU_PER_VM ]; +unsigned short int ports[RTE_POWER_MAX_VCPU_PER_VM ];int i, cnt, idx; policy =get_policy ();
@@ -69,7 +69,8 @@ parse_args(int argc, char **argv)switch (opt) {/* portmask */ case 'n' : -strlcpy (policy->vm_name, optarg,VM_MAX_NAME_SZ ); +strlcpy (policy->vm_name, optarg, +RTE_POWER_VM_MAX_NAME_SZ );printf ("Setting VM Name to [%s]\n" , policy->vm_name);break ;case 'b' :
@@ -97,14 +98,15 @@ parse_args(int argc, char **argv) }break ;case 'l' : - cnt =parse_set (optarg, cores,MAX_VCPU_PER_VM ); + cnt =parse_set (optarg, cores, +RTE_POWER_MAX_VCPU_PER_VM );if (cnt <0 ) {printf ("Invalid value passed to vcpu-list - [%s]\n" , optarg);break ; } idx =0 ; -for (i =0 ; i <MAX_VCPU_PER_VM ; i++) { +for (i =0 ; i <RTE_POWER_MAX_VCPU_PER_VM ; i++) {if (cores[i]) {printf ("***Using core %d\n" , i); policy->vcpu_to_control[idx++] = i;
@@ -114,14 +116,15 @@ parse_args(int argc, char **argv)printf ("Total cores: %d\n" , idx);break ;case 'p' : - cnt =parse_set (optarg, ports,MAX_VCPU_PER_VM ); + cnt =parse_set (optarg, ports, +RTE_POWER_MAX_VCPU_PER_VM );if (cnt <0 ) {printf ("Invalid value passed to port-list - [%s]\n" , optarg);break ; } idx =0 ; -for (i =0 ; i <MAX_VCPU_PER_VM ; i++) { +for (i =0 ; i <RTE_POWER_MAX_VCPU_PER_VM ; i++) {if (ports[i]) {printf ("***Using port %d\n" , i);if (set_policy_mac (i, idx++) !=0 ) {
@@ -135,13 +138,17 @@ parse_args(int argc, char **argv)break ;case 'o' :if (!strcmp (optarg,"TRAFFIC" )) - policy->policy_to_use =TRAFFIC ; + policy->policy_to_use = +RTE_POWER_POLICY_TRAFFIC ;else if (!strcmp (optarg,"TIME" )) - policy->policy_to_use =TIME ; + policy->policy_to_use = +RTE_POWER_POLICY_TIME ;else if (!strcmp (optarg,"WORKLOAD" )) - policy->policy_to_use =WORKLOAD ; + policy->policy_to_use = +RTE_POWER_POLICY_WORKLOAD ;else if (!strcmp (optarg,"BRANCH_RATIO" )) - policy->policy_to_use =BRANCH_RATIO ; + policy->policy_to_use = +RTE_POWER_POLICY_BRANCH_RATIO ;else {printf ("Invalid policy specified: %s\n" , optarg);
examples/vm_power_manager/guest_cli/vm_power_cli_guest.c +14 -14
@@ -103,10 +103,10 @@ set_policy_defaults(struct rte_power_channel_packet *pkt) pkt->timer_policy.hours_to_use_traffic_profile[0 ] =8 ; pkt->timer_policy.hours_to_use_traffic_profile[1 ] =10 ; - pkt->core_type =CORE_TYPE_VIRTUAL ; - pkt->workload =LOW ; - pkt->policy_to_use =TIME ; - pkt->command =PKT_POLICY ; + pkt->core_type =RTE_POWER_CORE_TYPE_VIRTUAL ; + pkt->workload =RTE_POWER_WL_LOW ; + pkt->policy_to_use =RTE_POWER_POLICY_TIME ; + pkt->command =RTE_POWER_PKT_POLICY ;strlcpy (pkt->vm_name,"ubuntu2" ,sizeof (pkt->vm_name));return 0 ;
@@ -169,7 +169,7 @@ receive_freq_list(struct rte_power_channel_packet_freq_list *pkt_freq_list,RTE_LOG (ERR ,GUEST_CLI ,"Error receiving message.\n" );return -1 ; } -if (pkt_freq_list->command !=CPU_POWER_FREQ_LIST ) { +if (pkt_freq_list->command !=RTE_POWER_FREQ_LIST ) {RTE_LOG (ERR ,GUEST_CLI ,"Unexpected message received.\n" );return -1 ; }
@@ -203,18 +203,18 @@ cmd_query_freq_list_parsed(void *parsed_result,return ; } - pkt.command =CPU_POWER_QUERY_FREQ_LIST ; + pkt.command =RTE_POWER_QUERY_FREQ_LIST ;strlcpy (pkt.vm_name, policy.vm_name,sizeof (pkt.vm_name)); query_list = true; }else { errno =0 ; lcore_id = (unsigned int )strtol (res->cpu_num, &ep,10 ); -if (errno !=0 || lcore_id >=MAX_VCPU_PER_VM || +if (errno !=0 || lcore_id >=RTE_POWER_MAX_VCPU_PER_VM || ep == res->cpu_num) {cmdline_printf (cl,"Invalid parameter provided.\n" );return ; } - pkt.command =CPU_POWER_QUERY_FREQ ; + pkt.command =RTE_POWER_QUERY_FREQ ;strlcpy (pkt.vm_name, policy.vm_name,sizeof (pkt.vm_name)); pkt.resource_id = lcore_id; }
@@ -279,7 +279,7 @@ receive_capabilities(struct rte_power_channel_packet_caps_list *pkt_caps_list,RTE_LOG (ERR ,GUEST_CLI ,"Error receiving message.\n" );return -1 ; } -if (pkt_caps_list->command !=CPU_POWER_CAPS_LIST ) { +if (pkt_caps_list->command !=RTE_POWER_CAPS_LIST ) {RTE_LOG (ERR ,GUEST_CLI ,"Unexpected message received.\n" );return -1 ; }
@@ -313,18 +313,18 @@ cmd_query_caps_list_parsed(void *parsed_result,return ; } - pkt.command =CPU_POWER_QUERY_CAPS_LIST ; + pkt.command =RTE_POWER_QUERY_CAPS_LIST ;strlcpy (pkt.vm_name, policy.vm_name,sizeof (pkt.vm_name)); query_list = true; }else { errno =0 ; lcore_id = (unsigned int )strtol (res->cpu_num, &ep,10 ); -if (errno !=0 || lcore_id >=MAX_VCPU_PER_VM || +if (errno !=0 || lcore_id >=RTE_POWER_MAX_VCPU_PER_VM || ep == res->cpu_num) {cmdline_printf (cl,"Invalid parameter provided.\n" );return ; } - pkt.command =CPU_POWER_QUERY_CAPS ; + pkt.command =RTE_POWER_QUERY_CAPS ;strlcpy (pkt.vm_name, policy.vm_name,sizeof (pkt.vm_name)); pkt.resource_id = lcore_id; }
@@ -388,10 +388,10 @@ check_response_cmd(unsigned int lcore_id, int *result)return -1 ;switch (pkt.command) { -case (CPU_POWER_CMD_ACK ): +case (RTE_POWER_CMD_ACK ): *result =1 ;break ; -case (CPU_POWER_CMD_NACK ): +case (RTE_POWER_CMD_NACK ): *result =0 ;break ;default :
examples/vm_power_manager/main.c +1 -1
@@ -394,7 +394,7 @@ main(int argc, char **argv)"Cannot init port %" PRIu8"\n" , portid); -for (w =0 ; w <MAX_VFS ; w++) { +for (w =0 ; w <RTE_POWER_MAX_VFS ; w++) { eth.addr_bytes[5 ] = w +0xf0 ; ret = -ENOTSUP ;
lib/librte_power/guest_channel.c +1 -1
@@ -100,7 +100,7 @@ guest_channel_host_connect(const char *path, unsigned int lcore_id)/* Send a test packet, this command is ignored by the host, but a successful * send indicates that the host endpoint is monitoring. */ - pkt.command =CPU_POWER_CONNECT ; + pkt.command =RTE_POWER_CPU_POWER_CONNECT ; global_fds[lcore_id] = fd; ret =guest_channel_send_msg (&pkt, lcore_id);if (ret !=0 ) {
lib/librte_power/power_kvm_vm.c +7 -7
@@ -29,7 +29,7 @@ power_kvm_vm_init(unsigned int lcore_id) lcore_id, RTE_MAX_LCORE-1);return -1 ; } - pkt[lcore_id].command =CPU_POWER ; + pkt[lcore_id].command =RTE_POWER_CPU_POWER ; pkt[lcore_id].resource_id = lcore_id;return guest_channel_host_connect (FD_PATH , lcore_id); }
@@ -90,25 +90,25 @@ send_msg(unsigned int lcore_id, uint32_t scale_direction)int power_kvm_vm_freq_up (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_SCALE_UP ); +return send_msg (lcore_id,RTE_POWER_SCALE_UP ); }int power_kvm_vm_freq_down (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_SCALE_DOWN ); +return send_msg (lcore_id,RTE_POWER_SCALE_DOWN ); }int power_kvm_vm_freq_max (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_SCALE_MAX ); +return send_msg (lcore_id,RTE_POWER_SCALE_MAX ); }int power_kvm_vm_freq_min (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_SCALE_MIN ); +return send_msg (lcore_id,RTE_POWER_SCALE_MIN ); }int
@@ -121,13 +121,13 @@ power_kvm_vm_turbo_status(__rte_unused unsigned int lcore_id)int power_kvm_vm_enable_turbo (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_ENABLE_TURBO ); +return send_msg (lcore_id,RTE_POWER_ENABLE_TURBO ); }int power_kvm_vm_disable_turbo (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_DISABLE_TURBO ); +return send_msg (lcore_id,RTE_POWER_DISABLE_TURBO ); }struct rte_power_core_capabilities ;
lib/librte_power/rte_power_guest_channel.h +50 -48
144 lines not on this page · raw message
Signature · 1 line
2.17.1
Re: [dpdk-dev] [PATCH v4 4/6] power: rename defines
Quoted 11 lines · David Hunt
From: Bruce Richardson <[email protected]>
Rename the #defines to have an
RTE_POWER_prefixFixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>---
Signature · 2 lines
Thanks, Anatoly
PATCH v4 5/6 power: add new header file to export list
In reply to David HuntFrom: Bruce Richardson <[email protected]>
Adjust meson.build so that 'ninja install' copies the new header file into the installation directory.
--- lib/librte_power/meson.build | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
lib/librte_power/meson.build +2 -1
@@ -10,5 +10,6 @@ sources = files('rte_power.c', 'power_acpi_cpufreq.c', 'rte_power_empty_poll.c', 'power_pstate_cpufreq.c', 'power_common.c') -headers = files('rte_power.h','rte_power_empty_poll.h') +headers = files('rte_power.h','rte_power_empty_poll.h', + 'rte_power_guest_channel.h') deps += ['timer']
Signature · 1 line
2.17.1
Re: [dpdk-dev] [PATCH v4 5/6] power: add new header file to export list
Quoted 5 lines · David Hunt
From: Bruce Richardson <[email protected]>
Adjust meson.build so that 'ninja install' copies the new header file into the installation directory.
Quoted 7 lines
Fixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>---
Signature · 2 lines
Thanks, Anatoly
PATCH v4 6/6 power: clean up includes
In reply to David HuntFrom: Bruce Richardson <[email protected]>
re-organise the including of the new public header file and remove un-needed includes
--- examples/vm_power_manager/channel_manager.c | 1 - examples/vm_power_manager/channel_monitor.c | 1 - examples/vm_power_manager/channel_monitor.h | 2 +- examples/vm_power_manager/guest_cli/vm_power_cli_guest.c | 1 - examples/vm_power_manager/guest_cli/vm_power_cli_guest.h | 2 -- examples/vm_power_manager/vm_power_cli.c | 1 - lib/librte_power/guest_channel.c | 2 +- lib/librte_power/guest_channel.h | 2 -- lib/librte_power/power_kvm_vm.c | 2 +- lib/librte_power/rte_power.h | 1 + lib/librte_power/rte_power_guest_channel.h | 3 --- 11 files changed, 4 insertions(+), 14 deletions(-)
examples/vm_power_manager/channel_manager.c +0 -1
@@ -27,7 +27,6 @@#include <libvirt/libvirt.h> #include "channel_manager.h" -#include "rte_power_guest_channel.h" #include "channel_monitor.h" #include "power_manager.h"
examples/vm_power_manager/channel_monitor.c +0 -1
@@ -35,7 +35,6 @@#include <libvirt/libvirt.h> #include "channel_monitor.h" -#include "rte_power_guest_channel.h" #include "channel_manager.h" #include "power_manager.h" #include "oob_monitor.h"
examples/vm_power_manager/channel_monitor.h +1 -1
@@ -5,8 +5,8 @@ #ifndef CHANNEL_MONITOR_H_ #define CHANNEL_MONITOR_H_ +#include <rte_power.h> #include "channel_manager.h" -#include "rte_power_guest_channel.h" struct core_share { unsigned int pcpu;
examples/vm_power_manager/guest_cli/vm_power_cli_guest.c +0 -1
@@ -19,7 +19,6 @@#include <rte_ethdev.h> #include <rte_power.h> -#include <guest_channel.h> #include "vm_power_cli_guest.h"
examples/vm_power_manager/guest_cli/vm_power_cli_guest.h +0 -2
@@ -9,8 +9,6 @@extern "C" {#endif -#include "rte_power_guest_channel.h" -struct rte_power_channel_packet *get_policy (void );int set_policy_mac (int port,int idx);
examples/vm_power_manager/vm_power_cli.c +0 -1
@@ -21,7 +21,6 @@#include "channel_manager.h" #include "channel_monitor.h" #include "power_manager.h" -#include "rte_power_guest_channel.h" struct cmd_quit_result {cmdline_fixed_string_t quit;
lib/librte_power/guest_channel.c +1 -1
@@ -15,9 +15,9 @@#include <rte_log.h> +#include <rte_power.h> #include "guest_channel.h" -#include "rte_power_guest_channel.h" #define RTE_LOGTYPE_GUEST_CHANNEL RTE_LOGTYPE_USER1
lib/librte_power/guest_channel.h +0 -2
@@ -8,8 +8,6 @@extern "C" {#endif -#include <rte_power_guest_channel.h> -/** * Check if any Virtio-Serial VM end-points exist in path. *
lib/librte_power/power_kvm_vm.c +1 -1
@@ -6,8 +6,8 @@#include <rte_log.h> -#include "guest_channel.h" #include "rte_power_guest_channel.h" +#include "guest_channel.h" #include "power_kvm_vm.h" #include "power_common.h"
lib/librte_power/rte_power.h +1 -0
@@ -14,6 +14,7 @@#include <rte_byteorder.h> #include <rte_log.h> #include <rte_string_fns.h> +#include <rte_power_guest_channel.h> #ifdef __cplusplusextern "C" {
lib/librte_power/rte_power_guest_channel.h +0 -3
@@ -8,9 +8,6 @@extern "C" {#endif -#include <stdint.h> -#include <stdbool.h> -#define RTE_POWER_MAX_VFS 10#define RTE_POWER_VM_MAX_NAME_SZ 32#define RTE_POWER_MAX_VCPU_PER_VM 8
Signature · 1 line
2.17.1
Re: [dpdk-dev] [PATCH v4 6/6] power: clean up includes
Quoted 54 lines · David Hunt
From: Bruce Richardson <[email protected]>
re-organise the including of the new public header file and remove un-needed includes
Fixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>--- examples/vm_power_manager/channel_manager.c | 1 - examples/vm_power_manager/channel_monitor.c | 1 - examples/vm_power_manager/channel_monitor.h | 2 +- examples/vm_power_manager/guest_cli/vm_power_cli_guest.c | 1 - examples/vm_power_manager/guest_cli/vm_power_cli_guest.h | 2 -- examples/vm_power_manager/vm_power_cli.c | 1 - lib/librte_power/guest_channel.c | 2 +- lib/librte_power/guest_channel.h | 2 -- lib/librte_power/power_kvm_vm.c | 2 +- lib/librte_power/rte_power.h | 1 + lib/librte_power/rte_power_guest_channel.h | 3 --- 11 files changed, 4 insertions(+), 14 deletions(-)examples/vm_power_manager/channel_manager.c +0
-1@@ -27,7 +27,6 @@#include <libvirt/libvirt.h> #include "channel_manager.h" -#include "rte_power_guest_channel.h" #include "channel_monitor.h" #include "power_manager.h" examples/vm_power_manager/channel_monitor.c +0
-1@@ -35,7 +35,6 @@#include <libvirt/libvirt.h> #include "channel_monitor.h" -#include "rte_power_guest_channel.h" #include "channel_manager.h" #include "power_manager.h" #include "oob_monitor.h" examples/vm_power_manager/channel_monitor.h +0
-0
examples/vm_power_manager/channel_monitor.h line 9
Quoted 5 lines
examples/vm_power_manager/channel_monitor.h +1
-0@@ -5,8 +5,8 @@#ifndef CHANNEL_MONITOR_H_ #define CHANNEL_MONITOR_H_ +#include <rte_power.h> #include "channel_manager.h"
Should have newline before quoted headers, e.g.
#include <blah>
#include "blah"
Otherwise,
Signature · 2 lines
Thanks, Anatoly
Thomas Monjalon
Applied21/01/2021 18:21, David Hunt:
Quoted 14 lines
The guest channel message definitions and functions in
guest_channel.hare needed by applications and need to be made public.This worked pre-20.11, but now with all the meson/ninja changes, making these apps externally no longer works. To fix, we need to move the header file with the API definitions for the channel commands public, and rename the functions accordingly.
The main change is to rename
channel_commands.htorte_power_guest_channel.hso that it gets picked up by the installer and copied to/usr/local/include. Other changes include renaming #defines to haveRTE_at the beginning instead ofCPU_. Finally we refactor the code to work with those changes.
Quoted 11 lines
---
v2 changes
- re-worked from monolithic patch to a 6 patch patchset for easier review
v3 changes
- Ensure both functions added to the API are tagged as experimental
v4 changes
- add @internal tag on 2 functions for Doxygen
- add @warning EXPERIMENTAL tag on 2 functions for Doxygen
- improve description of lcore param in API docs
- Improve maintainability sizeof's
- add the 2 added functions to the version.map file
Applied, thanks for the clean-up.
PATCH 1/1 power: remove duplicated symbols from map file
In reply to David HuntThis is also causing build error, like:
https://travis-ci.com/github/ovsrobot/dpdk/jobs/482121104
Also '@internal' marker removed from doxygen comment, since public API should not be internal.
---
Cc: Aaron Conole <[email protected]>
Cc: Bruce Richardson <[email protected]>
Cc: David Marchand <[email protected]>
Cc: Anatoly Burakov <[email protected]>
Cc: Juraj Linkeš <[email protected]>
--- lib/librte_power/rte_power_guest_channel.h | 4 ---- lib/librte_power/version.map | 2 -- 2 files changed, 6 deletions(-)
lib/librte_power/rte_power_guest_channel.h +0 -4
@@ -119,8 +119,6 @@ struct rte_power_channel_packet_caps_list { };/** -* @internal -* * @warning * @b EXPERIMENTAL: this API may change without prior notice. *
@@ -141,8 +139,6 @@ int rte_power_guest_channel_send_msg(struct rte_power_channel_packet *pkt, unsigned int lcore_id);/** -* @internal -* * @warning * @b EXPERIMENTAL: this API may change without prior notice. *
lib/librte_power/version.map +0 -2
@@ -12,7 +12,6 @@ DPDK_21 { rte_power_get_capabilities; rte_power_get_env; rte_power_get_freq; - rte_power_guest_channel_send_msg; rte_power_init; rte_power_set_env; rte_power_set_freq;
@@ -31,7 +30,6 @@ EXPERIMENTAL { rte_power_empty_poll_stat_free; rte_power_empty_poll_stat_init; rte_power_empty_poll_stat_update; - rte_power_guest_channel_receive_msg; rte_power_poll_stat_fetch; rte_power_poll_stat_update;
Signature · 1 line
2.29.2
Re: [dpdk-dev] [PATCH] power: remove duplicated symbols from map file
Hello Ferruh,
Quoted 49 lines · Ferruh Yigit
This is also causing build error, like:
https://travis-ci.com/github/ovsrobot/dpdk/jobs/482121104Also '@internal' marker removed from doxygen comment, since public API should not be internal.
Fixes 4d3892dcd77b ("power: make channel message functions public")Signed-off-by Ferruh Yigit <[email protected]>---
Cc: Aaron Conole <[email protected]>
Cc: Bruce Richardson <[email protected]>
Cc: David Marchand <[email protected]>
Cc: Anatoly Burakov <[email protected]>
Cc: Juraj Linkeš <[email protected]>--- lib/librte_power/rte_power_guest_channel.h | 4 ---- lib/librte_power/version.map | 2 -- 2 files changed, 6 deletions(-)lib/librte_power/rte_power_guest_channel.h +0
-4@@ -119,8 +119,6 @@ struct rte_power_channel_packet_caps_list { };/** -* @internal -* * @warning * @b EXPERIMENTAL: this API may change without prior notice. * @@ -141,8 +139,6 @@ int rte_power_guest_channel_send_msg(struct rte_power_channel_packet *pkt, unsigned int lcore_id);/** -* @internal -* * @warning * @b EXPERIMENTAL: this API may change without prior notice. * lib/librte_power/version.map +0
-0
lib/librte_power/version.map DPDK_21 { · line 15
Quoted 4 lines
lib/librte_power/version.map +0
-1@@ -12,7 +12,6 @@ DPDK_21 { rte_power_get_capabilities; rte_power_get_env; rte_power_get_freq; - rte_power_guest_channel_send_msg;
This symbol was marked stable so far.
Did I miss something?
I would just remove the experimental tagging for this symbol which is incorrect in v21.02.
Something like:
(quoted diff) +0 -0
b/lib/librte_power/rte_power_guest_channel.h
index ed4fbfdcd3..b5de1bd243 100644
lib/librte_power/rte_power_guest_channel.h +0 -8
@@ -119,11 +119,6 @@ struct rte_power_channel_packet_caps_list { };/** -* @internal -* -* @warning -* @b EXPERIMENTAL: this API may change without prior notice. -* * Send a message contained in pkt over the Virtio-Serial to the host endpoint. * * @param pkt
@@ -136,13 +131,10 @@ struct rte_power_channel_packet_caps_list {* - 0 on success. * - Negative on error. */ -__rte_experimental int rte_power_guest_channel_send_msg (struct rte_power_channel_packet *pkt,unsigned int lcore_id);/** -* @internal -* * @warning * @b EXPERIMENTAL: this API may change without prior notice. *
lib/librte_power/version.map +0 -2
@@ -38,6 +38,4 @@ EXPERIMENTAL { # added in 21.02 rte_power_ethdev_pmgmt_queue_disable; rte_power_ethdev_pmgmt_queue_enable; - rte_power_guest_channel_receive_msg; - rte_power_guest_channel_send_msg; };
Sidenote, we can probably catch these duplicates during build. For duplicate entries with the same version, this is easy. I'll see if I can catch the other case too.
--
David Marchand
Re: [dpdk-dev] [PATCH] power: remove duplicated symbols from map file
Quoted 53 lines · David Marchand
Hello Ferruh,
Quoted 50 lines · Ferruh Yigit
This is also causing build error, like:
https://travis-ci.com/github/ovsrobot/dpdk/jobs/482121104Also '@internal' marker removed from doxygen comment, since public API should not be internal.
Fixes 4d3892dcd77b ("power: make channel message functions public")Signed-off-by Ferruh Yigit <[email protected]>---
Cc: Aaron Conole <[email protected]>
Cc: Bruce Richardson <[email protected]>
Cc: David Marchand <[email protected]>
Cc: Anatoly Burakov <[email protected]>
Cc: Juraj Linkeš <[email protected]>--- lib/librte_power/rte_power_guest_channel.h | 4 ---- lib/librte_power/version.map | 2 -- 2 files changed, 6 deletions(-)lib/librte_power/rte_power_guest_channel.h +0
-4@@ -119,8 +119,6 @@ struct rte_power_channel_packet_caps_list { };/** -* @internal -* * @warning * @b EXPERIMENTAL: this API may change without prior notice. * @@ -141,8 +139,6 @@ int rte_power_guest_channel_send_msg(struct rte_power_channel_packet *pkt, unsigned int lcore_id);/** -* @internal -* * @warning * @b EXPERIMENTAL: this API may change without prior notice. * lib/librte_power/version.map +0
-0@@ -12,7 +12,6 @@ DPDK_21 { rte_power_get_capabilities;
Quoted 9 lines
lib/librte_power/version.map DPDK_21 { · line 15
Quoted 3 lines
lib/librte_power/version.map +0
-1rte_power_get_env; rte_power_get_freq; - rte_power_guest_channel_send_msg;This symbol was marked stable so far.
Did I miss something?
I would just remove the experimental tagging for this symbol which is incorrect in v21.02.
You are right,
The header that has the declares the API was not public before the v21.02, so I assumed the symbol is internal and added to the stable section by mistake, but the intention seems to have it as public API.
I will keep the 'rte_power_guest_channel_send_msg' API, but 'rte_power_guest_channel_receive_msg' is already experimental, so will keep it as it is.
Quoted 46 lines
Something like:
lib/librte_power/rte_power_guest_channel.h +0
-8@@ -119,11 +119,6 @@ struct rte_power_channel_packet_caps_list { };/** -* @internal -* -* @warning -* @b EXPERIMENTAL: this API may change without prior notice. -* * Send a message contained in pkt over the Virtio-Serial to the host endpoint. * * @param pkt @@ -136,13 +131,10 @@ struct rte_power_channel_packet_caps_list {* - 0 on success. * - Negative on error. */ -__rte_experimental int rte_power_guest_channel_send_msg (struct rte_power_channel_packet *pkt,unsigned int lcore_id);/** -* @internal -* * @warning * @b EXPERIMENTAL: this API may change without prior notice. * lib/librte_power/version.map +0
-2@@ -38,6 +38,4 @@ EXPERIMENTAL { # added in 21.02 rte_power_ethdev_pmgmt_queue_disable; rte_power_ethdev_pmgmt_queue_enable; - rte_power_guest_channel_receive_msg; - rte_power_guest_channel_send_msg; };
Quoted 4 lines
Sidenote, we can probably catch these duplicates during build. For duplicate entries with the same version, this is easy. I'll see if I can catch the other case too.
Wasn't there a script for it already, I slightly remember it but not sure, cc'ed Thomas, perhaps he remembers.
Re: [dpdk-dev] [PATCH] power: remove duplicated symbols from map file
Quoted 7 lines · Ferruh Yigit
Quoted 4 lines
Sidenote, we can probably catch these duplicates during build. For duplicate entries with the same version, this is easy. I'll see if I can catch the other case too.
Wasn't there a script for it already, I slightly remember it but not sure, cc'ed Thomas, perhaps he remembers.
Yes, and the patch is ready, will send later.
Signature · 1 line
David Marchand
PATCH v2 1/1 power: remove duplicated symbols from map file
In reply to Ferruh YigitThis is causing build error, like:
https://travis-ci.com/github/ovsrobot/dpdk/jobs/482121104
Also '@internal' marker removed from doxygen comment, since public API should not be internal.
Experimental tag removed from 'rte_power_guest_channel_send_msg()'
---
Cc: Aaron Conole <[email protected]>
Cc: Bruce Richardson <[email protected]>
Cc: David Marchand <[email protected]>
Cc: Anatoly Burakov <[email protected]>
Cc: Juraj Linkeš <[email protected]>
v2:
* Keep old symbols, remove the ones added in 21.02
--- lib/librte_power/rte_power_guest_channel.h | 8 -------- lib/librte_power/version.map | 2 -- 2 files changed, 10 deletions(-)
lib/librte_power/rte_power_guest_channel.h +0 -8
@@ -119,11 +119,6 @@ struct rte_power_channel_packet_caps_list { };/** -* @internal -* -* @warning -* @b EXPERIMENTAL: this API may change without prior notice. -* * Send a message contained in pkt over the Virtio-Serial to the host endpoint. * * @param pkt
@@ -136,13 +131,10 @@ struct rte_power_channel_packet_caps_list {* - 0 on success. * - Negative on error. */ -__rte_experimental int rte_power_guest_channel_send_msg (struct rte_power_channel_packet *pkt,unsigned int lcore_id);/** -* @internal -* * @warning * @b EXPERIMENTAL: this API may change without prior notice. *
lib/librte_power/version.map +0 -2
@@ -38,6 +38,4 @@ EXPERIMENTAL { # added in 21.02 rte_power_ethdev_pmgmt_queue_disable; rte_power_ethdev_pmgmt_queue_enable; - rte_power_guest_channel_receive_msg; - rte_power_guest_channel_send_msg; };
Signature · 1 line
2.29.2
Re: [dpdk-dev] [PATCH v2] power: remove duplicated symbols from map file
Quoted 4 lines · Ferruh Yigit
This is causing build error, like:
https://travis-ci.com/github/ovsrobot/dpdk/jobs/482121104
Quoted 8 lines
Also '@internal' marker removed from doxygen comment, since public API should not be internal.
Experimental tag removed from 'rte_power_guest_channel_send_msg()'Fixes 4d3892dcd77b ("power: make channel message functions public")Signed-off-by Ferruh Yigit <[email protected]>
Signature · 1 line
David Marchand
David Marchand
AppliedRe: [dpdk-dev] [PATCH v2] power: remove duplicated symbols from map file
Quoted 10 lines · David Marchand
Quoted 8 lines · Ferruh Yigit
This is causing build error, like:
https://travis-ci.com/github/ovsrobot/dpdk/jobs/482121104Also '@internal' marker removed from doxygen comment, since public API should not be internal.
Experimental tag removed from 'rte_power_guest_channel_send_msg()'
Quoted 6 lines
Quoted 4 lines
Fixes 4d3892dcd77b ("power: make channel message functions public")Signed-off-by Ferruh Yigit <[email protected]>Reviewed-by David Marchand <[email protected]>
Applied, thanks Ferruh.
Hopefully, with the update to Graviton2, Travis jobs will run fine now.
Signature · 1 line
David Marchand
PATCH v3 2/6 power: make channel msg functions public
In reply to David HuntFrom: Bruce Richardson <[email protected]>
Move the 2 public functions into rte_power_guest_channel.h
---
changes in v3
* Mark both added functions as experimental
--- lib/librte_power/guest_channel.h | 40 +--------------------- lib/librte_power/rte_power_guest_channel.h | 40 ++++++++++++++++++++++ 2 files changed, 41 insertions(+), 39 deletions(-)
lib/librte_power/guest_channel.h +1 -39
@@ -65,21 +65,7 @@ void guest_channel_host_disconnect(unsigned int lcore_id);*/ int guest_channel_send_msg (struct channel_packet *pkt,unsigned int lcore_id); -/** -* Send a message contained in pkt over the Virtio-Serial to the host endpoint. -* -* @param pkt -* Pointer to a populated struct channel_packet -* -* @param lcore_id -* lcore_id. -* -* @return -* - 0 on success. -* - Negative on error. -*/ -int rte_power_guest_channel_send_msg (struct channel_packet *pkt, -unsigned int lcore_id); +/** * Read a message contained in pkt over the Virtio-Serial
@@ -103,30 +89,6 @@ int power_guest_channel_read_msg(void *pkt,size_t pkt_len, unsigned int lcore_id); -/** -* Receive a message contained in pkt over the Virtio-Serial -* from the host endpoint. -* -* @param pkt -* Pointer to channel_packet or -* channel_packet_freq_list struct. -* -* @param pkt_len -* Size of expected data packet. -* -* @param lcore_id -* lcore_id. -* -* @return -* - 0 on success. -* - Negative on error. -*/ -__rte_experimental -int -rte_power_guest_channel_receive_msg (void *pkt, -size_t pkt_len, -unsigned int lcore_id); - #ifdef __cplusplus }
lib/librte_power/rte_power_guest_channel.h +40 -0
@@ -116,6 +116,46 @@ struct channel_packet_caps_list {uint8_t num_vcpu; }; +/** +* Send a message contained in pkt over the Virtio-Serial to the host endpoint. +* +* @param pkt +* Pointer to a populated struct channel_packet +* +* @param lcore_id +* lcore_id. +* +* @return +* - 0 on success. +* - Negative on error. +*/ +__rte_experimental +int rte_power_guest_channel_send_msg(struct channel_packet *pkt, +unsigned int lcore_id); + +/** +* Receive a message contained in pkt over the Virtio-Serial +* from the host endpoint. +* +* @param pkt +* Pointer to channel_packet or +* channel_packet_freq_list struct. +* +* @param pkt_len +* Size of expected data packet. +* +* @param lcore_id +* lcore_id. +* +* @return +* - 0 on success. +* - Negative on error. +*/ +__rte_experimental +int rte_power_guest_channel_receive_msg(void *pkt, +size_t pkt_len, +unsigned int lcore_id); + #ifdef __cplusplus }
Signature · 1 line
2.17.1
Re: [dpdk-dev] [PATCH v3 2/6] power: make channel msg functions public
Quoted 12 lines · David Hunt
From: Bruce Richardson <[email protected]>
Move the 2 public functions into
rte_power_guest_channel.hFixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>---
<snip>
Quoted 9 lines
+/**
+ * Send a message contained in pkt over the Virtio-Serial to the host endpoint.
+ *
+ * @param pkt
+ * Pointer to a populated structchannel_packet
+ *
+ * @paramlcore_id
+ *lcore_id.
Not very informative doxygen comment :)
lib/librte_power/rte_power_guest_channel.h struct channel_packet_caps_list { · line 139
Quoted 13 lines
+ *
+ * @return
+ * - 0 on success.
+ * - Negative on error.
+ */lib/librte_power/rte_power_guest_channel.h +8
-0+__rte_experimental +int rte_power_guest_channel_send_msg(struct channel_packet *pkt, +unsigned int lcore_id); + +/** +* Receive a message contained in pkt over the Virtio-Serial +* from the host endpoint. +*
Nitpick, but we generally add a warning to experimental functions, like so:
* @warning
* @b EXPERIMENTAL: this API may change, or be removed, without prior
notice.
also, presumably this is not meant to be public API and exists solely because there's no other way to do it without significant rework, so maybe mark as @internal too?
Quoted 23 lines
+ * @param pkt
+ * Pointer tochannel_packetor
+ *channel_packet_freq_liststruct.
+ *
+ * @parampkt_len
+ * Size of expected data packet.
+ *
+ * @paramlcore_id
+ *lcore_id.
+ *
+ * @return
+ * - 0 on success.
+ * - Negative on error.
+ */lib/librte_power/rte_power_guest_channel.h +5
-0+__rte_experimental +int rte_power_guest_channel_receive_msg(void *pkt, +size_t pkt_len, +unsigned int lcore_id); + #ifdef __cplusplus }
Signature · 2 lines
Thanks, Anatoly
Re: [dpdk-dev] [PATCH v3 2/6] power: make channel msg functions public
Quoted 26 lines · Anatoly
Quoted 12 lines · David Hunt
From: Bruce Richardson <[email protected]>
Move the 2 public functions into
rte_power_guest_channel.hFixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>---
<snip>
Quoted 9 lines
+/**
+ * Send a message contained in pkt over the Virtio-Serial to the host endpoint.
+ *
+ * @param pkt
+ * Pointer to a populated structchannel_packet
+ *
+ * @paramlcore_id
+ *lcore_id.
Quoted 1 line
Not very informative doxygen comment :)
Maybe "Use channel specific to this lcore_id"?
Quoted 17 lines
Quoted 6 lines
+ *
+ * @return
+ * - 0 on success.
+ * - Negative on error.
+ */lib/librte_power/rte_power_guest_channel.h struct channel_packet_caps_list { · line 139
Quoted 8 lines
lib/librte_power/rte_power_guest_channel.h +8
-0+__rte_experimental +int rte_power_guest_channel_send_msg(struct channel_packet *pkt, + unsigned int lcore_id); + +/** +* Receive a message contained in pkt over the Virtio-Serial +* from the host endpoint. +* Nitpick, but we generally add a warning to experimental functions, like so:
Quoted 5 lines
* @warning
* @b EXPERIMENTAL: this API may change, or be removed, without prior notice.also, presumably this is not meant to be public API and exists solely because there's no other way to do it without significant rework, so maybe mark as @internal too?
Yes, I believe so. I will add @internal.
Quoted 9 lines
Quoted 9 lines
+ * @param pkt
+ * Pointer tochannel_packetor
+ *channel_packet_freq_liststruct.
+ *
+ * @parampkt_len
+ * Size of expected data packet.
+ *
+ * @paramlcore_id
+ *lcore_id.
Same here.
Quoted 15 lines
Quoted 13 lines
+ *
+ * @return
+ * - 0 on success.
+ * - Negative on error.
+ */lib/librte_power/rte_power_guest_channel.h +5
-0+__rte_experimental +int rte_power_guest_channel_receive_msg(void *pkt, + size_t pkt_len, + unsigned int lcore_id); +#ifdef
__cplusplus
}
Re: [dpdk-dev] [PATCH v3 2/6] power: make channel msg functions public
Quoted 28 lines · David Hunt
Quoted 26 lines · Anatoly
Quoted 12 lines · David Hunt
From: Bruce Richardson <[email protected]>
Move the 2 public functions into
rte_power_guest_channel.hFixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>---
<snip>
Quoted 9 lines
+/**
+ * Send a message contained in pkt over the Virtio-Serial to the host endpoint.
+ *
+ * @param pkt
+ * Pointer to a populated structchannel_packet
+ *
+ * @paramlcore_id
+ *lcore_id.
Quoted 5 lines
Quoted 1 line
Not very informative doxygen comment :)
Maybe "Use channel specific to this
lcore_id"?
Something like that, yes. Or, "Use channel associated with this lcore ID".
Signature · 2 lines
Thanks, Anatoly
PATCH v3 3/6 power: rename public structs
In reply to David HuntFrom: Bruce Richardson <[email protected]>
rename the public structs to have an rte_power_ prefix.
---
--- examples/vm_power_manager/channel_monitor.c | 33 ++++++------ examples/vm_power_manager/channel_monitor.h | 2 +- examples/vm_power_manager/guest_cli/main.c | 2 +- .../guest_cli/vm_power_cli_guest.c | 40 ++++++++------- .../guest_cli/vm_power_cli_guest.h | 4 +- lib/librte_power/guest_channel.c | 7 +-- lib/librte_power/guest_channel.h | 7 +-- lib/librte_power/power_kvm_vm.c | 2 +- lib/librte_power/rte_power_guest_channel.h | 51 +++++++++---------- 9 files changed, 75 insertions(+), 73 deletions(-)
examples/vm_power_manager/channel_monitor.c +17 -16
@@ -108,7 +108,7 @@ str_to_ether_addr(const char *a, struct rte_ether_addr *ether_addr) }static int -set_policy_mac (struct channel_packet *pkt,int idx,char *mac) +set_policy_mac (struct rte_power_channel_packet *pkt,int idx,char *mac) {union PFID pfid;int ret;
@@ -165,7 +165,7 @@ get_resource_id_from_vmname(const char *vm_name) }static int -parse_json_to_pkt (json_t *element,struct channel_packet *pkt, +parse_json_to_pkt (json_t *element,struct rte_power_channel_packet *pkt,const char *vm_name) {const char *key;
@@ -173,7 +173,7 @@ parse_json_to_pkt(json_t *element, struct channel_packet *pkt,int ret;int resource_id; -memset (pkt,0 ,sizeof (struct channel_packet )); +memset (pkt,0 ,sizeof (struct rte_power_channel_packet )); pkt->nb_mac_to_monitor =0 ; pkt->t_boost_status.tbEnabled = false;
@@ -463,7 +463,7 @@ get_pfid(struct policy *pol) }static int -update_policy (struct channel_packet *pkt) +update_policy (struct rte_power_channel_packet *pkt) {unsigned int updated =0 ;
@@ -512,7 +512,7 @@ update_policy(struct channel_packet *pkt) }static int -remove_policy(struct channel_packet *pkt __rte_unused) +remove_policy(struct rte_power_channel_packet *pkt __rte_unused) {unsigned int i;
@@ -673,7 +673,7 @@ static void apply_policy(struct policy *pol) { -struct channel_packet *pkt = &pol->pkt; +struct rte_power_channel_packet *pkt = &pol->pkt;/*Check policy to use*/ if (pkt->policy_to_use ==TRAFFIC )
@@ -715,12 +715,12 @@ write_binary_packet(void *buffer, }static int -send_freq (struct channel_packet *pkt, +send_freq (struct rte_power_channel_packet *pkt,struct channel_info *chan_info,bool freq_list) {unsigned int vcore_id = pkt->resource_id; -struct channel_packet_freq_list channel_pkt_freq_list; +struct rte_power_channel_packet_freq_list channel_pkt_freq_list;struct vm_info info;if (get_info_vm (pkt->vm_name, &info) !=0 )
@@ -751,12 +751,12 @@ send_freq(struct channel_packet *pkt, }static int -send_capabilities (struct channel_packet *pkt, +send_capabilities (struct rte_power_channel_packet *pkt,struct channel_info *chan_info,bool list_requested) {unsigned int vcore_id = pkt->resource_id; -struct channel_packet_caps_list channel_pkt_caps_list; +struct rte_power_channel_packet_caps_list channel_pkt_caps_list;struct vm_info info;struct rte_power_core_capabilities caps;int ret;
@@ -805,18 +805,19 @@ send_capabilities(struct channel_packet *pkt, }static int -send_ack_for_received_cmd (struct channel_packet *pkt, +send_ack_for_received_cmd (struct rte_power_channel_packet *pkt,struct channel_info *chan_info,uint32_t command) { pkt->command = command;return write_binary_packet (pkt, -sizeof (struct channel_packet ), +sizeof (struct rte_power_channel_packet ), chan_info); }static int -process_request (struct channel_packet *pkt,struct channel_info *chan_info) +process_request (struct rte_power_channel_packet *pkt, +struct channel_info *chan_info) {int ret;
@@ -988,7 +989,7 @@ channel_monitor_init(void)static void read_binary_packet (struct channel_info *chan_info) { -struct channel_packet pkt; +struct rte_power_channel_packet pkt;void *buffer = &pkt;int buffer_len =sizeof (pkt);int n_bytes, err =0 ;
@@ -1019,7 +1020,7 @@ read_binary_packet(struct channel_info *chan_info)static void read_json_packet (struct channel_info *chan_info) { -struct channel_packet pkt; +struct rte_power_channel_packet pkt;int n_bytes, ret;json_t *root;json_error_t error;
@@ -1063,7 +1064,7 @@ read_json_packet(struct channel_info *chan_info)/* * Because our data is now in the json * object, we can overwrite the pkt -* with a channel_packet struct, using +* with a rte_power_channel_packet struct, using * parse_json_to_pkt() */ ret =parse_json_to_pkt (root, &pkt, resource_name);
examples/vm_power_manager/channel_monitor.h +1 -1
@@ -18,7 +18,7 @@ struct core_share { };struct policy { -struct channel_packet pkt; +struct rte_power_channel_packet pkt;uint32_t pfid[MAX_VFS ];uint32_t port[MAX_VFS ];unsigned int enabled;
examples/vm_power_manager/guest_cli/main.c +1 -1
@@ -48,7 +48,7 @@ parse_args(int argc, char **argv) { "policy", required_argument, 0, 'o'}, {NULL, 0, 0, 0} }; -struct channel_packet *policy; +struct rte_power_channel_packet *policy;unsigned short int hours[MAX_HOURS ];unsigned short int cores[MAX_VCPU_PER_VM ];unsigned short int ports[MAX_VCPU_PER_VM ];
examples/vm_power_manager/guest_cli/vm_power_cli_guest.c +21 -19
@@ -38,9 +38,9 @@ union PFID {uint64_t pfid; }; -static struct channel_packet policy; +static struct rte_power_channel_packet policy; -struct channel_packet * +struct rte_power_channel_packet *get_policy (void ) {return &policy;
@@ -49,7 +49,7 @@ get_policy(void)int set_policy_mac (int port,int idx) { -struct channel_packet *policy; +struct rte_power_channel_packet *policy;union PFID pfid;int ret;
@@ -73,7 +73,7 @@ set_policy_mac(int port, int idx) }int -set_policy_defaults (struct channel_packet *pkt) +set_policy_defaults (struct rte_power_channel_packet *pkt) {int ret;
@@ -145,7 +145,7 @@ struct cmd_freq_list_result { };static int -query_data (struct channel_packet *pkt,unsigned int lcore_id) +query_data (struct rte_power_channel_packet *pkt,unsigned int lcore_id) {int ret; ret =rte_power_guest_channel_send_msg (pkt, lcore_id);
@@ -157,13 +157,13 @@ query_data(struct channel_packet *pkt, unsigned int lcore_id) }static int -receive_freq_list (struct channel_packet_freq_list *pkt_freq_list, +receive_freq_list (struct rte_power_channel_packet_freq_list *pkt_freq_list,unsigned int lcore_id) {int ret; ret =rte_power_guest_channel_receive_msg (pkt_freq_list, -sizeof (struct channel_packet_freq_list ), +sizeof (struct rte_power_channel_packet_freq_list ), lcore_id);if (ret <0 ) {RTE_LOG (ERR ,GUEST_CLI ,"Error receiving message.\n" );
@@ -183,14 +183,15 @@ cmd_query_freq_list_parsed(void *parsed_result, {struct cmd_freq_list_result *res = parsed_result;unsigned int lcore_id; -struct channel_packet_freq_list pkt_freq_list; -struct channel_packet pkt; +struct rte_power_channel_packet_freq_list pkt_freq_list; +struct rte_power_channel_packet pkt;bool query_list = false;int ret;char *ep; -memset (&pkt,0 ,sizeof (struct channel_packet )); -memset (&pkt_freq_list,0 ,sizeof (struct channel_packet_freq_list )); +memset (&pkt,0 ,sizeof (struct rte_power_channel_packet )); +memset (&pkt_freq_list,0 , +sizeof (struct rte_power_channel_packet_freq_list ));if (!strcmp (res->cpu_num,"all" )) {
@@ -267,13 +268,13 @@ struct cmd_query_caps_result { };static int -receive_capabilities (struct channel_packet_caps_list *pkt_caps_list, +receive_capabilities (struct rte_power_channel_packet_caps_list *pkt_caps_list,unsigned int lcore_id) {int ret; ret =rte_power_guest_channel_receive_msg (pkt_caps_list, -sizeof (struct channel_packet_caps_list ), +sizeof (struct rte_power_channel_packet_caps_list ), lcore_id);if (ret <0 ) {RTE_LOG (ERR ,GUEST_CLI ,"Error receiving message.\n" );
@@ -293,14 +294,15 @@ cmd_query_caps_list_parsed(void *parsed_result, {struct cmd_query_caps_result *res = parsed_result;unsigned int lcore_id; -struct channel_packet_caps_list pkt_caps_list; -struct channel_packet pkt; +struct rte_power_channel_packet_caps_list pkt_caps_list; +struct rte_power_channel_packet pkt;bool query_list = false;int ret;char *ep; -memset (&pkt,0 ,sizeof (struct channel_packet )); -memset (&pkt_caps_list,0 ,sizeof (struct channel_packet_caps_list )); +memset (&pkt,0 ,sizeof (struct rte_power_channel_packet )); +memset (&pkt_caps_list,0 , +sizeof (struct rte_power_channel_packet_caps_list ));if (!strcmp (res->cpu_num,"all" )) {
@@ -380,7 +382,7 @@ cmdline_parse_inst_t cmd_query_caps_list = {static int check_response_cmd (unsigned int lcore_id,int *result) { -struct channel_packet pkt; +struct rte_power_channel_packet pkt;int ret; ret =rte_power_guest_channel_receive_msg (&pkt,sizeof pkt, lcore_id);
@@ -473,7 +475,7 @@ struct cmd_send_policy_result { };static inline int -send_policy (struct channel_packet *pkt,struct cmdline *cl) +send_policy (struct rte_power_channel_packet *pkt,struct cmdline *cl) {int ret;
examples/vm_power_manager/guest_cli/vm_power_cli_guest.h +2 -2
@@ -11,11 +11,11 @@ extern "C" {#include "rte_power_guest_channel.h" -struct channel_packet *get_policy (void ); +struct rte_power_channel_packet *get_policy (void );int set_policy_mac (int port,int idx); -int set_policy_defaults (struct channel_packet *pkt); +int set_policy_defaults (struct rte_power_channel_packet *pkt); void run_cli(__rte_unused void *arg);
lib/librte_power/guest_channel.c +4 -3
@@ -55,7 +55,7 @@ int guest_channel_host_connect(const char *path, unsigned int lcore_id) { int flags, ret; -struct channel_packet pkt; +struct rte_power_channel_packet pkt;char fd_path[PATH_MAX ];int fd =-1 ;
@@ -119,7 +119,8 @@ guest_channel_host_connect(const char *path, unsigned int lcore_id) }int -guest_channel_send_msg (struct channel_packet *pkt,unsigned int lcore_id) +guest_channel_send_msg (struct rte_power_channel_packet *pkt, +unsigned int lcore_id) {int ret, buffer_len =sizeof (*pkt);void *buffer = pkt;
@@ -149,7 +150,7 @@ guest_channel_send_msg(struct channel_packet *pkt, unsigned int lcore_id)return 0 ; } -int rte_power_guest_channel_send_msg (struct channel_packet *pkt, +int rte_power_guest_channel_send_msg (struct rte_power_channel_packet *pkt,unsigned int lcore_id) {return guest_channel_send_msg (pkt, lcore_id);
lib/librte_power/guest_channel.h +4 -3
@@ -63,7 +63,8 @@ void guest_channel_host_disconnect(unsigned int lcore_id);* - Negative on channel not connected. * - errno on write to channel error. */ -int guest_channel_send_msg (struct channel_packet *pkt,unsigned int lcore_id); +int guest_channel_send_msg (struct rte_power_channel_packet *pkt, +unsigned int lcore_id);
@@ -72,8 +73,8 @@ int guest_channel_send_msg(struct channel_packet *pkt, unsigned int lcore_id);* from the host endpoint. * * @param pkt -* Pointer to channel_packet or -* channel_packet_freq_list struct. +* Pointer to rte_power_channel_packet or +* rte_power_channel_packet_freq_list struct. * * @param pkt_len * Size of expected data packet.
lib/librte_power/power_kvm_vm.c +1 -1
@@ -13,7 +13,7 @@#define FD_PATH "/dev/virtio-ports/virtio.serial.port.poweragent" -static struct channel_packet pkt[RTE_MAX_LCORE ]; +static struct rte_power_channel_packet pkt[RTE_MAX_LCORE ];int power_kvm_vm_check_supported (void )
lib/librte_power/rte_power_guest_channel.h +24 -27
109 lines not on this page · raw message
Signature · 1 line
2.17.1
Re: [dpdk-dev] [PATCH v3 3/6] power: rename public structs
Quoted 11 lines · David Hunt
From: Bruce Richardson <[email protected]>
rename the public structs to have an
rte_power_prefix.Fixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>---
<snip>
Quoted 8 lines
RTE_LOG(ERR, GUEST_CLI, "Error receiving message.\n");examples/vm_power_manager/guest_cli/vm_power_cli_guest.c +1
-2@@ -293,14 +294,15 @@ cmd_query_caps_list_parsed(void *parsed_result, {struct cmd_query_caps_result *res = parsed_result;unsigned int lcore_id; -struct channel_packet_caps_list pkt_caps_list; -struct channel_packet pkt; +struct rte_power_channel_packet_caps_list pkt_caps_list;
examples/vm_power_manager/guest_cli/vm_power_cli_guest.c cmd_query_caps_list_parsed(void *parsed_result, · line 305
Quoted 10 lines
examples/vm_power_manager/guest_cli/vm_power_cli_guest.c +4
-2+struct rte_power_channel_packet pkt;bool query_list = false;int ret;char *ep; -memset (&pkt,0 ,sizeof (struct channel_packet )); -memset (&pkt_caps_list,0 ,sizeof (struct channel_packet_caps_list )); +memset (&pkt,0 ,sizeof (struct rte_power_channel_packet )); +memset (&pkt_caps_list,0 , +sizeof (struct rte_power_channel_packet_caps_list ));
Here and in other places where you do sizeof(), you might want to avoid future changes by replacing it with sizeof(*pkt) instead?
Signature · 2 lines
Thanks, Anatoly
Re: [dpdk-dev] [PATCH v3 3/6] power: rename public structs
Quoted 26 lines · Anatoly
Quoted 11 lines · David Hunt
From: Bruce Richardson <[email protected]>
rename the public structs to have an
rte_power_prefix.Fixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>---
<snip>
Quoted 11 lines
RTE_LOG(ERR, GUEST_CLI, "Error receiving message.\n");examples/vm_power_manager/guest_cli/vm_power_cli_guest.c +2
-2@@ -293,14 +294,15 @@ cmd_query_caps_list_parsed(void *parsed_result, { struct cmd_query_caps_result *res = parsed_result; unsigned int lcore_id; - struct channel_packet_caps_list pkt_caps_list; - struct channel_packet pkt; + struct rte_power_channel_packet_caps_list pkt_caps_list; + struct rte_power_channel_packet pkt; bool query_list = false; int ret;
Quoted 9 lines
examples/vm_power_manager/guest_cli/vm_power_cli_guest.c cmd_query_caps_list_parsed(void *parsed_result, · line 305
Quoted 6 lines
examples/vm_power_manager/guest_cli/vm_power_cli_guest.c +3
-1char *ep; - memset(&pkt, 0, sizeof(struct channel_packet)); - memset(&pkt_caps_list, 0, sizeof(struct channel_packet_caps_list)); + memset(&pkt, 0, sizeof(struct rte_power_channel_packet)); + memset(&pkt_caps_list, 0, + sizeof(struct rte_power_channel_packet_caps_list));Here and in other places where you do
sizeof(), you might want to avoid future changes by replacing it withsizeof(*pkt)instead?
Good point. Will do.
Thanks.
PATCH v3 4/6 power: rename defines
In reply to David HuntFrom: Bruce Richardson <[email protected]>
Rename the #defines to have an RTE_POWER_ prefix
--- examples/vm_power_manager/channel_monitor.c | 116 +++++++++--------- examples/vm_power_manager/channel_monitor.h | 6 +- examples/vm_power_manager/guest_cli/main.c | 29 +++-- .../guest_cli/vm_power_cli_guest.c | 28 ++--- examples/vm_power_manager/main.c | 2 +- lib/librte_power/guest_channel.c | 2 +- lib/librte_power/power_kvm_vm.c | 14 +-- lib/librte_power/rte_power_guest_channel.h | 98 +++++++-------- 8 files changed, 155 insertions(+), 140 deletions(-)
examples/vm_power_manager/channel_monitor.c +61 -55
@@ -177,10 +177,10 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt, pkt->nb_mac_to_monitor =0 ; pkt->t_boost_status.tbEnabled = false; - pkt->workload =LOW ; - pkt->policy_to_use =TIME ; - pkt->command =PKT_POLICY ; - pkt->core_type =CORE_TYPE_PHYSICAL ; + pkt->workload =RTE_POWER_WL_LOW ; + pkt->policy_to_use =RTE_POWER_POLICY_TIME ; + pkt->command =RTE_POWER_PKT_POLICY ; + pkt->core_type =RTE_POWER_CORE_TYPE_PHYSICAL ;if (vm_name ==NULL ) { RTE_LOG(ERR, CHANNEL_MONITOR,
@@ -203,11 +203,11 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt,char command[32 ];strlcpy (command,json_string_value (value),32 );if (!strcmp (command,"power" )) { - pkt->command =CPU_POWER ; + pkt->command =RTE_POWER_CPU_POWER ; }else if (!strcmp (command,"create" )) { - pkt->command =PKT_POLICY ; + pkt->command =RTE_POWER_PKT_POLICY ; }else if (!strcmp (command,"destroy" )) { - pkt->command =PKT_POLICY_REMOVE ; + pkt->command =RTE_POWER_PKT_POLICY_REMOVE ; }else {RTE_LOG (ERR ,CHANNEL_MONITOR ,"Invalid command received in JSON\n" );
@@ -217,13 +217,17 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt,char command[32 ];strlcpy (command,json_string_value (value),32 );if (!strcmp (command,"TIME" )) { - pkt->policy_to_use =TIME ; + pkt->policy_to_use = +RTE_POWER_POLICY_TIME ; }else if (!strcmp (command,"TRAFFIC" )) { - pkt->policy_to_use =TRAFFIC ; + pkt->policy_to_use = +RTE_POWER_POLICY_TRAFFIC ; }else if (!strcmp (command,"WORKLOAD" )) { - pkt->policy_to_use =WORKLOAD ; + pkt->policy_to_use = +RTE_POWER_POLICY_WORKLOAD ; }else if (!strcmp (command,"BRANCH_RATIO" )) { - pkt->policy_to_use =BRANCH_RATIO ; + pkt->policy_to_use = +RTE_POWER_POLICY_BRANCH_RATIO ; }else {RTE_LOG (ERR ,CHANNEL_MONITOR ,"Wrong policy_type received in JSON\n" );
@@ -233,11 +237,11 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt,char command[32 ];strlcpy (command,json_string_value (value),32 );if (!strcmp (command,"HIGH" )) { - pkt->workload =HIGH ; + pkt->workload =RTE_POWER_WL_HIGH ; }else if (!strcmp (command,"MEDIUM" )) { - pkt->workload =MEDIUM ; + pkt->workload =RTE_POWER_WL_MEDIUM ; }else if (!strcmp (command,"LOW" )) { - pkt->workload =LOW ; + pkt->workload =RTE_POWER_WL_LOW ; }else {RTE_LOG (ERR ,CHANNEL_MONITOR ,"Wrong workload received in JSON\n" );
@@ -283,17 +287,17 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt,char unit[32 ];strlcpy (unit,json_string_value (value),32 );if (!strcmp (unit,"SCALE_UP" )) { - pkt->unit =CPU_POWER_SCALE_UP ; + pkt->unit =RTE_POWER_SCALE_UP ; }else if (!strcmp (unit,"SCALE_DOWN" )) { - pkt->unit =CPU_POWER_SCALE_DOWN ; + pkt->unit =RTE_POWER_SCALE_DOWN ; }else if (!strcmp (unit,"SCALE_MAX" )) { - pkt->unit =CPU_POWER_SCALE_MAX ; + pkt->unit =RTE_POWER_SCALE_MAX ; }else if (!strcmp (unit,"SCALE_MIN" )) { - pkt->unit =CPU_POWER_SCALE_MIN ; + pkt->unit =RTE_POWER_SCALE_MIN ; }else if (!strcmp (unit,"ENABLE_TURBO" )) { - pkt->unit =CPU_POWER_ENABLE_TURBO ; + pkt->unit =RTE_POWER_ENABLE_TURBO ; }else if (!strcmp (unit,"DISABLE_TURBO" )) { - pkt->unit =CPU_POWER_DISABLE_TURBO ; + pkt->unit =RTE_POWER_DISABLE_TURBO ; }else {RTE_LOG (ERR ,CHANNEL_MONITOR ,"Invalid command received in JSON\n" );
@@ -312,7 +316,7 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt, vm_name);return -1 ; } -strlcpy (pkt->vm_name, vm_name,VM_MAX_NAME_SZ ); +strlcpy (pkt->vm_name, vm_name,RTE_POWER_VM_MAX_NAME_SZ ); pkt->resource_id = resource_id; }return 0 ;
@@ -367,7 +371,7 @@ pcpu_monitor(struct policy *pol, struct core_info *ci, int pcpu, int count) {int ret =0 ; -if (pol->pkt.policy_to_use ==BRANCH_RATIO ) { +if (pol->pkt.policy_to_use ==RTE_POWER_POLICY_BRANCH_RATIO ) { ci->cd[pcpu].oob_enabled =1 ; ret =add_core_to_monitor (pcpu);if (ret ==0 )
@@ -407,7 +411,7 @@ get_pcpu_to_control(struct policy *pol)* differenciate between them when adding them to the branch monitor. * Virtual cores need to be converted to physical cores. */ -if (pol->pkt.core_type ==CORE_TYPE_VIRTUAL ) { +if (pol->pkt.core_type ==RTE_POWER_CORE_TYPE_VIRTUAL ) {/* * If the cores in the policy are virtual, we need to map them * to physical core. We look up the vm info and use that for
@@ -479,7 +483,8 @@ update_policy(struct rte_power_channel_packet *pkt) policies[i].pkt = *pkt;get_pcpu_to_control (&policies[i]);/* Check Eth dev only for Traffic policy */ -if (policies[i].pkt.policy_to_use ==TRAFFIC ) { +if (policies[i].pkt.policy_to_use == +RTE_POWER_POLICY_TRAFFIC ) {if (get_pfid (&policies[i]) <0 ) { updated =1 ;break ;
@@ -496,7 +501,8 @@ update_policy(struct rte_power_channel_packet *pkt) policies[i].pkt = *pkt;get_pcpu_to_control (&policies[i]);/* Check Eth dev only for Traffic policy */ -if (policies[i].pkt.policy_to_use ==TRAFFIC ) { +if (policies[i].pkt.policy_to_use == +RTE_POWER_POLICY_TRAFFIC ) {if (get_pfid (&policies[i]) <0 ) { updated =1 ;break ;
@@ -615,7 +621,7 @@ apply_time_profile(struct policy *pol)/* Format the date and time, down to a single second. */ strftime (time_string,sizeof (time_string),"%Y-%m-%d %H:%M:%S" , ptm); -for (x =0 ; x <HOURS ; x++) { +for (x =0 ; x <RTE_POWER_HOURS_PER_DAY ; x++) {if (ptm->tm_hour == pol->pkt.timer_policy.busy_hours[x]) {for (count =0 ; count < pol->pkt.num_vcpu; count++) {
@@ -648,19 +654,19 @@ apply_workload_profile(struct policy *pol)int count; -if (pol->pkt.workload ==HIGH ) { +if (pol->pkt.workload ==RTE_POWER_WL_HIGH ) {for (count =0 ; count < pol->pkt.num_vcpu; count++) {if (pol->core_share[count].status !=1 )power_manager_scale_core_max ( pol->core_share[count].pcpu); } - }else if (pol->pkt.workload ==MEDIUM ) { + }else if (pol->pkt.workload ==RTE_POWER_WL_MEDIUM ) {for (count =0 ; count < pol->pkt.num_vcpu; count++) {if (pol->core_share[count].status !=1 )power_manager_scale_core_med ( pol->core_share[count].pcpu); } - }else if (pol->pkt.workload ==LOW ) { + }else if (pol->pkt.workload ==RTE_POWER_WL_LOW ) {for (count =0 ; count < pol->pkt.num_vcpu; count++) {if (pol->core_share[count].status !=1 ) power_manager_scale_core_min(
@@ -676,11 +682,11 @@ apply_policy(struct policy *pol)struct rte_power_channel_packet *pkt = &pol->pkt;/*Check policy to use*/ -if (pkt->policy_to_use ==TRAFFIC ) +if (pkt->policy_to_use ==RTE_POWER_POLICY_TRAFFIC )apply_traffic_profile (pol); -else if (pkt->policy_to_use ==TIME ) +else if (pkt->policy_to_use ==RTE_POWER_POLICY_TIME )apply_time_profile (pol); -else if (pkt->policy_to_use ==WORKLOAD ) +else if (pkt->policy_to_use ==RTE_POWER_POLICY_WORKLOAD )apply_workload_profile (pol); }
@@ -726,13 +732,13 @@ send_freq(struct rte_power_channel_packet *pkt,if (get_info_vm (pkt->vm_name, &info) !=0 )return -1 ; -if (!freq_list && vcore_id >=MAX_VCPU_PER_VM ) +if (!freq_list && vcore_id >=RTE_POWER_MAX_VCPU_PER_VM )return -1 ;if (!info.allow_query)return -1 ; - channel_pkt_freq_list.command =CPU_POWER_FREQ_LIST ; + channel_pkt_freq_list.command =RTE_POWER_FREQ_LIST ; channel_pkt_freq_list.num_vcpu = info.num_vcpus;if (freq_list) {
@@ -764,13 +770,13 @@ send_capabilities(struct rte_power_channel_packet *pkt,if (get_info_vm (pkt->vm_name, &info) !=0 )return -1 ; -if (!list_requested && vcore_id >=MAX_VCPU_PER_VM ) +if (!list_requested && vcore_id >=RTE_POWER_MAX_VCPU_PER_VM )return -1 ;if (!info.allow_query)return -1 ; - channel_pkt_caps_list.command =CPU_POWER_CAPS_LIST ; + channel_pkt_caps_list.command =RTE_POWER_CAPS_LIST ; channel_pkt_caps_list.num_vcpu = info.num_vcpus;if (list_requested) {
@@ -828,10 +834,10 @@ process_request(struct rte_power_channel_packet *pkt, CHANNEL_MGR_CHANNEL_PROCESSING) == 0)return -1 ; -if (pkt->command ==CPU_POWER ) { +if (pkt->command ==RTE_POWER_CPU_POWER ) {unsigned int core_num; -if (pkt->core_type ==CORE_TYPE_VIRTUAL ) +if (pkt->core_type ==RTE_POWER_CORE_TYPE_VIRTUAL ) core_num =get_pcpu (chan_info, pkt->resource_id);else core_num = pkt->resource_id;
@@ -843,22 +849,22 @@ process_request(struct rte_power_channel_packet *pkt,bool valid_unit = true;switch (pkt->unit) { -case (CPU_POWER_SCALE_MIN ): +case (RTE_POWER_SCALE_MIN ): scale_res =power_manager_scale_core_min (core_num);break ; -case (CPU_POWER_SCALE_MAX ): +case (RTE_POWER_SCALE_MAX ): scale_res =power_manager_scale_core_max (core_num);break ; -case (CPU_POWER_SCALE_DOWN ): +case (RTE_POWER_SCALE_DOWN ): scale_res =power_manager_scale_core_down (core_num);break ; -case (CPU_POWER_SCALE_UP ): +case (RTE_POWER_SCALE_UP ): scale_res =power_manager_scale_core_up (core_num);break ; -case (CPU_POWER_ENABLE_TURBO ): +case (RTE_POWER_ENABLE_TURBO ): scale_res =power_manager_enable_turbo_core (core_num);break ; -case (CPU_POWER_DISABLE_TURBO ): +case (RTE_POWER_DISABLE_TURBO ): scale_res =power_manager_disable_turbo_core (core_num);break ;default :
@@ -870,8 +876,8 @@ process_request(struct rte_power_channel_packet *pkt, ret =send_ack_for_received_cmd (pkt, chan_info, scale_res >=0 ? -CPU_POWER_CMD_ACK : -CPU_POWER_CMD_NACK ); +RTE_POWER_CMD_ACK : +RTE_POWER_CMD_NACK );if (ret <0 )RTE_LOG (ERR ,CHANNEL_MONITOR ,"Error during sending ack command.\n" ); }else
@@ -879,19 +885,19 @@ process_request(struct rte_power_channel_packet *pkt, } -if (pkt->command ==PKT_POLICY ) { +if (pkt->command ==RTE_POWER_PKT_POLICY ) {RTE_LOG (INFO ,CHANNEL_MONITOR ,"Processing policy request %s\n" , pkt->vm_name);int ret =send_ack_for_received_cmd (pkt, chan_info, -CPU_POWER_CMD_ACK ); +RTE_POWER_CMD_ACK );if (ret <0 )RTE_LOG (ERR ,CHANNEL_MONITOR ,"Error during sending ack command.\n" );update_policy (pkt); policy_is_set =1 ; } -if (pkt->command ==PKT_POLICY_REMOVE ) { +if (pkt->command ==RTE_POWER_PKT_POLICY_REMOVE ) { ret =remove_policy (pkt);if (ret ==0 ) RTE_LOG(INFO, CHANNEL_MONITOR,
@@ -901,26 +907,26 @@ process_request(struct rte_power_channel_packet *pkt, "Policy %s does not exist\n", pkt->vm_name); } -if (pkt->command ==CPU_POWER_QUERY_FREQ_LIST || - pkt->command ==CPU_POWER_QUERY_FREQ ) { +if (pkt->command ==RTE_POWER_QUERY_FREQ_LIST || + pkt->command ==RTE_POWER_QUERY_FREQ ) {RTE_LOG (INFO ,CHANNEL_MONITOR ,"Frequency for %s requested.\n" , pkt->vm_name);int ret =send_freq (pkt, chan_info, - pkt->command ==CPU_POWER_QUERY_FREQ_LIST ); + pkt->command ==RTE_POWER_QUERY_FREQ_LIST );if (ret <0 )RTE_LOG (ERR ,CHANNEL_MONITOR ,"Error during frequency sending.\n" ); } -if (pkt->command ==CPU_POWER_QUERY_CAPS_LIST || - pkt->command ==CPU_POWER_QUERY_CAPS ) { +if (pkt->command ==RTE_POWER_QUERY_CAPS_LIST || + pkt->command ==RTE_POWER_QUERY_CAPS ) {RTE_LOG (INFO ,CHANNEL_MONITOR ,"Capabilities for %s requested.\n" , pkt->vm_name);int ret =send_capabilities (pkt, chan_info, - pkt->command ==CPU_POWER_QUERY_CAPS_LIST ); + pkt->command ==RTE_POWER_QUERY_CAPS_LIST );if (ret <0 )RTE_LOG (ERR ,CHANNEL_MONITOR ,"Error during sending capabilities.\n" ); }
examples/vm_power_manager/channel_monitor.h +3 -3
@@ -19,10 +19,10 @@ struct core_share {struct policy {struct rte_power_channel_packet pkt; -uint32_t pfid[MAX_VFS ]; -uint32_t port[MAX_VFS ]; +uint32_t pfid[RTE_POWER_MAX_VFS ]; +uint32_t port[RTE_POWER_MAX_VFS ];unsigned int enabled; -struct core_share core_share[MAX_VCPU_PER_VM ]; +struct core_share core_share[RTE_POWER_MAX_VCPU_PER_VM ]; };#ifdef __cplusplus
examples/vm_power_manager/guest_cli/main.c +18 -11
@@ -50,8 +50,8 @@ parse_args(int argc, char **argv) };struct rte_power_channel_packet *policy;unsigned short int hours[MAX_HOURS ]; -unsigned short int cores[MAX_VCPU_PER_VM ]; -unsigned short int ports[MAX_VCPU_PER_VM ]; +unsigned short int cores[RTE_POWER_MAX_VCPU_PER_VM ]; +unsigned short int ports[RTE_POWER_MAX_VCPU_PER_VM ];int i, cnt, idx; policy =get_policy ();
@@ -69,7 +69,8 @@ parse_args(int argc, char **argv)switch (opt) {/* portmask */ case 'n' : -strlcpy (policy->vm_name, optarg,VM_MAX_NAME_SZ ); +strlcpy (policy->vm_name, optarg, +RTE_POWER_VM_MAX_NAME_SZ );printf ("Setting VM Name to [%s]\n" , policy->vm_name);break ;case 'b' :
@@ -97,14 +98,15 @@ parse_args(int argc, char **argv) }break ;case 'l' : - cnt =parse_set (optarg, cores,MAX_VCPU_PER_VM ); + cnt =parse_set (optarg, cores, +RTE_POWER_MAX_VCPU_PER_VM );if (cnt <0 ) {printf ("Invalid value passed to vcpu-list - [%s]\n" , optarg);break ; } idx =0 ; -for (i =0 ; i <MAX_VCPU_PER_VM ; i++) { +for (i =0 ; i <RTE_POWER_MAX_VCPU_PER_VM ; i++) {if (cores[i]) {printf ("***Using core %d\n" , i); policy->vcpu_to_control[idx++] = i;
@@ -114,14 +116,15 @@ parse_args(int argc, char **argv)printf ("Total cores: %d\n" , idx);break ;case 'p' : - cnt =parse_set (optarg, ports,MAX_VCPU_PER_VM ); + cnt =parse_set (optarg, ports, +RTE_POWER_MAX_VCPU_PER_VM );if (cnt <0 ) {printf ("Invalid value passed to port-list - [%s]\n" , optarg);break ; } idx =0 ; -for (i =0 ; i <MAX_VCPU_PER_VM ; i++) { +for (i =0 ; i <RTE_POWER_MAX_VCPU_PER_VM ; i++) {if (ports[i]) {printf ("***Using port %d\n" , i);if (set_policy_mac (i, idx++) !=0 ) {
@@ -135,13 +138,17 @@ parse_args(int argc, char **argv)break ;case 'o' :if (!strcmp (optarg,"TRAFFIC" )) - policy->policy_to_use =TRAFFIC ; + policy->policy_to_use = +RTE_POWER_POLICY_TRAFFIC ;else if (!strcmp (optarg,"TIME" )) - policy->policy_to_use =TIME ; + policy->policy_to_use = +RTE_POWER_POLICY_TIME ;else if (!strcmp (optarg,"WORKLOAD" )) - policy->policy_to_use =WORKLOAD ; + policy->policy_to_use = +RTE_POWER_POLICY_WORKLOAD ;else if (!strcmp (optarg,"BRANCH_RATIO" )) - policy->policy_to_use =BRANCH_RATIO ; + policy->policy_to_use = +RTE_POWER_POLICY_BRANCH_RATIO ;else {printf ("Invalid policy specified: %s\n" , optarg);
examples/vm_power_manager/guest_cli/vm_power_cli_guest.c +14 -14
@@ -103,10 +103,10 @@ set_policy_defaults(struct rte_power_channel_packet *pkt) pkt->timer_policy.hours_to_use_traffic_profile[0 ] =8 ; pkt->timer_policy.hours_to_use_traffic_profile[1 ] =10 ; - pkt->core_type =CORE_TYPE_VIRTUAL ; - pkt->workload =LOW ; - pkt->policy_to_use =TIME ; - pkt->command =PKT_POLICY ; + pkt->core_type =RTE_POWER_CORE_TYPE_VIRTUAL ; + pkt->workload =RTE_POWER_WL_LOW ; + pkt->policy_to_use =RTE_POWER_POLICY_TIME ; + pkt->command =RTE_POWER_PKT_POLICY ;strlcpy (pkt->vm_name,"ubuntu2" ,sizeof (pkt->vm_name));return 0 ;
@@ -169,7 +169,7 @@ receive_freq_list(struct rte_power_channel_packet_freq_list *pkt_freq_list,RTE_LOG (ERR ,GUEST_CLI ,"Error receiving message.\n" );return -1 ; } -if (pkt_freq_list->command !=CPU_POWER_FREQ_LIST ) { +if (pkt_freq_list->command !=RTE_POWER_FREQ_LIST ) {RTE_LOG (ERR ,GUEST_CLI ,"Unexpected message received.\n" );return -1 ; }
@@ -204,18 +204,18 @@ cmd_query_freq_list_parsed(void *parsed_result,return ; } - pkt.command =CPU_POWER_QUERY_FREQ_LIST ; + pkt.command =RTE_POWER_QUERY_FREQ_LIST ;strlcpy (pkt.vm_name, policy.vm_name,sizeof (pkt.vm_name)); query_list = true; }else { errno =0 ; lcore_id = (unsigned int )strtol (res->cpu_num, &ep,10 ); -if (errno !=0 || lcore_id >=MAX_VCPU_PER_VM || +if (errno !=0 || lcore_id >=RTE_POWER_MAX_VCPU_PER_VM || ep == res->cpu_num) {cmdline_printf (cl,"Invalid parameter provided.\n" );return ; } - pkt.command =CPU_POWER_QUERY_FREQ ; + pkt.command =RTE_POWER_QUERY_FREQ ;strlcpy (pkt.vm_name, policy.vm_name,sizeof (pkt.vm_name)); pkt.resource_id = lcore_id; }
@@ -280,7 +280,7 @@ receive_capabilities(struct rte_power_channel_packet_caps_list *pkt_caps_list,RTE_LOG (ERR ,GUEST_CLI ,"Error receiving message.\n" );return -1 ; } -if (pkt_caps_list->command !=CPU_POWER_CAPS_LIST ) { +if (pkt_caps_list->command !=RTE_POWER_CAPS_LIST ) {RTE_LOG (ERR ,GUEST_CLI ,"Unexpected message received.\n" );return -1 ; }
@@ -315,18 +315,18 @@ cmd_query_caps_list_parsed(void *parsed_result,return ; } - pkt.command =CPU_POWER_QUERY_CAPS_LIST ; + pkt.command =RTE_POWER_QUERY_CAPS_LIST ;strlcpy (pkt.vm_name, policy.vm_name,sizeof (pkt.vm_name)); query_list = true; }else { errno =0 ; lcore_id = (unsigned int )strtol (res->cpu_num, &ep,10 ); -if (errno !=0 || lcore_id >=MAX_VCPU_PER_VM || +if (errno !=0 || lcore_id >=RTE_POWER_MAX_VCPU_PER_VM || ep == res->cpu_num) {cmdline_printf (cl,"Invalid parameter provided.\n" );return ; } - pkt.command =CPU_POWER_QUERY_CAPS ; + pkt.command =RTE_POWER_QUERY_CAPS ;strlcpy (pkt.vm_name, policy.vm_name,sizeof (pkt.vm_name)); pkt.resource_id = lcore_id; }
@@ -390,10 +390,10 @@ check_response_cmd(unsigned int lcore_id, int *result)return -1 ;switch (pkt.command) { -case (CPU_POWER_CMD_ACK ): +case (RTE_POWER_CMD_ACK ): *result =1 ;break ; -case (CPU_POWER_CMD_NACK ): +case (RTE_POWER_CMD_NACK ): *result =0 ;break ;default :
examples/vm_power_manager/main.c +1 -1
@@ -394,7 +394,7 @@ main(int argc, char **argv)"Cannot init port %" PRIu8"\n" , portid); -for (w =0 ; w <MAX_VFS ; w++) { +for (w =0 ; w <RTE_POWER_MAX_VFS ; w++) { eth.addr_bytes[5 ] = w +0xf0 ; ret = -ENOTSUP ;
lib/librte_power/guest_channel.c +1 -1
@@ -100,7 +100,7 @@ guest_channel_host_connect(const char *path, unsigned int lcore_id)/* Send a test packet, this command is ignored by the host, but a successful * send indicates that the host endpoint is monitoring. */ - pkt.command =CPU_POWER_CONNECT ; + pkt.command =RTE_POWER_CPU_POWER_CONNECT ; global_fds[lcore_id] = fd; ret =guest_channel_send_msg (&pkt, lcore_id);if (ret !=0 ) {
lib/librte_power/power_kvm_vm.c +7 -7
@@ -29,7 +29,7 @@ power_kvm_vm_init(unsigned int lcore_id) lcore_id, RTE_MAX_LCORE-1);return -1 ; } - pkt[lcore_id].command =CPU_POWER ; + pkt[lcore_id].command =RTE_POWER_CPU_POWER ; pkt[lcore_id].resource_id = lcore_id;return guest_channel_host_connect (FD_PATH , lcore_id); }
@@ -90,25 +90,25 @@ send_msg(unsigned int lcore_id, uint32_t scale_direction)int power_kvm_vm_freq_up (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_SCALE_UP ); +return send_msg (lcore_id,RTE_POWER_SCALE_UP ); }int power_kvm_vm_freq_down (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_SCALE_DOWN ); +return send_msg (lcore_id,RTE_POWER_SCALE_DOWN ); }int power_kvm_vm_freq_max (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_SCALE_MAX ); +return send_msg (lcore_id,RTE_POWER_SCALE_MAX ); }int power_kvm_vm_freq_min (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_SCALE_MIN ); +return send_msg (lcore_id,RTE_POWER_SCALE_MIN ); }int
@@ -121,13 +121,13 @@ power_kvm_vm_turbo_status(__rte_unused unsigned int lcore_id)int power_kvm_vm_enable_turbo (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_ENABLE_TURBO ); +return send_msg (lcore_id,RTE_POWER_ENABLE_TURBO ); }int power_kvm_vm_disable_turbo (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_DISABLE_TURBO ); +return send_msg (lcore_id,RTE_POWER_DISABLE_TURBO ); }struct rte_power_core_capabilities ;
lib/librte_power/rte_power_guest_channel.h +50 -48
144 lines not on this page · raw message
Signature · 1 line
2.17.1
PATCH v3 5/6 power: add new header file to export list
In reply to David HuntFrom: Bruce Richardson <[email protected]>
Adjust meson.build so that 'ninja install' copies the new header file into the installation directory.
--- lib/librte_power/meson.build | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
lib/librte_power/meson.build +2 -1
@@ -10,5 +10,6 @@ sources = files('rte_power.c', 'power_acpi_cpufreq.c', 'rte_power_empty_poll.c', 'power_pstate_cpufreq.c', 'power_common.c') -headers = files('rte_power.h','rte_power_empty_poll.h') +headers = files('rte_power.h','rte_power_empty_poll.h', + 'rte_power_guest_channel.h') deps += ['timer']
Signature · 1 line
2.17.1
Re: [dpdk-dev] [PATCH v3 5/6] power: add new header file to export list
Quoted 5 lines · David Hunt
From: Bruce Richardson <[email protected]>
Adjust meson.build so that 'ninja install' copies the new header file into the installation directory.
Quoted 7 lines
Fixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>---
IMO this should be part of the first patch, otherwise the build could (will?) be broken until this patch.
Signature · 2 lines
Thanks, Anatoly
Re: [dpdk-dev] [PATCH v3 5/6] power: add new header file to export list
Quoted 10 lines · Anatoly
Quoted 9 lines · David Hunt
From: Bruce Richardson <[email protected]>
Adjust meson.build so that 'ninja install' copies the new header file into the installation directory.
Fixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")
Quoted 6 lines
Quoted 3 lines
Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>---
IMO this should be part of the first patch, otherwise the build could (will?) be broken until this patch.
Hi Anatoly,
It was broken before this patch set. I wanted to have everything in place, including the correct naming of structs/defines before allowing builds against the new header file, hence this order in the patch set.
Rgds,
Dave.
Re: [dpdk-dev] [PATCH v3 5/6] power: add new header file to export list
Quoted 18 lines · David Hunt
Quoted 10 lines · Anatoly
Quoted 9 lines · David Hunt
From: Bruce Richardson <[email protected]>
Adjust meson.build so that 'ninja install' copies the new header file into the installation directory.
Fixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")Quoted 6 lines
Quoted 3 lines
Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>---
IMO this should be part of the first patch, otherwise the build could (will?) be broken until this patch.
Quoted 9 lines
Hi Anatoly,
It was broken before this patch set. I wanted to have everything in
place, including the correct naming of structs/defines before allowing builds against the new header file, hence this order in the patch set.Rgds,
Dave.
It's only my opinion obviously, but i rather prefer an approach of fixing build issues first, and then renaming everything, as I like to have each patch build at every step of the way. You probably know better, but from a cursory look, you should be able to keep progressively changing things but also keep everything building correctly every step of the way.
Signature · 2 lines
Thanks, Anatoly
Re: [dpdk-dev] [PATCH v3 5/6] power: add new header file to export list
In reply to Burakov, AnatolyQuoted 10 lines · Anatoly
Quoted 9 lines · David Hunt
From: Bruce Richardson <[email protected]>
Adjust meson.build so that 'ninja install' copies the new header file into the installation directory.
Fixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")
Quoted 7 lines
Quoted 3 lines
Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>---
IMO this should be part of the first patch, otherwise the build could (will?) be broken until this patch.
Since things were already broken before the set, I'm not sure this really matters.
Re: [dpdk-dev] [PATCH v3 5/6] power: add new header file to export list
Quoted 15 lines · Bruce Richardson
Quoted 14 lines · Anatoly
Quoted 12 lines · David Hunt
From: Bruce Richardson <[email protected]>
Adjust meson.build so that 'ninja install' copies the new header file into the installation directory.
Fixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>---
Quoted 6 lines
Quoted 3 lines
IMO this should be part of the first patch, otherwise the build could (will?) be broken until this patch.
Since things were already broken before the set, I'm not sure this really matters.
If they can be *un*broken sooner, that's a win in my book :)
Signature · 2 lines
Thanks, Anatoly
Re: [dpdk-dev] [PATCH v3 5/6] power: add new header file to export list
Quoted 16 lines · Anatoly
Quoted 15 lines · Bruce Richardson
Quoted 14 lines · Anatoly
Quoted 12 lines · David Hunt
From: Bruce Richardson <[email protected]>
Adjust meson.build so that 'ninja install' copies the new header file into the installation directory.
Fixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>---
Quoted 8 lines
Quoted 6 lines
Quoted 3 lines
IMO this should be part of the first patch, otherwise the build could (will?) be broken until this patch.
Since things were already broken before the set, I'm not sure this really matters.
If they can be *un*broken sooner, that's a win in my book :)
I'll keep that in mind for future patch sets. For this one, the effort to change far outweighs the benefits, so I'll leave as is. OK with you?
Re: [dpdk-dev] [PATCH v3 5/6] power: add new header file to export list
Quoted 21 lines · David Hunt
Quoted 19 lines · Anatoly
Quoted 18 lines · Bruce Richardson
Quoted 17 lines · Anatoly
Quoted 5 lines · David Hunt
From: Bruce Richardson <[email protected]>
Adjust meson.build so that 'ninja install' copies the new header file into the installation directory.
Quoted 7 lines
Fixes 210c383e247b ("power: packet format for vm power management")Fixes cd0d5547e873 ("power: vm communication channels in guest")Signed-off-by Bruce Richardson <[email protected]>Signed-off-by David Hunt <[email protected]>---
IMO this should be part of the first patch, otherwise the build could (will?) be broken until this patch.
Quoted 9 lines
Quoted 5 lines
Quoted 3 lines
Since things were already broken before the set, I'm not sure this really matters.
If they can be *un*broken sooner, that's a win in my book :)
I'll keep that in mind for future patch sets. For this one, the effort to change far outweighs the benefits, so I'll leave as is. OK with you?
Sure.
Signature · 2 lines
Thanks, Anatoly
PATCH v3 6/6 power: clean up includes
In reply to David HuntFrom: Bruce Richardson <[email protected]>
re-organise the including of the new public header file and remove un-needed includes
--- examples/vm_power_manager/channel_manager.c | 1 - examples/vm_power_manager/channel_monitor.c | 1 - examples/vm_power_manager/channel_monitor.h | 2 +- examples/vm_power_manager/guest_cli/vm_power_cli_guest.c | 1 - examples/vm_power_manager/guest_cli/vm_power_cli_guest.h | 2 -- examples/vm_power_manager/vm_power_cli.c | 1 - lib/librte_power/guest_channel.c | 2 +- lib/librte_power/guest_channel.h | 2 -- lib/librte_power/power_kvm_vm.c | 2 +- lib/librte_power/rte_power.h | 1 + lib/librte_power/rte_power_guest_channel.h | 3 --- 11 files changed, 4 insertions(+), 14 deletions(-)
examples/vm_power_manager/channel_manager.c +0 -1
@@ -27,7 +27,6 @@#include <libvirt/libvirt.h> #include "channel_manager.h" -#include "rte_power_guest_channel.h" #include "channel_monitor.h" #include "power_manager.h"
examples/vm_power_manager/channel_monitor.c +0 -1
@@ -35,7 +35,6 @@#include <libvirt/libvirt.h> #include "channel_monitor.h" -#include "rte_power_guest_channel.h" #include "channel_manager.h" #include "power_manager.h" #include "oob_monitor.h"
examples/vm_power_manager/channel_monitor.h +1 -1
@@ -5,8 +5,8 @@ #ifndef CHANNEL_MONITOR_H_ #define CHANNEL_MONITOR_H_ +#include <rte_power.h> #include "channel_manager.h" -#include "rte_power_guest_channel.h" struct core_share { unsigned int pcpu;
examples/vm_power_manager/guest_cli/vm_power_cli_guest.c +0 -1
@@ -19,7 +19,6 @@#include <rte_ethdev.h> #include <rte_power.h> -#include <guest_channel.h> #include "vm_power_cli_guest.h"
examples/vm_power_manager/guest_cli/vm_power_cli_guest.h +0 -2
@@ -9,8 +9,6 @@extern "C" {#endif -#include "rte_power_guest_channel.h" -struct rte_power_channel_packet *get_policy (void );int set_policy_mac (int port,int idx);
examples/vm_power_manager/vm_power_cli.c +0 -1
@@ -21,7 +21,6 @@#include "channel_manager.h" #include "channel_monitor.h" #include "power_manager.h" -#include "rte_power_guest_channel.h" struct cmd_quit_result {cmdline_fixed_string_t quit;
lib/librte_power/guest_channel.c +1 -1
@@ -15,9 +15,9 @@#include <rte_log.h> +#include <rte_power.h> #include "guest_channel.h" -#include "rte_power_guest_channel.h" #define RTE_LOGTYPE_GUEST_CHANNEL RTE_LOGTYPE_USER1
lib/librte_power/guest_channel.h +0 -2
@@ -8,8 +8,6 @@extern "C" {#endif -#include <rte_power_guest_channel.h> -/** * Check if any Virtio-Serial VM end-points exist in path. *
lib/librte_power/power_kvm_vm.c +1 -1
@@ -6,8 +6,8 @@#include <rte_log.h> -#include "guest_channel.h" #include "rte_power_guest_channel.h" +#include "guest_channel.h" #include "power_kvm_vm.h" #include "power_common.h"
lib/librte_power/rte_power.h +1 -0
@@ -14,6 +14,7 @@#include <rte_byteorder.h> #include <rte_log.h> #include <rte_string_fns.h> +#include <rte_power_guest_channel.h> #ifdef __cplusplusextern "C" {
lib/librte_power/rte_power_guest_channel.h +0 -3
@@ -8,9 +8,6 @@extern "C" {#endif -#include <stdint.h> -#include <stdbool.h> -#define RTE_POWER_MAX_VFS 10#define RTE_POWER_VM_MAX_NAME_SZ 32#define RTE_POWER_MAX_VCPU_PER_VM 8
Signature · 1 line
2.17.1
PATCH v2 2/6 power: make channel msg functions public
In reply to David HuntFrom: Bruce Richardson <[email protected]>
Move the 2 public functions into rte_power_guest_channel.h
--- lib/librte_power/guest_channel.h | 40 +--------------------- lib/librte_power/rte_power_guest_channel.h | 40 ++++++++++++++++++++++ 2 files changed, 41 insertions(+), 39 deletions(-)
lib/librte_power/guest_channel.h +1 -39
@@ -65,21 +65,7 @@ void guest_channel_host_disconnect(unsigned int lcore_id);*/ int guest_channel_send_msg (struct channel_packet *pkt,unsigned int lcore_id); -/** -* Send a message contained in pkt over the Virtio-Serial to the host endpoint. -* -* @param pkt -* Pointer to a populated struct channel_packet -* -* @param lcore_id -* lcore_id. -* -* @return -* - 0 on success. -* - Negative on error. -*/ -int rte_power_guest_channel_send_msg (struct channel_packet *pkt, -unsigned int lcore_id); +/** * Read a message contained in pkt over the Virtio-Serial
@@ -103,30 +89,6 @@ int power_guest_channel_read_msg(void *pkt,size_t pkt_len, unsigned int lcore_id); -/** -* Receive a message contained in pkt over the Virtio-Serial -* from the host endpoint. -* -* @param pkt -* Pointer to channel_packet or -* channel_packet_freq_list struct. -* -* @param pkt_len -* Size of expected data packet. -* -* @param lcore_id -* lcore_id. -* -* @return -* - 0 on success. -* - Negative on error. -*/ -__rte_experimental -int -rte_power_guest_channel_receive_msg (void *pkt, -size_t pkt_len, -unsigned int lcore_id); - #ifdef __cplusplus }
lib/librte_power/rte_power_guest_channel.h +40 -0
@@ -116,6 +116,46 @@ struct channel_packet_caps_list {uint8_t num_vcpu; }; +/** +* Send a message contained in pkt over the Virtio-Serial to the host endpoint. +* +* @param pkt +* Pointer to a populated struct channel_packet +* +* @param lcore_id +* lcore_id. +* +* @return +* - 0 on success. +* - Negative on error. +*/ +int rte_power_guest_channel_send_msg (struct channel_packet *pkt, +unsigned int lcore_id); + +/** +* Receive a message contained in pkt over the Virtio-Serial +* from the host endpoint. +* +* @param pkt +* Pointer to channel_packet or +* channel_packet_freq_list struct. +* +* @param pkt_len +* Size of expected data packet. +* +* @param lcore_id +* lcore_id. +* +* @return +* - 0 on success. +* - Negative on error. +*/ +__rte_experimental +int +rte_power_guest_channel_receive_msg (void *pkt, +size_t pkt_len, +unsigned int lcore_id); + #ifdef __cplusplus }
Signature · 1 line
2.17.1
Re: [dpdk-dev] [dpdk-stable] [PATCH v2 2/6] power: make channel msg functions public
08/01/2021 15:30, David Hunt:
Quoted 3 lines
From: Bruce Richardson <[email protected]>
Move the 2 public functions into
rte_power_guest_channel.h
[...]
Quoted 29 lines
lib/librte_power/rte_power_guest_channel.h +29
-0+/** +* Send a message contained in pkt over the Virtio-Serial to the host endpoint. +* +* @param pkt +* Pointer to a populated struct channel_packet +* +* @param lcore_id +* lcore_id. +* +* @return +* - 0 on success. +* - Negative on error. +*/ +int rte_power_guest_channel_send_msg (struct channel_packet *pkt, +unsigned int lcore_id); + +/** +* Receive a message contained in pkt over the Virtio-Serial +* from the host endpoint. +* +* @param pkt +* Pointer to channel_packet or +* channel_packet_freq_list struct. +* +* @param pkt_len +* Size of expected data packet. +* +* @param lcore_id +* lcore_id.
lib/librte_power/rte_power_guest_channel.h struct channel_packet_caps_list { · line 157
Quoted 10 lines
lib/librte_power/rte_power_guest_channel.h +10
-0+* +* @return +* - 0 on success. +* - Negative on error. +*/ +__rte_experimental +int +rte_power_guest_channel_receive_msg (void *pkt, +size_t pkt_len, +unsigned int lcore_id);
Why only the second one is experimental?
Given the uncertainty of this API, I think it should be all experimental.
Re: [dpdk-dev] [dpdk-stable] [PATCH v2 2/6] power: make channel msg functions public
Quoted 46 lines · Thomas Monjalon
08/01/2021 15:30, David Hunt:
Quoted 3 lines
From: Bruce Richardson <[email protected]>
Move the 2 public functions into
rte_power_guest_channel.h[...]
Quoted 29 lines
lib/librte_power/rte_power_guest_channel.h +29
-0+/** +* Send a message contained in pkt over the Virtio-Serial to the host endpoint. +* +* @param pkt +* Pointer to a populated struct channel_packet +* +* @param lcore_id +* lcore_id. +* +* @return +* - 0 on success. +* - Negative on error. +*/ +int rte_power_guest_channel_send_msg (struct channel_packet *pkt, +unsigned int lcore_id); + +/** +* Receive a message contained in pkt over the Virtio-Serial +* from the host endpoint. +* +* @param pkt +* Pointer to channel_packet or +* channel_packet_freq_list struct. +* +* @param pkt_len +* Size of expected data packet. +* +* @param lcore_id +* lcore_id. lib/librte_power/rte_power_guest_channel.h struct channel_packet_caps_list { · line 157
Quoted 10 lines
lib/librte_power/rte_power_guest_channel.h +10
-0+* +* @return +* - 0 on success. +* - Negative on error. +*/ +__rte_experimental +int +rte_power_guest_channel_receive_msg (void *pkt, +size_t pkt_len, +unsigned int lcore_id);Why only the second one is experimental?
Quoted 2 lines
Given the uncertainty of this API, I think it should be all experimental.
Yes Thomas, both should be experimental. I'll fix that in the next version.
Thanks,
Dave.
PATCH v2 3/6 power: rename public structs
In reply to David HuntFrom: Bruce Richardson <[email protected]>
rename the public structs to have an rte_power_ prefix.
--- examples/vm_power_manager/channel_monitor.c | 33 ++++++------ examples/vm_power_manager/channel_monitor.h | 2 +- examples/vm_power_manager/guest_cli/main.c | 2 +- .../guest_cli/vm_power_cli_guest.c | 40 ++++++++------- .../guest_cli/vm_power_cli_guest.h | 4 +- lib/librte_power/guest_channel.c | 7 +-- lib/librte_power/guest_channel.h | 7 +-- lib/librte_power/power_kvm_vm.c | 2 +- lib/librte_power/rte_power_guest_channel.h | 51 +++++++++---------- 9 files changed, 75 insertions(+), 73 deletions(-)
examples/vm_power_manager/channel_monitor.c +17 -16
@@ -108,7 +108,7 @@ str_to_ether_addr(const char *a, struct rte_ether_addr *ether_addr) }static int -set_policy_mac (struct channel_packet *pkt,int idx,char *mac) +set_policy_mac (struct rte_power_channel_packet *pkt,int idx,char *mac) {union PFID pfid;int ret;
@@ -165,7 +165,7 @@ get_resource_id_from_vmname(const char *vm_name) }static int -parse_json_to_pkt (json_t *element,struct channel_packet *pkt, +parse_json_to_pkt (json_t *element,struct rte_power_channel_packet *pkt,const char *vm_name) {const char *key;
@@ -173,7 +173,7 @@ parse_json_to_pkt(json_t *element, struct channel_packet *pkt,int ret;int resource_id; -memset (pkt,0 ,sizeof (struct channel_packet )); +memset (pkt,0 ,sizeof (struct rte_power_channel_packet )); pkt->nb_mac_to_monitor =0 ; pkt->t_boost_status.tbEnabled = false;
@@ -463,7 +463,7 @@ get_pfid(struct policy *pol) }static int -update_policy (struct channel_packet *pkt) +update_policy (struct rte_power_channel_packet *pkt) {unsigned int updated =0 ;
@@ -512,7 +512,7 @@ update_policy(struct channel_packet *pkt) }static int -remove_policy(struct channel_packet *pkt __rte_unused) +remove_policy(struct rte_power_channel_packet *pkt __rte_unused) {unsigned int i;
@@ -673,7 +673,7 @@ static void apply_policy(struct policy *pol) { -struct channel_packet *pkt = &pol->pkt; +struct rte_power_channel_packet *pkt = &pol->pkt;/*Check policy to use*/ if (pkt->policy_to_use ==TRAFFIC )
@@ -715,12 +715,12 @@ write_binary_packet(void *buffer, }static int -send_freq (struct channel_packet *pkt, +send_freq (struct rte_power_channel_packet *pkt,struct channel_info *chan_info,bool freq_list) {unsigned int vcore_id = pkt->resource_id; -struct channel_packet_freq_list channel_pkt_freq_list; +struct rte_power_channel_packet_freq_list channel_pkt_freq_list;struct vm_info info;if (get_info_vm (pkt->vm_name, &info) !=0 )
@@ -751,12 +751,12 @@ send_freq(struct channel_packet *pkt, }static int -send_capabilities (struct channel_packet *pkt, +send_capabilities (struct rte_power_channel_packet *pkt,struct channel_info *chan_info,bool list_requested) {unsigned int vcore_id = pkt->resource_id; -struct channel_packet_caps_list channel_pkt_caps_list; +struct rte_power_channel_packet_caps_list channel_pkt_caps_list;struct vm_info info;struct rte_power_core_capabilities caps;int ret;
@@ -805,18 +805,19 @@ send_capabilities(struct channel_packet *pkt, }static int -send_ack_for_received_cmd (struct channel_packet *pkt, +send_ack_for_received_cmd (struct rte_power_channel_packet *pkt,struct channel_info *chan_info,uint32_t command) { pkt->command = command;return write_binary_packet (pkt, -sizeof (struct channel_packet ), +sizeof (struct rte_power_channel_packet ), chan_info); }static int -process_request (struct channel_packet *pkt,struct channel_info *chan_info) +process_request (struct rte_power_channel_packet *pkt, +struct channel_info *chan_info) {int ret;
@@ -988,7 +989,7 @@ channel_monitor_init(void)static void read_binary_packet (struct channel_info *chan_info) { -struct channel_packet pkt; +struct rte_power_channel_packet pkt;void *buffer = &pkt;int buffer_len =sizeof (pkt);int n_bytes, err =0 ;
@@ -1019,7 +1020,7 @@ read_binary_packet(struct channel_info *chan_info)static void read_json_packet (struct channel_info *chan_info) { -struct channel_packet pkt; +struct rte_power_channel_packet pkt;int n_bytes, ret;json_t *root;json_error_t error;
@@ -1063,7 +1064,7 @@ read_json_packet(struct channel_info *chan_info)/* * Because our data is now in the json * object, we can overwrite the pkt -* with a channel_packet struct, using +* with a rte_power_channel_packet struct, using * parse_json_to_pkt() */ ret =parse_json_to_pkt (root, &pkt, resource_name);
examples/vm_power_manager/channel_monitor.h +1 -1
@@ -18,7 +18,7 @@ struct core_share { };struct policy { -struct channel_packet pkt; +struct rte_power_channel_packet pkt;uint32_t pfid[MAX_VFS ];uint32_t port[MAX_VFS ];unsigned int enabled;
examples/vm_power_manager/guest_cli/main.c +1 -1
@@ -48,7 +48,7 @@ parse_args(int argc, char **argv) { "policy", required_argument, 0, 'o'}, {NULL, 0, 0, 0} }; -struct channel_packet *policy; +struct rte_power_channel_packet *policy;unsigned short int hours[MAX_HOURS ];unsigned short int cores[MAX_VCPU_PER_VM ];unsigned short int ports[MAX_VCPU_PER_VM ];
examples/vm_power_manager/guest_cli/vm_power_cli_guest.c +21 -19
@@ -38,9 +38,9 @@ union PFID {uint64_t pfid; }; -static struct channel_packet policy; +static struct rte_power_channel_packet policy; -struct channel_packet * +struct rte_power_channel_packet *get_policy (void ) {return &policy;
@@ -49,7 +49,7 @@ get_policy(void)int set_policy_mac (int port,int idx) { -struct channel_packet *policy; +struct rte_power_channel_packet *policy;union PFID pfid;int ret;
@@ -73,7 +73,7 @@ set_policy_mac(int port, int idx) }int -set_policy_defaults (struct channel_packet *pkt) +set_policy_defaults (struct rte_power_channel_packet *pkt) {int ret;
@@ -145,7 +145,7 @@ struct cmd_freq_list_result { };static int -query_data (struct channel_packet *pkt,unsigned int lcore_id) +query_data (struct rte_power_channel_packet *pkt,unsigned int lcore_id) {int ret; ret =rte_power_guest_channel_send_msg (pkt, lcore_id);
@@ -157,13 +157,13 @@ query_data(struct channel_packet *pkt, unsigned int lcore_id) }static int -receive_freq_list (struct channel_packet_freq_list *pkt_freq_list, +receive_freq_list (struct rte_power_channel_packet_freq_list *pkt_freq_list,unsigned int lcore_id) {int ret; ret =rte_power_guest_channel_receive_msg (pkt_freq_list, -sizeof (struct channel_packet_freq_list ), +sizeof (struct rte_power_channel_packet_freq_list ), lcore_id);if (ret <0 ) {RTE_LOG (ERR ,GUEST_CLI ,"Error receiving message.\n" );
@@ -183,14 +183,15 @@ cmd_query_freq_list_parsed(void *parsed_result, {struct cmd_freq_list_result *res = parsed_result;unsigned int lcore_id; -struct channel_packet_freq_list pkt_freq_list; -struct channel_packet pkt; +struct rte_power_channel_packet_freq_list pkt_freq_list; +struct rte_power_channel_packet pkt;bool query_list = false;int ret;char *ep; -memset (&pkt,0 ,sizeof (struct channel_packet )); -memset (&pkt_freq_list,0 ,sizeof (struct channel_packet_freq_list )); +memset (&pkt,0 ,sizeof (struct rte_power_channel_packet )); +memset (&pkt_freq_list,0 , +sizeof (struct rte_power_channel_packet_freq_list ));if (!strcmp (res->cpu_num,"all" )) {
@@ -267,13 +268,13 @@ struct cmd_query_caps_result { };static int -receive_capabilities (struct channel_packet_caps_list *pkt_caps_list, +receive_capabilities (struct rte_power_channel_packet_caps_list *pkt_caps_list,unsigned int lcore_id) {int ret; ret =rte_power_guest_channel_receive_msg (pkt_caps_list, -sizeof (struct channel_packet_caps_list ), +sizeof (struct rte_power_channel_packet_caps_list ), lcore_id);if (ret <0 ) {RTE_LOG (ERR ,GUEST_CLI ,"Error receiving message.\n" );
@@ -293,14 +294,15 @@ cmd_query_caps_list_parsed(void *parsed_result, {struct cmd_query_caps_result *res = parsed_result;unsigned int lcore_id; -struct channel_packet_caps_list pkt_caps_list; -struct channel_packet pkt; +struct rte_power_channel_packet_caps_list pkt_caps_list; +struct rte_power_channel_packet pkt;bool query_list = false;int ret;char *ep; -memset (&pkt,0 ,sizeof (struct channel_packet )); -memset (&pkt_caps_list,0 ,sizeof (struct channel_packet_caps_list )); +memset (&pkt,0 ,sizeof (struct rte_power_channel_packet )); +memset (&pkt_caps_list,0 , +sizeof (struct rte_power_channel_packet_caps_list ));if (!strcmp (res->cpu_num,"all" )) {
@@ -380,7 +382,7 @@ cmdline_parse_inst_t cmd_query_caps_list = {static int check_response_cmd (unsigned int lcore_id,int *result) { -struct channel_packet pkt; +struct rte_power_channel_packet pkt;int ret; ret =rte_power_guest_channel_receive_msg (&pkt,sizeof pkt, lcore_id);
@@ -473,7 +475,7 @@ struct cmd_send_policy_result { };static inline int -send_policy (struct channel_packet *pkt,struct cmdline *cl) +send_policy (struct rte_power_channel_packet *pkt,struct cmdline *cl) {int ret;
examples/vm_power_manager/guest_cli/vm_power_cli_guest.h +2 -2
@@ -11,11 +11,11 @@ extern "C" {#include "rte_power_guest_channel.h" -struct channel_packet *get_policy (void ); +struct rte_power_channel_packet *get_policy (void );int set_policy_mac (int port,int idx); -int set_policy_defaults (struct channel_packet *pkt); +int set_policy_defaults (struct rte_power_channel_packet *pkt); void run_cli(__rte_unused void *arg);
lib/librte_power/guest_channel.c +4 -3
@@ -55,7 +55,7 @@ int guest_channel_host_connect(const char *path, unsigned int lcore_id) { int flags, ret; -struct channel_packet pkt; +struct rte_power_channel_packet pkt;char fd_path[PATH_MAX ];int fd =-1 ;
@@ -119,7 +119,8 @@ guest_channel_host_connect(const char *path, unsigned int lcore_id) }int -guest_channel_send_msg (struct channel_packet *pkt,unsigned int lcore_id) +guest_channel_send_msg (struct rte_power_channel_packet *pkt, +unsigned int lcore_id) {int ret, buffer_len =sizeof (*pkt);void *buffer = pkt;
@@ -149,7 +150,7 @@ guest_channel_send_msg(struct channel_packet *pkt, unsigned int lcore_id)return 0 ; } -int rte_power_guest_channel_send_msg (struct channel_packet *pkt, +int rte_power_guest_channel_send_msg (struct rte_power_channel_packet *pkt,unsigned int lcore_id) {return guest_channel_send_msg (pkt, lcore_id);
lib/librte_power/guest_channel.h +4 -3
@@ -63,7 +63,8 @@ void guest_channel_host_disconnect(unsigned int lcore_id);* - Negative on channel not connected. * - errno on write to channel error. */ -int guest_channel_send_msg (struct channel_packet *pkt,unsigned int lcore_id); +int guest_channel_send_msg (struct rte_power_channel_packet *pkt, +unsigned int lcore_id);
@@ -72,8 +73,8 @@ int guest_channel_send_msg(struct channel_packet *pkt, unsigned int lcore_id);* from the host endpoint. * * @param pkt -* Pointer to channel_packet or -* channel_packet_freq_list struct. +* Pointer to rte_power_channel_packet or +* rte_power_channel_packet_freq_list struct. * * @param pkt_len * Size of expected data packet.
lib/librte_power/power_kvm_vm.c +1 -1
@@ -13,7 +13,7 @@#define FD_PATH "/dev/virtio-ports/virtio.serial.port.poweragent" -static struct channel_packet pkt[RTE_MAX_LCORE ]; +static struct rte_power_channel_packet pkt[RTE_MAX_LCORE ];int power_kvm_vm_check_supported (void )
lib/librte_power/rte_power_guest_channel.h +24 -27
109 lines not on this page · raw message
Signature · 1 line
2.17.1
PATCH v2 4/6 power: rename defines
In reply to David HuntFrom: Bruce Richardson <[email protected]>
Rename the #defines to have an RTE_POWER_ prefix
--- examples/vm_power_manager/channel_monitor.c | 116 +++++++++--------- examples/vm_power_manager/channel_monitor.h | 6 +- examples/vm_power_manager/guest_cli/main.c | 29 +++-- .../guest_cli/vm_power_cli_guest.c | 28 ++--- examples/vm_power_manager/main.c | 2 +- lib/librte_power/guest_channel.c | 2 +- lib/librte_power/power_kvm_vm.c | 14 +-- lib/librte_power/rte_power_guest_channel.h | 98 +++++++-------- 8 files changed, 155 insertions(+), 140 deletions(-)
examples/vm_power_manager/channel_monitor.c +61 -55
@@ -177,10 +177,10 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt, pkt->nb_mac_to_monitor =0 ; pkt->t_boost_status.tbEnabled = false; - pkt->workload =LOW ; - pkt->policy_to_use =TIME ; - pkt->command =PKT_POLICY ; - pkt->core_type =CORE_TYPE_PHYSICAL ; + pkt->workload =RTE_POWER_WL_LOW ; + pkt->policy_to_use =RTE_POWER_POLICY_TIME ; + pkt->command =RTE_POWER_PKT_POLICY ; + pkt->core_type =RTE_POWER_CORE_TYPE_PHYSICAL ;if (vm_name ==NULL ) { RTE_LOG(ERR, CHANNEL_MONITOR,
@@ -203,11 +203,11 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt,char command[32 ];strlcpy (command,json_string_value (value),32 );if (!strcmp (command,"power" )) { - pkt->command =CPU_POWER ; + pkt->command =RTE_POWER_CPU_POWER ; }else if (!strcmp (command,"create" )) { - pkt->command =PKT_POLICY ; + pkt->command =RTE_POWER_PKT_POLICY ; }else if (!strcmp (command,"destroy" )) { - pkt->command =PKT_POLICY_REMOVE ; + pkt->command =RTE_POWER_PKT_POLICY_REMOVE ; }else {RTE_LOG (ERR ,CHANNEL_MONITOR ,"Invalid command received in JSON\n" );
@@ -217,13 +217,17 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt,char command[32 ];strlcpy (command,json_string_value (value),32 );if (!strcmp (command,"TIME" )) { - pkt->policy_to_use =TIME ; + pkt->policy_to_use = +RTE_POWER_POLICY_TIME ; }else if (!strcmp (command,"TRAFFIC" )) { - pkt->policy_to_use =TRAFFIC ; + pkt->policy_to_use = +RTE_POWER_POLICY_TRAFFIC ; }else if (!strcmp (command,"WORKLOAD" )) { - pkt->policy_to_use =WORKLOAD ; + pkt->policy_to_use = +RTE_POWER_POLICY_WORKLOAD ; }else if (!strcmp (command,"BRANCH_RATIO" )) { - pkt->policy_to_use =BRANCH_RATIO ; + pkt->policy_to_use = +RTE_POWER_POLICY_BRANCH_RATIO ; }else {RTE_LOG (ERR ,CHANNEL_MONITOR ,"Wrong policy_type received in JSON\n" );
@@ -233,11 +237,11 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt,char command[32 ];strlcpy (command,json_string_value (value),32 );if (!strcmp (command,"HIGH" )) { - pkt->workload =HIGH ; + pkt->workload =RTE_POWER_WL_HIGH ; }else if (!strcmp (command,"MEDIUM" )) { - pkt->workload =MEDIUM ; + pkt->workload =RTE_POWER_WL_MEDIUM ; }else if (!strcmp (command,"LOW" )) { - pkt->workload =LOW ; + pkt->workload =RTE_POWER_WL_LOW ; }else {RTE_LOG (ERR ,CHANNEL_MONITOR ,"Wrong workload received in JSON\n" );
@@ -283,17 +287,17 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt,char unit[32 ];strlcpy (unit,json_string_value (value),32 );if (!strcmp (unit,"SCALE_UP" )) { - pkt->unit =CPU_POWER_SCALE_UP ; + pkt->unit =RTE_POWER_SCALE_UP ; }else if (!strcmp (unit,"SCALE_DOWN" )) { - pkt->unit =CPU_POWER_SCALE_DOWN ; + pkt->unit =RTE_POWER_SCALE_DOWN ; }else if (!strcmp (unit,"SCALE_MAX" )) { - pkt->unit =CPU_POWER_SCALE_MAX ; + pkt->unit =RTE_POWER_SCALE_MAX ; }else if (!strcmp (unit,"SCALE_MIN" )) { - pkt->unit =CPU_POWER_SCALE_MIN ; + pkt->unit =RTE_POWER_SCALE_MIN ; }else if (!strcmp (unit,"ENABLE_TURBO" )) { - pkt->unit =CPU_POWER_ENABLE_TURBO ; + pkt->unit =RTE_POWER_ENABLE_TURBO ; }else if (!strcmp (unit,"DISABLE_TURBO" )) { - pkt->unit =CPU_POWER_DISABLE_TURBO ; + pkt->unit =RTE_POWER_DISABLE_TURBO ; }else {RTE_LOG (ERR ,CHANNEL_MONITOR ,"Invalid command received in JSON\n" );
@@ -312,7 +316,7 @@ parse_json_to_pkt(json_t *element, struct rte_power_channel_packet *pkt, vm_name);return -1 ; } -strlcpy (pkt->vm_name, vm_name,VM_MAX_NAME_SZ ); +strlcpy (pkt->vm_name, vm_name,RTE_POWER_VM_MAX_NAME_SZ ); pkt->resource_id = resource_id; }return 0 ;
@@ -367,7 +371,7 @@ pcpu_monitor(struct policy *pol, struct core_info *ci, int pcpu, int count) {int ret =0 ; -if (pol->pkt.policy_to_use ==BRANCH_RATIO ) { +if (pol->pkt.policy_to_use ==RTE_POWER_POLICY_BRANCH_RATIO ) { ci->cd[pcpu].oob_enabled =1 ; ret =add_core_to_monitor (pcpu);if (ret ==0 )
@@ -407,7 +411,7 @@ get_pcpu_to_control(struct policy *pol)* differenciate between them when adding them to the branch monitor. * Virtual cores need to be converted to physical cores. */ -if (pol->pkt.core_type ==CORE_TYPE_VIRTUAL ) { +if (pol->pkt.core_type ==RTE_POWER_CORE_TYPE_VIRTUAL ) {/* * If the cores in the policy are virtual, we need to map them * to physical core. We look up the vm info and use that for
@@ -479,7 +483,8 @@ update_policy(struct rte_power_channel_packet *pkt) policies[i].pkt = *pkt;get_pcpu_to_control (&policies[i]);/* Check Eth dev only for Traffic policy */ -if (policies[i].pkt.policy_to_use ==TRAFFIC ) { +if (policies[i].pkt.policy_to_use == +RTE_POWER_POLICY_TRAFFIC ) {if (get_pfid (&policies[i]) <0 ) { updated =1 ;break ;
@@ -496,7 +501,8 @@ update_policy(struct rte_power_channel_packet *pkt) policies[i].pkt = *pkt;get_pcpu_to_control (&policies[i]);/* Check Eth dev only for Traffic policy */ -if (policies[i].pkt.policy_to_use ==TRAFFIC ) { +if (policies[i].pkt.policy_to_use == +RTE_POWER_POLICY_TRAFFIC ) {if (get_pfid (&policies[i]) <0 ) { updated =1 ;break ;
@@ -615,7 +621,7 @@ apply_time_profile(struct policy *pol)/* Format the date and time, down to a single second. */ strftime (time_string,sizeof (time_string),"%Y-%m-%d %H:%M:%S" , ptm); -for (x =0 ; x <HOURS ; x++) { +for (x =0 ; x <RTE_POWER_HOURS_PER_DAY ; x++) {if (ptm->tm_hour == pol->pkt.timer_policy.busy_hours[x]) {for (count =0 ; count < pol->pkt.num_vcpu; count++) {
@@ -648,19 +654,19 @@ apply_workload_profile(struct policy *pol)int count; -if (pol->pkt.workload ==HIGH ) { +if (pol->pkt.workload ==RTE_POWER_WL_HIGH ) {for (count =0 ; count < pol->pkt.num_vcpu; count++) {if (pol->core_share[count].status !=1 )power_manager_scale_core_max ( pol->core_share[count].pcpu); } - }else if (pol->pkt.workload ==MEDIUM ) { + }else if (pol->pkt.workload ==RTE_POWER_WL_MEDIUM ) {for (count =0 ; count < pol->pkt.num_vcpu; count++) {if (pol->core_share[count].status !=1 )power_manager_scale_core_med ( pol->core_share[count].pcpu); } - }else if (pol->pkt.workload ==LOW ) { + }else if (pol->pkt.workload ==RTE_POWER_WL_LOW ) {for (count =0 ; count < pol->pkt.num_vcpu; count++) {if (pol->core_share[count].status !=1 ) power_manager_scale_core_min(
@@ -676,11 +682,11 @@ apply_policy(struct policy *pol)struct rte_power_channel_packet *pkt = &pol->pkt;/*Check policy to use*/ -if (pkt->policy_to_use ==TRAFFIC ) +if (pkt->policy_to_use ==RTE_POWER_POLICY_TRAFFIC )apply_traffic_profile (pol); -else if (pkt->policy_to_use ==TIME ) +else if (pkt->policy_to_use ==RTE_POWER_POLICY_TIME )apply_time_profile (pol); -else if (pkt->policy_to_use ==WORKLOAD ) +else if (pkt->policy_to_use ==RTE_POWER_POLICY_WORKLOAD )apply_workload_profile (pol); }
@@ -726,13 +732,13 @@ send_freq(struct rte_power_channel_packet *pkt,if (get_info_vm (pkt->vm_name, &info) !=0 )return -1 ; -if (!freq_list && vcore_id >=MAX_VCPU_PER_VM ) +if (!freq_list && vcore_id >=RTE_POWER_MAX_VCPU_PER_VM )return -1 ;if (!info.allow_query)return -1 ; - channel_pkt_freq_list.command =CPU_POWER_FREQ_LIST ; + channel_pkt_freq_list.command =RTE_POWER_FREQ_LIST ; channel_pkt_freq_list.num_vcpu = info.num_vcpus;if (freq_list) {
@@ -764,13 +770,13 @@ send_capabilities(struct rte_power_channel_packet *pkt,if (get_info_vm (pkt->vm_name, &info) !=0 )return -1 ; -if (!list_requested && vcore_id >=MAX_VCPU_PER_VM ) +if (!list_requested && vcore_id >=RTE_POWER_MAX_VCPU_PER_VM )return -1 ;if (!info.allow_query)return -1 ; - channel_pkt_caps_list.command =CPU_POWER_CAPS_LIST ; + channel_pkt_caps_list.command =RTE_POWER_CAPS_LIST ; channel_pkt_caps_list.num_vcpu = info.num_vcpus;if (list_requested) {
@@ -828,10 +834,10 @@ process_request(struct rte_power_channel_packet *pkt, CHANNEL_MGR_CHANNEL_PROCESSING) == 0)return -1 ; -if (pkt->command ==CPU_POWER ) { +if (pkt->command ==RTE_POWER_CPU_POWER ) {unsigned int core_num; -if (pkt->core_type ==CORE_TYPE_VIRTUAL ) +if (pkt->core_type ==RTE_POWER_CORE_TYPE_VIRTUAL ) core_num =get_pcpu (chan_info, pkt->resource_id);else core_num = pkt->resource_id;
@@ -843,22 +849,22 @@ process_request(struct rte_power_channel_packet *pkt,bool valid_unit = true;switch (pkt->unit) { -case (CPU_POWER_SCALE_MIN ): +case (RTE_POWER_SCALE_MIN ): scale_res =power_manager_scale_core_min (core_num);break ; -case (CPU_POWER_SCALE_MAX ): +case (RTE_POWER_SCALE_MAX ): scale_res =power_manager_scale_core_max (core_num);break ; -case (CPU_POWER_SCALE_DOWN ): +case (RTE_POWER_SCALE_DOWN ): scale_res =power_manager_scale_core_down (core_num);break ; -case (CPU_POWER_SCALE_UP ): +case (RTE_POWER_SCALE_UP ): scale_res =power_manager_scale_core_up (core_num);break ; -case (CPU_POWER_ENABLE_TURBO ): +case (RTE_POWER_ENABLE_TURBO ): scale_res =power_manager_enable_turbo_core (core_num);break ; -case (CPU_POWER_DISABLE_TURBO ): +case (RTE_POWER_DISABLE_TURBO ): scale_res =power_manager_disable_turbo_core (core_num);break ;default :
@@ -870,8 +876,8 @@ process_request(struct rte_power_channel_packet *pkt, ret =send_ack_for_received_cmd (pkt, chan_info, scale_res >=0 ? -CPU_POWER_CMD_ACK : -CPU_POWER_CMD_NACK ); +RTE_POWER_CMD_ACK : +RTE_POWER_CMD_NACK );if (ret <0 )RTE_LOG (ERR ,CHANNEL_MONITOR ,"Error during sending ack command.\n" ); }else
@@ -879,19 +885,19 @@ process_request(struct rte_power_channel_packet *pkt, } -if (pkt->command ==PKT_POLICY ) { +if (pkt->command ==RTE_POWER_PKT_POLICY ) {RTE_LOG (INFO ,CHANNEL_MONITOR ,"Processing policy request %s\n" , pkt->vm_name);int ret =send_ack_for_received_cmd (pkt, chan_info, -CPU_POWER_CMD_ACK ); +RTE_POWER_CMD_ACK );if (ret <0 )RTE_LOG (ERR ,CHANNEL_MONITOR ,"Error during sending ack command.\n" );update_policy (pkt); policy_is_set =1 ; } -if (pkt->command ==PKT_POLICY_REMOVE ) { +if (pkt->command ==RTE_POWER_PKT_POLICY_REMOVE ) { ret =remove_policy (pkt);if (ret ==0 ) RTE_LOG(INFO, CHANNEL_MONITOR,
@@ -901,26 +907,26 @@ process_request(struct rte_power_channel_packet *pkt, "Policy %s does not exist\n", pkt->vm_name); } -if (pkt->command ==CPU_POWER_QUERY_FREQ_LIST || - pkt->command ==CPU_POWER_QUERY_FREQ ) { +if (pkt->command ==RTE_POWER_QUERY_FREQ_LIST || + pkt->command ==RTE_POWER_QUERY_FREQ ) {RTE_LOG (INFO ,CHANNEL_MONITOR ,"Frequency for %s requested.\n" , pkt->vm_name);int ret =send_freq (pkt, chan_info, - pkt->command ==CPU_POWER_QUERY_FREQ_LIST ); + pkt->command ==RTE_POWER_QUERY_FREQ_LIST );if (ret <0 )RTE_LOG (ERR ,CHANNEL_MONITOR ,"Error during frequency sending.\n" ); } -if (pkt->command ==CPU_POWER_QUERY_CAPS_LIST || - pkt->command ==CPU_POWER_QUERY_CAPS ) { +if (pkt->command ==RTE_POWER_QUERY_CAPS_LIST || + pkt->command ==RTE_POWER_QUERY_CAPS ) {RTE_LOG (INFO ,CHANNEL_MONITOR ,"Capabilities for %s requested.\n" , pkt->vm_name);int ret =send_capabilities (pkt, chan_info, - pkt->command ==CPU_POWER_QUERY_CAPS_LIST ); + pkt->command ==RTE_POWER_QUERY_CAPS_LIST );if (ret <0 )RTE_LOG (ERR ,CHANNEL_MONITOR ,"Error during sending capabilities.\n" ); }
examples/vm_power_manager/channel_monitor.h +3 -3
@@ -19,10 +19,10 @@ struct core_share {struct policy {struct rte_power_channel_packet pkt; -uint32_t pfid[MAX_VFS ]; -uint32_t port[MAX_VFS ]; +uint32_t pfid[RTE_POWER_MAX_VFS ]; +uint32_t port[RTE_POWER_MAX_VFS ];unsigned int enabled; -struct core_share core_share[MAX_VCPU_PER_VM ]; +struct core_share core_share[RTE_POWER_MAX_VCPU_PER_VM ]; };#ifdef __cplusplus
examples/vm_power_manager/guest_cli/main.c +18 -11
@@ -50,8 +50,8 @@ parse_args(int argc, char **argv) };struct rte_power_channel_packet *policy;unsigned short int hours[MAX_HOURS ]; -unsigned short int cores[MAX_VCPU_PER_VM ]; -unsigned short int ports[MAX_VCPU_PER_VM ]; +unsigned short int cores[RTE_POWER_MAX_VCPU_PER_VM ]; +unsigned short int ports[RTE_POWER_MAX_VCPU_PER_VM ];int i, cnt, idx; policy =get_policy ();
@@ -69,7 +69,8 @@ parse_args(int argc, char **argv)switch (opt) {/* portmask */ case 'n' : -strlcpy (policy->vm_name, optarg,VM_MAX_NAME_SZ ); +strlcpy (policy->vm_name, optarg, +RTE_POWER_VM_MAX_NAME_SZ );printf ("Setting VM Name to [%s]\n" , policy->vm_name);break ;case 'b' :
@@ -97,14 +98,15 @@ parse_args(int argc, char **argv) }break ;case 'l' : - cnt =parse_set (optarg, cores,MAX_VCPU_PER_VM ); + cnt =parse_set (optarg, cores, +RTE_POWER_MAX_VCPU_PER_VM );if (cnt <0 ) {printf ("Invalid value passed to vcpu-list - [%s]\n" , optarg);break ; } idx =0 ; -for (i =0 ; i <MAX_VCPU_PER_VM ; i++) { +for (i =0 ; i <RTE_POWER_MAX_VCPU_PER_VM ; i++) {if (cores[i]) {printf ("***Using core %d\n" , i); policy->vcpu_to_control[idx++] = i;
@@ -114,14 +116,15 @@ parse_args(int argc, char **argv)printf ("Total cores: %d\n" , idx);break ;case 'p' : - cnt =parse_set (optarg, ports,MAX_VCPU_PER_VM ); + cnt =parse_set (optarg, ports, +RTE_POWER_MAX_VCPU_PER_VM );if (cnt <0 ) {printf ("Invalid value passed to port-list - [%s]\n" , optarg);break ; } idx =0 ; -for (i =0 ; i <MAX_VCPU_PER_VM ; i++) { +for (i =0 ; i <RTE_POWER_MAX_VCPU_PER_VM ; i++) {if (ports[i]) {printf ("***Using port %d\n" , i);if (set_policy_mac (i, idx++) !=0 ) {
@@ -135,13 +138,17 @@ parse_args(int argc, char **argv)break ;case 'o' :if (!strcmp (optarg,"TRAFFIC" )) - policy->policy_to_use =TRAFFIC ; + policy->policy_to_use = +RTE_POWER_POLICY_TRAFFIC ;else if (!strcmp (optarg,"TIME" )) - policy->policy_to_use =TIME ; + policy->policy_to_use = +RTE_POWER_POLICY_TIME ;else if (!strcmp (optarg,"WORKLOAD" )) - policy->policy_to_use =WORKLOAD ; + policy->policy_to_use = +RTE_POWER_POLICY_WORKLOAD ;else if (!strcmp (optarg,"BRANCH_RATIO" )) - policy->policy_to_use =BRANCH_RATIO ; + policy->policy_to_use = +RTE_POWER_POLICY_BRANCH_RATIO ;else {printf ("Invalid policy specified: %s\n" , optarg);
examples/vm_power_manager/guest_cli/vm_power_cli_guest.c +14 -14
@@ -103,10 +103,10 @@ set_policy_defaults(struct rte_power_channel_packet *pkt) pkt->timer_policy.hours_to_use_traffic_profile[0 ] =8 ; pkt->timer_policy.hours_to_use_traffic_profile[1 ] =10 ; - pkt->core_type =CORE_TYPE_VIRTUAL ; - pkt->workload =LOW ; - pkt->policy_to_use =TIME ; - pkt->command =PKT_POLICY ; + pkt->core_type =RTE_POWER_CORE_TYPE_VIRTUAL ; + pkt->workload =RTE_POWER_WL_LOW ; + pkt->policy_to_use =RTE_POWER_POLICY_TIME ; + pkt->command =RTE_POWER_PKT_POLICY ;strlcpy (pkt->vm_name,"ubuntu2" ,sizeof (pkt->vm_name));return 0 ;
@@ -169,7 +169,7 @@ receive_freq_list(struct rte_power_channel_packet_freq_list *pkt_freq_list,RTE_LOG (ERR ,GUEST_CLI ,"Error receiving message.\n" );return -1 ; } -if (pkt_freq_list->command !=CPU_POWER_FREQ_LIST ) { +if (pkt_freq_list->command !=RTE_POWER_FREQ_LIST ) {RTE_LOG (ERR ,GUEST_CLI ,"Unexpected message received.\n" );return -1 ; }
@@ -204,18 +204,18 @@ cmd_query_freq_list_parsed(void *parsed_result,return ; } - pkt.command =CPU_POWER_QUERY_FREQ_LIST ; + pkt.command =RTE_POWER_QUERY_FREQ_LIST ;strlcpy (pkt.vm_name, policy.vm_name,sizeof (pkt.vm_name)); query_list = true; }else { errno =0 ; lcore_id = (unsigned int )strtol (res->cpu_num, &ep,10 ); -if (errno !=0 || lcore_id >=MAX_VCPU_PER_VM || +if (errno !=0 || lcore_id >=RTE_POWER_MAX_VCPU_PER_VM || ep == res->cpu_num) {cmdline_printf (cl,"Invalid parameter provided.\n" );return ; } - pkt.command =CPU_POWER_QUERY_FREQ ; + pkt.command =RTE_POWER_QUERY_FREQ ;strlcpy (pkt.vm_name, policy.vm_name,sizeof (pkt.vm_name)); pkt.resource_id = lcore_id; }
@@ -280,7 +280,7 @@ receive_capabilities(struct rte_power_channel_packet_caps_list *pkt_caps_list,RTE_LOG (ERR ,GUEST_CLI ,"Error receiving message.\n" );return -1 ; } -if (pkt_caps_list->command !=CPU_POWER_CAPS_LIST ) { +if (pkt_caps_list->command !=RTE_POWER_CAPS_LIST ) {RTE_LOG (ERR ,GUEST_CLI ,"Unexpected message received.\n" );return -1 ; }
@@ -315,18 +315,18 @@ cmd_query_caps_list_parsed(void *parsed_result,return ; } - pkt.command =CPU_POWER_QUERY_CAPS_LIST ; + pkt.command =RTE_POWER_QUERY_CAPS_LIST ;strlcpy (pkt.vm_name, policy.vm_name,sizeof (pkt.vm_name)); query_list = true; }else { errno =0 ; lcore_id = (unsigned int )strtol (res->cpu_num, &ep,10 ); -if (errno !=0 || lcore_id >=MAX_VCPU_PER_VM || +if (errno !=0 || lcore_id >=RTE_POWER_MAX_VCPU_PER_VM || ep == res->cpu_num) {cmdline_printf (cl,"Invalid parameter provided.\n" );return ; } - pkt.command =CPU_POWER_QUERY_CAPS ; + pkt.command =RTE_POWER_QUERY_CAPS ;strlcpy (pkt.vm_name, policy.vm_name,sizeof (pkt.vm_name)); pkt.resource_id = lcore_id; }
@@ -390,10 +390,10 @@ check_response_cmd(unsigned int lcore_id, int *result)return -1 ;switch (pkt.command) { -case (CPU_POWER_CMD_ACK ): +case (RTE_POWER_CMD_ACK ): *result =1 ;break ; -case (CPU_POWER_CMD_NACK ): +case (RTE_POWER_CMD_NACK ): *result =0 ;break ;default :
examples/vm_power_manager/main.c +1 -1
@@ -394,7 +394,7 @@ main(int argc, char **argv)"Cannot init port %" PRIu8"\n" , portid); -for (w =0 ; w <MAX_VFS ; w++) { +for (w =0 ; w <RTE_POWER_MAX_VFS ; w++) { eth.addr_bytes[5 ] = w +0xf0 ; ret = -ENOTSUP ;
lib/librte_power/guest_channel.c +1 -1
@@ -100,7 +100,7 @@ guest_channel_host_connect(const char *path, unsigned int lcore_id)/* Send a test packet, this command is ignored by the host, but a successful * send indicates that the host endpoint is monitoring. */ - pkt.command =CPU_POWER_CONNECT ; + pkt.command =RTE_POWER_CPU_POWER_CONNECT ; global_fds[lcore_id] = fd; ret =guest_channel_send_msg (&pkt, lcore_id);if (ret !=0 ) {
lib/librte_power/power_kvm_vm.c +7 -7
@@ -29,7 +29,7 @@ power_kvm_vm_init(unsigned int lcore_id) lcore_id, RTE_MAX_LCORE-1);return -1 ; } - pkt[lcore_id].command =CPU_POWER ; + pkt[lcore_id].command =RTE_POWER_CPU_POWER ; pkt[lcore_id].resource_id = lcore_id;return guest_channel_host_connect (FD_PATH , lcore_id); }
@@ -90,25 +90,25 @@ send_msg(unsigned int lcore_id, uint32_t scale_direction)int power_kvm_vm_freq_up (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_SCALE_UP ); +return send_msg (lcore_id,RTE_POWER_SCALE_UP ); }int power_kvm_vm_freq_down (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_SCALE_DOWN ); +return send_msg (lcore_id,RTE_POWER_SCALE_DOWN ); }int power_kvm_vm_freq_max (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_SCALE_MAX ); +return send_msg (lcore_id,RTE_POWER_SCALE_MAX ); }int power_kvm_vm_freq_min (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_SCALE_MIN ); +return send_msg (lcore_id,RTE_POWER_SCALE_MIN ); }int
@@ -121,13 +121,13 @@ power_kvm_vm_turbo_status(__rte_unused unsigned int lcore_id)int power_kvm_vm_enable_turbo (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_ENABLE_TURBO ); +return send_msg (lcore_id,RTE_POWER_ENABLE_TURBO ); }int power_kvm_vm_disable_turbo (unsigned int lcore_id) { -return send_msg (lcore_id,CPU_POWER_DISABLE_TURBO ); +return send_msg (lcore_id,RTE_POWER_DISABLE_TURBO ); }struct rte_power_core_capabilities ;
lib/librte_power/rte_power_guest_channel.h +50 -48
144 lines not on this page · raw message
Signature · 1 line
2.17.1
PATCH v2 5/6 power: add new header file to export list
In reply to David HuntFrom: Bruce Richardson <[email protected]>
Adjust meson.build so that 'ninja install' copies the new header file into the installation directory.
--- lib/librte_power/meson.build | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
lib/librte_power/meson.build +2 -1
@@ -10,5 +10,6 @@ sources = files('rte_power.c', 'power_acpi_cpufreq.c', 'rte_power_empty_poll.c', 'power_pstate_cpufreq.c', 'power_common.c') -headers = files('rte_power.h','rte_power_empty_poll.h') +headers = files('rte_power.h','rte_power_empty_poll.h', + 'rte_power_guest_channel.h') deps += ['timer']
Signature · 1 line
2.17.1
PATCH v2 6/6 power: clean up includes
In reply to David HuntFrom: Bruce Richardson <[email protected]>
re-organise the including of the new public header file and remove un-needed includes
--- examples/vm_power_manager/channel_manager.c | 1 - examples/vm_power_manager/channel_monitor.c | 1 - examples/vm_power_manager/channel_monitor.h | 2 +- examples/vm_power_manager/guest_cli/vm_power_cli_guest.c | 1 - examples/vm_power_manager/guest_cli/vm_power_cli_guest.h | 2 -- examples/vm_power_manager/vm_power_cli.c | 1 - lib/librte_power/guest_channel.c | 2 +- lib/librte_power/guest_channel.h | 2 -- lib/librte_power/power_kvm_vm.c | 2 +- lib/librte_power/rte_power.h | 1 + lib/librte_power/rte_power_guest_channel.h | 3 --- 11 files changed, 4 insertions(+), 14 deletions(-)
examples/vm_power_manager/channel_manager.c +0 -1
@@ -27,7 +27,6 @@#include <libvirt/libvirt.h> #include "channel_manager.h" -#include "rte_power_guest_channel.h" #include "channel_monitor.h" #include "power_manager.h"
examples/vm_power_manager/channel_monitor.c +0 -1
@@ -35,7 +35,6 @@#include <libvirt/libvirt.h> #include "channel_monitor.h" -#include "rte_power_guest_channel.h" #include "channel_manager.h" #include "power_manager.h" #include "oob_monitor.h"
examples/vm_power_manager/channel_monitor.h +1 -1
@@ -5,8 +5,8 @@ #ifndef CHANNEL_MONITOR_H_ #define CHANNEL_MONITOR_H_ +#include <rte_power.h> #include "channel_manager.h" -#include "rte_power_guest_channel.h" struct core_share { unsigned int pcpu;
examples/vm_power_manager/guest_cli/vm_power_cli_guest.c +0 -1
@@ -19,7 +19,6 @@#include <rte_ethdev.h> #include <rte_power.h> -#include <guest_channel.h> #include "vm_power_cli_guest.h"
examples/vm_power_manager/guest_cli/vm_power_cli_guest.h +0 -2
@@ -9,8 +9,6 @@extern "C" {#endif -#include "rte_power_guest_channel.h" -struct rte_power_channel_packet *get_policy (void );int set_policy_mac (int port,int idx);
examples/vm_power_manager/vm_power_cli.c +0 -1
@@ -21,7 +21,6 @@#include "channel_manager.h" #include "channel_monitor.h" #include "power_manager.h" -#include "rte_power_guest_channel.h" struct cmd_quit_result {cmdline_fixed_string_t quit;
lib/librte_power/guest_channel.c +1 -1
@@ -15,9 +15,9 @@#include <rte_log.h> +#include <rte_power.h> #include "guest_channel.h" -#include "rte_power_guest_channel.h" #define RTE_LOGTYPE_GUEST_CHANNEL RTE_LOGTYPE_USER1
lib/librte_power/guest_channel.h +0 -2
@@ -8,8 +8,6 @@extern "C" {#endif -#include <rte_power_guest_channel.h> -/** * Check if any Virtio-Serial VM end-points exist in path. *
lib/librte_power/power_kvm_vm.c +1 -1
@@ -6,8 +6,8 @@#include <rte_log.h> -#include "guest_channel.h" #include "rte_power_guest_channel.h" +#include "guest_channel.h" #include "power_kvm_vm.h" #include "power_common.h"
lib/librte_power/rte_power.h +1 -0
@@ -14,6 +14,7 @@#include <rte_byteorder.h> #include <rte_log.h> #include <rte_string_fns.h> +#include <rte_power_guest_channel.h> #ifdef __cplusplusextern "C" {
lib/librte_power/rte_power_guest_channel.h +0 -3
@@ -8,9 +8,6 @@extern "C" {#endif -#include <stdint.h> -#include <stdbool.h> -#define RTE_POWER_MAX_VFS 10#define RTE_POWER_VM_MAX_NAME_SZ 32#define RTE_POWER_MAX_VCPU_PER_VM 8
Signature · 1 line
2.17.1
Quoted 22 lines · David Hunt
The power example applications that uses the virtio-serial method of communication cannot currently be built with make, and can only be built using meson/ninja.
The guest channel message definitions and functions in
guest_channel.hare needed by applications and need to be made public.This worked pre-20.11, but now with all the meson/ninja changes, making these apps externally no longer works. To fix, we need to move the header file with the API definitions for the channel commands public, and rename the functions accordingly.
The main change is to rename
channel_commands.htorte_power_guest_channel.hso that it gets picked up by the installer and copied to/usr/local/include. Other changes include renaming #defines to haveRTE_at the beginning instead ofCPU_. Finally we refactor the code to work with those changes.---
v2 changes
- re-worked from monolithic patch to a 6 patch patchset for easier review
Quoted 7 lines
[PATCH v2 1/6] power: create guest channel public header file [PATCH v2 2/6] power: make channel msg functions public [PATCH v2 3/6] power: rename public structs
[PATCH v2 4/6] power: rename defines
[PATCH v2 5/6] power: add new header file to export list [PATCH v2 6/6] power: clean up includes
Just a general question: wouldn't it be better to move this stuff entirely into sample app and not bother with keeping it in the library? There is precedent - ethtool app has a "library" and an "application" part, i think you should be able to move it out of the library and into the sample app entirely without too much trouble, as code looks to be fairly self-contained.
Signature · 2 lines
Thanks, Anatoly
Hi Anatoly,
Quoted 31 lines · Anatoly
Quoted 22 lines · David Hunt
The power example applications that uses the virtio-serial method of communication cannot currently be built with make, and can only be built using meson/ninja.
The guest channel message definitions and functions in
guest_channel.hare needed by applications and need to be made public.This worked pre-20.11, but now with all the meson/ninja changes, making these apps externally no longer works. To fix, we need to move the header file with the API definitions for the channel commands public, and rename the functions accordingly.
The main change is to rename
channel_commands.htorte_power_guest_channel.hso that it gets picked up by the installer and copied to/usr/local/include. Other changes include renaming #defines to haveRTE_at the beginning instead ofCPU_. Finally we refactor the code to work with those changes.---
v2 changes
- re-worked from monolithic patch to a 6 patch patchset for easier reviewQuoted 7 lines
[PATCH v2 1/6] power: create guest channel public header file [PATCH v2 2/6] power: make channel msg functions public [PATCH v2 3/6] power: rename public structs
[PATCH v2 4/6] power: rename defines
[PATCH v2 5/6] power: add new header file to export list [PATCH v2 6/6] power: clean up includes
Quoted 2 lines
Just a general question: wouldn't it be better to move this stuff entirely into sample app and not bother with keeping it in the library? There is precedent - ethtool app has a "library" and an "application" part, i think you should be able to move it out of the library and into the sample app entirely without too much trouble, as code looks to be fairly self-contained.
Agreed, that's a great idea. I could have a common lib under examples/vm_power_manager, then two apps, vm_power_manager and guest_cli. That would keep everything nicely local, and not expose the channel API publicly. The only reason we were making it public was to allow "make" to work, so that's not a good enought reason, tbh. I'll throw a prototype together today.
Thanks,
Dave.
Quoted 34 lines · David Hunt
Hi Anatoly,
Quoted 31 lines · Anatoly
Quoted 29 lines · David Hunt
The power example applications that uses the virtio-serial method of communication cannot currently be built with make, and can only be built using meson/ninja.
The guest channel message definitions and functions in
guest_channel.hare needed by applications and need to be made public.This worked pre-20.11, but now with all the meson/ninja changes, making these apps externally no longer works. To fix, we need to move the header file with the API definitions for the channel commands public, and rename the functions accordingly.
The main change is to rename
channel_commands.htorte_power_guest_channel.hso that it gets picked up by the installer and copied to/usr/local/include. Other changes include renaming #defines to haveRTE_at the beginning instead ofCPU_. Finally we refactor the code to work with those changes.---
v2 changes
- re-worked from monolithic patch to a 6 patch patchset for easier review[PATCH v2 1/6] power: create guest channel public header file [PATCH v2 2/6] power: make channel msg functions public [PATCH v2 3/6] power: rename public structs
[PATCH v2 4/6] power: rename defines
[PATCH v2 5/6] power: add new header file to export list [PATCH v2 6/6] power: clean up includes
Quoted 4 lines
Quoted 2 lines
Just a general question: wouldn't it be better to move this stuff entirely into sample app and not bother with keeping it in the library? There is precedent - ethtool app has a "library" and an "application" part, i think you should be able to move it out of the library and into the sample app entirely without too much trouble, as code looks to be fairly self-contained.
Agreed, that's a great idea. I could have a common lib under examples/vm_power_manager, then two apps,
vm_power_managerandguest_cli. That would keep everything nicely local, and not expose the channel API publicly. The only reason we were making it public was to allow "make" to work, so that's not a good enought reason, tbh. I'll throw a prototype together today.
Yep, IIRC Make works perfectly fine with ethtool, so i don't see why it wouldn't work for your sample app as well. Thanks!
Quoted 7 lines
Thanks,
Dave.
Signature · 2 lines
Thanks, Anatoly
Quoted 35 lines · Anatoly
Quoted 34 lines · David Hunt
Hi Anatoly,
Quoted 31 lines · Anatoly
Quoted 29 lines · David Hunt
The power example applications that uses the virtio-serial method of communication cannot currently be built with make, and can only be built using meson/ninja.
The guest channel message definitions and functions in
guest_channel.hare needed by applications and need to be made public.This worked pre-20.11, but now with all the meson/ninja changes, making these apps externally no longer works. To fix, we need to move the header file with the API definitions for the channel commands public, and rename the functions accordingly.
The main change is to rename
channel_commands.htorte_power_guest_channel.hso that it gets picked up by the installer and copied to/usr/local/include. Other changes include renaming #defines to haveRTE_at the beginning instead ofCPU_. Finally we refactor the code to work with those changes.---
v2 changes
- re-worked from monolithic patch to a 6 patch patchset for easier review[PATCH v2 1/6] power: create guest channel public header file [PATCH v2 2/6] power: make channel msg functions public [PATCH v2 3/6] power: rename public structs
[PATCH v2 4/6] power: rename defines
[PATCH v2 5/6] power: add new header file to export list [PATCH v2 6/6] power: clean up includes
Quoted 6 lines
Quoted 4 lines
Quoted 2 lines
Just a general question: wouldn't it be better to move this stuff entirely into sample app and not bother with keeping it in the library? There is precedent - ethtool app has a "library" and an "application" part, i think you should be able to move it out of the library and into the sample app entirely without too much trouble, as code looks to be fairly self-contained.
Agreed, that's a great idea. I could have a common lib under examples/vm_power_manager, then two apps,
vm_power_managerandguest_cli. That would keep everything nicely local, and not expose the channel API publicly. The only reason we were making it public was to allow "make" to work, so that's not a good enought reason, tbh. I'll throw a prototype together today.Yep, IIRC Make works perfectly fine with ethtool, so i don't see why it wouldn't work for your sample app as well. Thanks!
Hi Anatoly,
OK, so I was investigating this, and have come across a blocker on this method.
There are three methods for managing frequency, acpi, pstate and vm. It's the third method that's causing the problem with moving the channel functionality out into a sample library alongside vm_power_manger. VM's can call channel functions in the power library to affect frequency for their cores, and these functions use api function calls and several structures and #defines in their code, which is currently part of the power management library. These function declarations, structs and #defines ere needed in both the examples lib/apps and the power library itself, and the prototype changes I made ended up looking very much like the patch set that's already on the mailing list.
So, while I would have liked to have a solution along the lines of what you've proposed, it's not possible based on the dependencies on common structues and #defines.
Thanks for the suggestion, though.
Rgds,
Dave.
Quoted 49 lines · David Hunt
Quoted 35 lines · Anatoly
Quoted 34 lines · David Hunt
Hi Anatoly,
Quoted 31 lines · Anatoly
Quoted 29 lines · David Hunt
The power example applications that uses the virtio-serial method of communication cannot currently be built with make, and can only be built using meson/ninja.
The guest channel message definitions and functions in
guest_channel.hare needed by applications and need to be made public.This worked pre-20.11, but now with all the meson/ninja changes, making these apps externally no longer works. To fix, we need to move the header file with the API definitions for the channel commands public, and rename the functions accordingly.
The main change is to rename
channel_commands.htorte_power_guest_channel.hso that it gets picked up by the installer and copied to/usr/local/include. Other changes include renaming #defines to haveRTE_at the beginning instead ofCPU_. Finally we refactor the code to work with those changes.---
v2 changes
- re-worked from monolithic patch to a 6 patch patchset for easier review[PATCH v2 1/6] power: create guest channel public header file [PATCH v2 2/6] power: make channel msg functions public [PATCH v2 3/6] power: rename public structs
[PATCH v2 4/6] power: rename defines
[PATCH v2 5/6] power: add new header file to export list [PATCH v2 6/6] power: clean up includesQuoted 6 lines
Quoted 4 lines
Quoted 2 lines
Just a general question: wouldn't it be better to move this stuff entirely into sample app and not bother with keeping it in the library? There is precedent - ethtool app has a "library" and an "application" part, i think you should be able to move it out of the library and into the sample app entirely without too much trouble, as code looks to be fairly self-contained.
Agreed, that's a great idea. I could have a common lib under examples/vm_power_manager, then two apps,
vm_power_managerandguest_cli. That would keep everything nicely local, and not expose the channel API publicly. The only reason we were making it public was to allow "make" to work, so that's not a good enought reason, tbh. I'll throw a prototype together today.Yep, IIRC Make works perfectly fine with ethtool, so i don't see why it wouldn't work for your sample app as well. Thanks!
Hi Anatoly,
OK, so I was investigating this, and have come across a blocker on this method.
Quoted 9 lines
There are three methods for managing frequency, acpi, pstate and vm. It's the third method that's causing the problem with moving the channel functionality out into a sample library alongside
vm_power_manger. VM's can call channel functions in the power library to affect frequency for their cores, and these functions use api function calls and several structures and #defines in their code, which is currently part of the power management library. These function declarations, structs and #defines ere needed in both the examples lib/apps and the power library itself, and the prototype changes I made ended up looking very much like the patch set that's already on the mailing list.So, while I would have liked to have a solution along the lines of what you've proposed, it's not possible based on the dependencies on common structues and #defines.
Thanks for the suggestion, though.
Rgds,
Dave.
OK, i guess we can live with that. I wonder if there's another way to do this, but since i can't think of anything that doesn't involve serious API/ABI breakages, this is OK IMO.
Signature · 2 lines
Thanks, Anatoly