All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Hunt <david.hunt@intel.com>
To: david.hunt@intel.com
Cc: dev@dpdk.org, Marcin Hajkowski <marcinx.hajkowski@intel.com>
Subject: [dpdk-dev] [PATCH v2 3/3] examples/power_guest: send request for specified core capabilities
Date: Mon, 30 Sep 2019 14:00:43 +0100	[thread overview]
Message-ID: <20190930130043.2885-4-david.hunt@intel.com> (raw)
In-Reply-To: <20190930130043.2885-1-david.hunt@intel.com>

From: Marcin Hajkowski <marcinx.hajkowski@intel.com>

Send request to power manager for core id provided
by user to get related capabilities.

Signed-off-by: Marcin Hajkowski <marcinx.hajkowski@intel.com>
Tested-by: David Hunt <david.hunt@intel.com>
Acked-by: Lee Daly <lee.daly@intel.com>
---
 .../guest_cli/vm_power_cli_guest.c            | 119 +++++++++++++++++-
 1 file changed, 117 insertions(+), 2 deletions(-)

diff --git a/examples/vm_power_manager/guest_cli/vm_power_cli_guest.c b/examples/vm_power_manager/guest_cli/vm_power_cli_guest.c
index 0bdb2d0d0..096ecdc04 100644
--- a/examples/vm_power_manager/guest_cli/vm_power_cli_guest.c
+++ b/examples/vm_power_manager/guest_cli/vm_power_cli_guest.c
@@ -132,7 +132,7 @@ struct cmd_freq_list_result {
 };
 
 static int
-query_freq_list(struct channel_packet *pkt, unsigned int lcore_id)
+query_data(struct channel_packet *pkt, unsigned int lcore_id)
 {
 	int ret;
 	ret = rte_power_guest_channel_send_msg(pkt, lcore_id);
@@ -206,7 +206,7 @@ cmd_query_freq_list_parsed(void *parsed_result,
 		pkt.resource_id = lcore_id;
 	}
 
-	ret = query_freq_list(&pkt, lcore_id);
+	ret = query_data(&pkt, lcore_id);
 	if (ret < 0) {
 		cmdline_printf(cl, "Error during sending frequency list query.\n");
 		return;
@@ -248,6 +248,120 @@ cmdline_parse_inst_t cmd_query_freq_list = {
 	},
 };
 
+struct cmd_query_caps_result {
+	cmdline_fixed_string_t query_caps;
+	cmdline_fixed_string_t cpu_num;
+};
+
+static int
+receive_capabilities(struct 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),
+		lcore_id);
+	if (ret < 0) {
+		RTE_LOG(ERR, GUEST_CLI, "Error receiving message.\n");
+		return -1;
+	}
+	if (pkt_caps_list->command != CPU_POWER_CAPS_LIST) {
+		RTE_LOG(ERR, GUEST_CLI, "Unexpected message received.\n");
+		return -1;
+	}
+	return 0;
+}
+
+static void
+cmd_query_caps_list_parsed(void *parsed_result,
+		__rte_unused struct cmdline *cl,
+		__rte_unused void *data)
+{
+	struct cmd_query_caps_result *res = parsed_result;
+	unsigned int lcore_id;
+	struct channel_packet_caps_list pkt_caps_list;
+	struct 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));
+
+	if (!strcmp(res->cpu_num, "all")) {
+
+		/* Get first enabled lcore. */
+		lcore_id = rte_get_next_lcore(-1,
+				0,
+				0);
+		if (lcore_id == RTE_MAX_LCORE) {
+			cmdline_printf(cl, "Enabled core not found.\n");
+			return;
+		}
+
+		pkt.command = CPU_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 ||
+			ep == res->cpu_num) {
+			cmdline_printf(cl, "Invalid parameter provided.\n");
+			return;
+		}
+		pkt.command = CPU_POWER_QUERY_CAPS;
+		strlcpy(pkt.vm_name, policy.vm_name, sizeof(pkt.vm_name));
+		pkt.resource_id = lcore_id;
+	}
+
+	ret = query_data(&pkt, lcore_id);
+	if (ret < 0) {
+		cmdline_printf(cl, "Error during sending capabilities query.\n");
+		return;
+	}
+
+	ret = receive_capabilities(&pkt_caps_list, lcore_id);
+	if (ret < 0) {
+		cmdline_printf(cl, "Error during capabilities reception.\n");
+		return;
+	}
+	if (query_list) {
+		unsigned int i;
+		for (i = 0; i < pkt_caps_list.num_vcpu; ++i)
+			cmdline_printf(cl, "Capabilities of [%d] vcore are:"
+					" turbo possibility: %ld, is priority core: %ld.\n",
+					i,
+					pkt_caps_list.turbo[i],
+					pkt_caps_list.priority[i]);
+	} else {
+		cmdline_printf(cl, "Capabilities of [%d] vcore are:"
+				" turbo possibility: %ld, is priority core: %ld.\n",
+				lcore_id,
+				pkt_caps_list.turbo[lcore_id],
+				pkt_caps_list.priority[lcore_id]);
+	}
+}
+
+cmdline_parse_token_string_t cmd_query_caps_token =
+	TOKEN_STRING_INITIALIZER(struct cmd_query_caps_result, query_caps, "query_cpu_caps");
+cmdline_parse_token_string_t cmd_query_caps_cpu_num_token =
+	TOKEN_STRING_INITIALIZER(struct cmd_query_caps_result, cpu_num, NULL);
+
+cmdline_parse_inst_t cmd_query_caps_list = {
+	.f = cmd_query_caps_list_parsed,  /* function to call */
+	.data = NULL,      /* 2nd arg of func */
+	.help_str = "query_cpu_caps <core_num>|all, request"
+				" information regarding virtual core capabilities."
+				" The keyword 'all' will query list of all vcores for the VM",
+	.tokens = {        /* token list, NULL terminated */
+		(void *)&cmd_query_caps_token,
+		(void *)&cmd_query_caps_cpu_num_token,
+		NULL,
+	},
+};
+
 static int
 check_response_cmd(unsigned int lcore_id, int *result)
 {
@@ -408,6 +522,7 @@ cmdline_parse_ctx_t main_ctx[] = {
 		(cmdline_parse_inst_t *)&cmd_send_policy_set,
 		(cmdline_parse_inst_t *)&cmd_set_cpu_freq_set,
 		(cmdline_parse_inst_t *)&cmd_query_freq_list,
+		(cmdline_parse_inst_t *)&cmd_query_caps_list,
 		NULL,
 };
 
-- 
2.17.1


  parent reply	other threads:[~2019-09-30 13:01 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-30 16:15 [dpdk-dev] [PATCH 0/3] Core capabilities query Hajkowski
2019-05-30 16:15 ` [dpdk-dev] [PATCH 1/3] power: add new packet type for capabilities Hajkowski
2019-09-30 10:55   ` Daly, Lee
2019-09-30 13:00   ` [dpdk-dev] [PATCH v2 0/3] Core capabilities query David Hunt
2019-09-30 13:00     ` [dpdk-dev] [PATCH v2 1/3] power: add new packet type for capabilities David Hunt
2019-09-30 13:00     ` [dpdk-dev] [PATCH v2 2/3] examples/power_manager: send cpu capabilities on vm request David Hunt
2019-09-30 13:00     ` David Hunt [this message]
2019-09-30 13:04       ` [dpdk-dev] [PATCH v2 3/3] examples/power_guest: send request for specified core capabilities Hunt, David
2019-10-27 20:16     ` [dpdk-dev] [PATCH v2 0/3] Core capabilities query Thomas Monjalon
2019-05-30 16:15 ` [dpdk-dev] [PATCH 2/3] examples/power_manager: send cpu capabilities on vm request Hajkowski
2019-09-30 10:56   ` Daly, Lee
2019-05-30 16:15 ` [dpdk-dev] [PATCH 3/3] examples/power_guest: send request for specified core capabilities Hajkowski
2019-09-30 10:54   ` Daly, Lee
2019-09-30 12:54   ` Daly, Lee
2019-07-04 19:58 ` [dpdk-dev] [PATCH 0/3] Core capabilities query Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190930130043.2885-4-david.hunt@intel.com \
    --to=david.hunt@intel.com \
    --cc=dev@dpdk.org \
    --cc=marcinx.hajkowski@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.