From patchwork Wed Sep 17 13:46:52 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 417 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 3B43CB3FA; Wed, 17 Sep 2014 15:41:58 +0200 (CEST) Received: from mail-we0-f170.google.com (mail-we0-f170.google.com [74.125.82.170]) by dpdk.org (Postfix) with ESMTP id EF661B3F3 for ; Wed, 17 Sep 2014 15:41:54 +0200 (CEST) Received: by mail-we0-f170.google.com with SMTP id u57so1470611wes.1 for ; Wed, 17 Sep 2014 06:47:36 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=anyAQz1Z+VvDGU917BidXD9WYDPrx1uIuP4pyXzudp4=; b=akDY2NM5/PIpO6za9IXnsMOHVkWZEDO7MicetjIWfFRDbSDv4JTIlsTA1HiKGiXpD6 F+PezYib+FheOBeu1+xhp6KmZPQX8e0gcfsEifRw91fsaXvCdVaWCmfQZD5p3QyeRjPO Jf4dloW02iFHEtvOt0MvMCAnwxnPptjnhKwF1JTlxYhzdGBca9KRJYTujwh9GJE3qgs8 Ns9XBeSKq4LFq1vTWJ4eSOlndc4IpKFZvgIlJUj5f1dp++BY28qt6wPpJCNp+NFjZ2Ih iMy4axCLPO/FT22ZjyTbV7cF1AWsRq8nzZpa2+HXujXR7f5tURr1407EeEE0jJM0oUzj oGcQ== X-Gm-Message-State: ALoCoQkzcQw7uM5JE/7PBiEHOs6plRS17cPQ6vlo4fD0ikyGf6VavmhI8/mPB5Nz/OogeqZ6giJW X-Received: by 10.180.36.15 with SMTP id m15mr41727499wij.6.1410961656110; Wed, 17 Sep 2014 06:47:36 -0700 (PDT) Received: from alcyon.dev.6wind.com (guy78-3-82-239-227-177.fbx.proxad.net. [82.239.227.177]) by mx.google.com with ESMTPSA id fa20sm5712872wic.1.2014.09.17.06.47.34 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Sep 2014 06:47:35 -0700 (PDT) From: David Marchand To: dev@dpdk.org Date: Wed, 17 Sep 2014 15:46:52 +0200 Message-Id: <1410961612-8571-21-git-send-email-david.marchand@6wind.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1410961612-8571-1-git-send-email-david.marchand@6wind.com> References: <1410961612-8571-1-git-send-email-david.marchand@6wind.com> Subject: [dpdk-dev] [PATCH v3 20/20] eal: set log level from command line 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Add a --log-level option to set the default eal log level. Signed-off-by: David Marchand Acked-by: Bruce Richardson --- lib/librte_eal/bsdapp/eal/eal.c | 42 +++++++++++++++++++ .../bsdapp/eal/include/eal_internal_cfg.h | 1 + lib/librte_eal/linuxapp/eal/eal.c | 44 +++++++++++++++++++- .../linuxapp/eal/include/eal_internal_cfg.h | 1 + 4 files changed, 87 insertions(+), 1 deletion(-) diff --git a/lib/librte_eal/bsdapp/eal/eal.c b/lib/librte_eal/bsdapp/eal/eal.c index 71f93e0..2f84742 100644 --- a/lib/librte_eal/bsdapp/eal/eal.c +++ b/lib/librte_eal/bsdapp/eal/eal.c @@ -94,6 +94,7 @@ #define OPT_PCI_BLACKLIST "pci-blacklist" #define OPT_VDEV "vdev" #define OPT_SYSLOG "syslog" +#define OPT_LOG_LEVEL "log-level" #define MEMSIZE_IF_NO_HUGE_PAGE (64ULL * 1024ULL * 1024ULL) @@ -293,6 +294,7 @@ eal_usage(const char *prgname) " -v : Display version information on startup\n" " -m MB : memory to allocate\n" " -r NUM : force number of memory ranks (don't detect)\n" + " --"OPT_LOG_LEVEL" : set default log level\n" " --"OPT_PROC_TYPE" : type of this process\n" " --"OPT_PCI_BLACKLIST", -b: add a PCI device in black list.\n" " Prevent EAL from using this PCI device. The argument\n" @@ -440,6 +442,28 @@ eal_parse_syslog(const char *facility) return -1; } +static int +eal_parse_log_level(const char *level, uint32_t *log_level) +{ + char *end; + unsigned long tmp; + + errno = 0; + tmp = strtoul(level, &end, 0); + + /* check for errors */ + if ((errno != 0) || (level[0] == '\0') || + end == NULL || (*end != '\0')) + return -1; + + /* log_level is a uint32_t */ + if (tmp >= UINT32_MAX) + return -1; + + *log_level = tmp; + return 0; +} + static inline size_t eal_get_hugepage_mem_size(void) { @@ -494,6 +518,7 @@ eal_parse_args(int argc, char **argv) {OPT_PCI_BLACKLIST, 1, 0, 0}, {OPT_VDEV, 1, 0, 0}, {OPT_SYSLOG, 1, NULL, 0}, + {OPT_LOG_LEVEL, 1, NULL, 0}, {0, 0, 0, 0} }; @@ -506,6 +531,8 @@ eal_parse_args(int argc, char **argv) internal_config.hugepage_dir = NULL; internal_config.force_sockets = 0; internal_config.syslog_facility = LOG_DAEMON; + /* default value from build option */ + internal_config.log_level = RTE_LOG_LEVEL; #ifdef RTE_LIBEAL_USE_HPET internal_config.no_hpet = 0; #else @@ -652,6 +679,18 @@ eal_parse_args(int argc, char **argv) eal_usage(prgname); return -1; } + } else if (!strcmp(lgopts[option_index].name, + OPT_LOG_LEVEL)) { + uint32_t log; + + if (eal_parse_log_level(optarg, &log) < 0) { + RTE_LOG(ERR, EAL, + "invalid parameters for --" + OPT_LOG_LEVEL "\n"); + eal_usage(prgname); + return -1; + } + internal_config.log_level = log; } break; @@ -793,6 +832,9 @@ rte_eal_init(int argc, char **argv) if (fctret < 0) exit(1); + /* set log level as early as possible */ + rte_set_log_level(internal_config.log_level); + if (internal_config.no_hugetlbfs == 0 && internal_config.process_type != RTE_PROC_SECONDARY && eal_hugepage_info_init() < 0) diff --git a/lib/librte_eal/bsdapp/eal/include/eal_internal_cfg.h b/lib/librte_eal/bsdapp/eal/include/eal_internal_cfg.h index 2d06c7f..24cefc2 100644 --- a/lib/librte_eal/bsdapp/eal/include/eal_internal_cfg.h +++ b/lib/librte_eal/bsdapp/eal/include/eal_internal_cfg.h @@ -75,6 +75,7 @@ struct internal_config { volatile uint64_t socket_mem[RTE_MAX_NUMA_NODES]; /**< amount of memory per socket */ uintptr_t base_virtaddr; /**< base address to try and reserve memory from */ volatile int syslog_facility; /**< facility passed to openlog() */ + volatile uint32_t log_level; /**< default log level */ const char *hugefile_prefix; /**< the base filename of hugetlbfs files */ const char *hugepage_dir; /**< specific hugetlbfs directory to use */ diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c index 4869e7c..38cace6 100644 --- a/lib/librte_eal/linuxapp/eal/eal.c +++ b/lib/librte_eal/linuxapp/eal/eal.c @@ -97,6 +97,7 @@ #define OPT_PCI_BLACKLIST "pci-blacklist" #define OPT_VDEV "vdev" #define OPT_SYSLOG "syslog" +#define OPT_LOG_LEVEL "log-level" #define OPT_BASE_VIRTADDR "base-virtaddr" #define OPT_XEN_DOM0 "xen-dom0" #define OPT_CREATE_UIO_DEV "create-uio-dev" @@ -384,7 +385,8 @@ eal_usage(const char *prgname) " --"OPT_XEN_DOM0" : support application running on Xen Domain0 " "without hugetlbfs\n" " --"OPT_SYSLOG" : set syslog facility\n" - " --"OPT_SOCKET_MEM" : memory to allocate on specific \n" + " --"OPT_LOG_LEVEL" : set default log level\n" + " --"OPT_SOCKET_MEM" : memory to allocate on specific\n" " sockets (use comma separated values)\n" " --"OPT_HUGE_DIR" : directory where hugetlbfs is mounted\n" " --"OPT_PROC_TYPE" : type of this process\n" @@ -548,6 +550,28 @@ eal_parse_syslog(const char *facility) } static int +eal_parse_log_level(const char *level, uint32_t *log_level) +{ + char *end; + unsigned long tmp; + + errno = 0; + tmp = strtoul(level, &end, 0); + + /* check for errors */ + if ((errno != 0) || (level[0] == '\0') || + end == NULL || (*end != '\0')) + return -1; + + /* log_level is a uint32_t */ + if (tmp >= UINT32_MAX) + return -1; + + *log_level = tmp; + return 0; +} + +static int eal_parse_socket_mem(char *socket_mem) { char * arg[RTE_MAX_NUMA_NODES]; @@ -699,6 +723,7 @@ eal_parse_args(int argc, char **argv) {OPT_PCI_BLACKLIST, 1, 0, 0}, {OPT_VDEV, 1, 0, 0}, {OPT_SYSLOG, 1, NULL, 0}, + {OPT_LOG_LEVEL, 1, NULL, 0}, {OPT_VFIO_INTR, 1, NULL, 0}, {OPT_BASE_VIRTADDR, 1, 0, 0}, {OPT_XEN_DOM0, 0, 0, 0}, @@ -716,6 +741,8 @@ eal_parse_args(int argc, char **argv) internal_config.hugepage_dir = NULL; internal_config.force_sockets = 0; internal_config.syslog_facility = LOG_DAEMON; + /* default value from build option */ + internal_config.log_level = RTE_LOG_LEVEL; internal_config.xen_dom0_support = 0; /* if set to NONE, interrupt mode is determined automatically */ internal_config.vfio_intr_mode = RTE_INTR_MODE_NONE; @@ -887,6 +914,18 @@ eal_parse_args(int argc, char **argv) eal_usage(prgname); return -1; } + } else if (!strcmp(lgopts[option_index].name, + OPT_LOG_LEVEL)) { + uint32_t log; + + if (eal_parse_log_level(optarg, &log) < 0) { + RTE_LOG(ERR, EAL, + "invalid parameters for --" + OPT_LOG_LEVEL "\n"); + eal_usage(prgname); + return -1; + } + internal_config.log_level = log; } else if (!strcmp(lgopts[option_index].name, OPT_BASE_VIRTADDR)) { if (eal_parse_base_virtaddr(optarg) < 0) { @@ -1054,6 +1093,9 @@ rte_eal_init(int argc, char **argv) if (fctret < 0) exit(1); + /* set log level as early as possible */ + rte_set_log_level(internal_config.log_level); + if (internal_config.no_hugetlbfs == 0 && internal_config.process_type != RTE_PROC_SECONDARY && internal_config.xen_dom0_support == 0 && diff --git a/lib/librte_eal/linuxapp/eal/include/eal_internal_cfg.h b/lib/librte_eal/linuxapp/eal/include/eal_internal_cfg.h index 498ade2..8749390 100644 --- a/lib/librte_eal/linuxapp/eal/include/eal_internal_cfg.h +++ b/lib/librte_eal/linuxapp/eal/include/eal_internal_cfg.h @@ -77,6 +77,7 @@ struct internal_config { volatile uint64_t socket_mem[RTE_MAX_NUMA_NODES]; /**< amount of memory per socket */ uintptr_t base_virtaddr; /**< base address to try and reserve memory from */ volatile int syslog_facility; /**< facility passed to openlog() */ + volatile uint32_t log_level; /**< default log level */ /** default interrupt mode for VFIO */ volatile enum rte_intr_mode vfio_intr_mode; const char *hugefile_prefix; /**< the base filename of hugetlbfs files */