From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by dpdk.space (Postfix) with ESMTP id 5C5D8A0096 for ; Thu, 14 Mar 2019 15:52:16 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id B8E184D27; Thu, 14 Mar 2019 15:51:52 +0100 (CET) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id 4A28A4C9C for ; Thu, 14 Mar 2019 15:51:48 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Mar 2019 07:51:48 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,478,1544515200"; d="scan'208";a="151697828" Received: from mhajkowx-mobl.ger.corp.intel.com ([10.104.14.190]) by fmsmga002.fm.intel.com with ESMTP; 14 Mar 2019 07:51:46 -0700 From: Hajkowski To: david.hunt@intel.com Cc: dev@dpdk.org, Marcin Hajkowski Date: Thu, 14 Mar 2019 15:47:51 +0100 Message-Id: <20190314144752.13812-4-marcinx.hajkowski@intel.com> X-Mailer: git-send-email 2.20.1.windows.1 In-Reply-To: <20190314144752.13812-1-marcinx.hajkowski@intel.com> References: <20190314144752.13812-1-marcinx.hajkowski@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Subject: [dpdk-dev] [PATCH 3/4] power: process incoming confirmation cmds X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Message-ID: <20190314144751.qOF-lGbgKPDr-IIzyaJziFJc4lJsYqqjIbK2XhilXYU@z> From: Marcin Hajkowski Extend vm_power_guest to check incoming confirmations of messages previously sent to host. Signed-off-by: Marcin Hajkowski --- examples/vm_power_manager/guest_cli/Makefile | 1 + .../guest_cli/vm_power_cli_guest.c | 65 +++++++++++++++---- 2 files changed, 54 insertions(+), 12 deletions(-) diff --git a/examples/vm_power_manager/guest_cli/Makefile b/examples/vm_power_manager/guest_cli/Makefile index a5634eacf..51a5010ab 100644 --- a/examples/vm_power_manager/guest_cli/Makefile +++ b/examples/vm_power_manager/guest_cli/Makefile @@ -18,6 +18,7 @@ SRCS-y := main.c vm_power_cli_guest.c parse.c CFLAGS += -O3 -I$(RTE_SDK)/lib/librte_power/ CFLAGS += $(WERROR_FLAGS) +CFLAGS += -DALLOW_EXPERIMENTAL_API # workaround for a gcc bug with noreturn attribute # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12603 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 2d9e7689a..674d9d55f 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,6 +132,26 @@ struct cmd_set_cpu_freq_result { cmdline_fixed_string_t cmd; }; +static int +check_response_cmd(unsigned int lcore_id, int *result) +{ + struct channel_packet pkt; + int ret; + + ret = rte_power_guest_channel_receive_msg(&pkt, lcore_id); + if (ret < 0) + return -1; + + if (pkt.command != CPU_POWER_CMD_ACK && + pkt.command != CPU_POWER_CMD_NAK) { + RTE_LOG(DEBUG, POWER, "Not expected command has been received.\n"); + return -1; + } + + *result = (pkt.command == CPU_POWER_CMD_ACK); + return 0; +} + static void cmd_set_cpu_freq_parsed(void *parsed_result, struct cmdline *cl, __attribute__((unused)) void *data) @@ -139,20 +159,31 @@ cmd_set_cpu_freq_parsed(void *parsed_result, struct cmdline *cl, int ret = -1; struct cmd_set_cpu_freq_result *res = parsed_result; - if (!strcmp(res->cmd , "up")) + if (!strcmp(res->cmd, "up")) ret = rte_power_freq_up(res->lcore_id); - else if (!strcmp(res->cmd , "down")) + else if (!strcmp(res->cmd, "down")) ret = rte_power_freq_down(res->lcore_id); - else if (!strcmp(res->cmd , "min")) + else if (!strcmp(res->cmd, "min")) ret = rte_power_freq_min(res->lcore_id); - else if (!strcmp(res->cmd , "max")) + else if (!strcmp(res->cmd, "max")) ret = rte_power_freq_max(res->lcore_id); else if (!strcmp(res->cmd, "enable_turbo")) ret = rte_power_freq_enable_turbo(res->lcore_id); else if (!strcmp(res->cmd, "disable_turbo")) ret = rte_power_freq_disable_turbo(res->lcore_id); - if (ret != 1) + + if (ret != 1) { cmdline_printf(cl, "Error sending message: %s\n", strerror(ret)); + return; + } + int result; + ret = check_response_cmd(res->lcore_id, &result); + if (ret < 0) { + RTE_LOG(DEBUG, POWER, "No confirmation for sent msg received\n"); + } else { + cmdline_printf(cl, "Ack for sent msg received with result: %s.\n", + result == 1 ? "SUCCESS" : "ERROR"); + } } cmdline_parse_token_string_t cmd_set_cpu_freq = @@ -185,16 +216,26 @@ struct cmd_send_policy_result { }; static inline int -send_policy(struct channel_packet *pkt) +send_policy(struct channel_packet *pkt, struct cmdline *cl) { int ret; ret = rte_power_guest_channel_send_msg(pkt, 1); - if (ret == 0) - return 1; - RTE_LOG(DEBUG, POWER, "Error sending message: %s\n", - ret > 0 ? strerror(ret) : "channel not connected"); - return -1; + if (ret < 0) { + RTE_LOG(DEBUG, POWER, "Error sending message: %s\n", + ret > 0 ? strerror(ret) : "channel not connected"); + return -1; + } + + int result; + ret = check_response_cmd(1, &result); + if (ret < 0) { + RTE_LOG(DEBUG, POWER, "No confirmation for sent policy received\n"); + } else { + cmdline_printf(cl, "Ack for sent policy received with result: %s.\n", + result == 1 ? "SUCCESS" : "ERROR"); + } + return 1; } static void @@ -206,7 +247,7 @@ cmd_send_policy_parsed(void *parsed_result, struct cmdline *cl, if (!strcmp(res->cmd, "now")) { printf("Sending Policy down now!\n"); - ret = send_policy(&policy); + ret = send_policy(&policy, cl); } if (ret != 1) cmdline_printf(cl, "Error sending message: %s\n", -- 2.17.2 -------------------------------------------------------------- Intel Research and Development Ireland Limited Registered in Ireland Registered Office: Collinstown Industrial Park, Leixlip, County Kildare Registered Number: 308263 This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). Any review or distribution by others is strictly prohibited. If you are not the intended recipient, please contact the sender and delete all copies.