From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f182.google.com (mail-pf0-f182.google.com [209.85.192.182]) by dpdk.org (Postfix) with ESMTP id E659E5A8B for ; Sun, 27 Dec 2015 22:42:00 +0100 (CET) Received: by mail-pf0-f182.google.com with SMTP id 78so102472414pfw.2 for ; Sun, 27 Dec 2015 13:42:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:in-reply-to:references :mime-version:content-type:content-transfer-encoding; bh=J4K2O8hJ8sza3QS4VgE+J9OP9RjvVN9+FKgLQwo0uHw=; b=XwQezF6VeNKF5SWuXonG9G2+Lthx3po1dkkam9DtyYqTFIPG2ZuTW6G6V2+NAEbdig 8v4p8dN5jwoHE5CimAWjuNxTVQeTVa9eYua7t9RkTaRv9NfM7ICjvc1YXFWmvlf6rn9q Bhmpc1Pb/mbIYZbwx0NU3sQu3nNjWMKc/OM3tFr//TKJzGNircYPlXyNo8zcl3U3PJHh LGQ2B7SHmE+eNuxiWPQwx0CNVAL6HaxSh6QOGAH6FZUGpSx5OwbOmZDPE2a4RRL2FNVu 7XCG+cUlku5FRs5sNRdqjVx+ZqhLnMxB5cQG/+o2RtrJCLfNfiIq2SH+RIwdldPw7wJo tQXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:message-id:in-reply-to :references:mime-version:content-type:content-transfer-encoding; bh=J4K2O8hJ8sza3QS4VgE+J9OP9RjvVN9+FKgLQwo0uHw=; b=Sl6iN2dad1lfOrpRXdnefxdUjhUNLuUCNaGVlTLlObuopf9tWyWxW6bV/RnquGNvaH 7JTLQ7/KBu7UzoCVLRm9bmi1GrFnPMa4GXMQkRyzlyv2NyPLlBLX5KTvO3tK1YSk3cfj pU1h5Qe5cLzen13+yErJhe4iFESOPrcM6IMDlHMfSymZpyzpzLaqByi72l/EPVj3OVoV mIJCtR/T8fqvQGxjUGmiPcZysAvglqYSmMIFQOygdSvb5FMwgLD3AHjYV3ts5QQ9z3To 4YktRaBN/NulCTOq751Jt+GvhGi8ZXkEcYnZ/fQCqEMsPbjEdMNWRhkdeIqV19GUpv5Y xVAw== X-Gm-Message-State: ALoCoQmpsyDxl/p43z+OWRgNpGiV04u+SlUy4Xuqn28I+oSID3PSJT+rfMWH6qhjqzqwaVqImPZoL6zGW25lVux9eRpL14OYwQ== X-Received: by 10.98.14.5 with SMTP id w5mr57106196pfi.126.1451252520218; Sun, 27 Dec 2015 13:42:00 -0800 (PST) Received: from xeon-e3 (static-50-53-82-155.bvtn.or.frontiernet.net. [50.53.82.155]) by smtp.gmail.com with ESMTPSA id n26sm65703744pfb.39.2015.12.27.13.41.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 27 Dec 2015 13:42:00 -0800 (PST) Date: Sun, 27 Dec 2015 13:42:09 -0800 From: Stephen Hemminger To: Zhihong Wang Message-ID: <20151227134209.15dc44ba@xeon-e3> In-Reply-To: <1451011032-83106-2-git-send-email-zhihong.wang@intel.com> References: <1451011032-83106-1-git-send-email-zhihong.wang@intel.com> <1451011032-83106-2-git-send-email-zhihong.wang@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Cc: dev@dpdk.org Subject: Re: [dpdk-dev] [PATCH v2 1/3] app/test-pmd: Handle SIGINT and SIGTERM in testpmd X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 27 Dec 2015 21:42:01 -0000 On Thu, 24 Dec 2015 21:37:10 -0500 Zhihong Wang wrote: > Handle SIGINT and SIGTERM in testpmd. > > Signed-off-by: Zhihong Wang > --- > app/test-pmd/cmdline.c | 19 +++++++++++++------ > app/test-pmd/testpmd.c | 38 ++++++++++++++++++++++++++++++++------ > app/test-pmd/testpmd.h | 1 + > 3 files changed, 46 insertions(+), 12 deletions(-) > > diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c > index 73298c9..4ff1739 100644 > --- a/app/test-pmd/cmdline.c > +++ b/app/test-pmd/cmdline.c > @@ -90,6 +90,8 @@ > > #include "testpmd.h" > > +static struct cmdline *testpmd_cl; > + > static void cmd_reconfig_device_queue(portid_t id, uint8_t dev, uint8_t queue); > > #ifdef RTE_NIC_BYPASS > @@ -9778,17 +9780,22 @@ cmdline_parse_ctx_t main_ctx[] = { > void > prompt(void) > { > - struct cmdline *cl; > - > /* initialize non-constant commands */ > cmd_set_fwd_mode_init(); > > - cl = cmdline_stdin_new(main_ctx, "testpmd> "); > - if (cl == NULL) { > + testpmd_cl = cmdline_stdin_new(main_ctx, "testpmd> "); > + if (testpmd_cl == NULL) { > return; > } Style nit: don't need {} around single statement. > - cmdline_interact(cl); > - cmdline_stdin_exit(cl); > + cmdline_interact(testpmd_cl); > + cmdline_stdin_exit(testpmd_cl); > +} > + > +void > +prompt_exit(void) > +{ > + if (testpmd_cl != NULL) > + cmdline_quit(testpmd_cl); > } > > static void > diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c > index 98ae46d..cb38d56 100644 > --- a/app/test-pmd/testpmd.c > +++ b/app/test-pmd/testpmd.c > @@ -1570,13 +1570,16 @@ pmd_test_exit(void) > if (test_done == 0) > stop_packet_forwarding(); > > - FOREACH_PORT(pt_id, ports) { > - printf("Stopping port %d...", pt_id); > - fflush(stdout); > - rte_eth_dev_close(pt_id); > - printf("done\n"); > + if (ports != NULL) { > + FOREACH_PORT(pt_id, ports) { > + printf("Stopping port %d...", pt_id); > + fflush(stdout); > + rte_eth_dev_stop(pt_id); > + rte_eth_dev_close(pt_id); > + printf(" Done\n"); > + } > } > - printf("bye...\n"); > + printf("Bye...\n"); > } > > typedef void (*cmd_func_t)(void); > @@ -1984,12 +1987,34 @@ init_port(void) > ports[pid].enabled = 1; > } > > +static void > +force_quit(void) > +{ > + pmd_test_exit(); > + prompt_exit(); > +} > + > +static void > +sigint_handler(__rte_unused int signum) > +{ > + if (signum == SIGINT || signum == SIGTERM) { signmum is used, so don't want __rte_unused > + printf("\nSignal %d received, preparing to exit...\n", > + signum); > + force_quit(); > + signal(signum, SIG_DFL); > + kill(getpid(), signum); > + } > +} > + > int > main(int argc, char** argv) > { > int diag; > uint8_t port_id; > > + signal(SIGINT, sigint_handler); > + signal(SIGTERM, sigint_handler); > + > diag = rte_eal_init(argc, argv); > if (diag < 0) > rte_panic("Cannot init EAL\n"); > @@ -2041,6 +2066,7 @@ main(int argc, char** argv) > start_packet_forwarding(0); > printf("Press enter to exit\n"); > rc = read(0, &c, 1); > + pmd_test_exit(); > if (rc < 0) > return 1; > } > diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h > index ee7de98..7ffc17b 100644 > --- a/app/test-pmd/testpmd.h > +++ b/app/test-pmd/testpmd.h > @@ -462,6 +462,7 @@ unsigned int parse_item_list(char* str, const char* item_name, > unsigned int *parsed_items, int check_unique_values); > void launch_args_parse(int argc, char** argv); > void prompt(void); > +void prompt_exit(void); > void nic_stats_display(portid_t port_id); > void nic_stats_clear(portid_t port_id); > void nic_xstats_display(portid_t port_id);