From patchwork Fri Oct 16 11:58:15 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Panu Matilainen X-Patchwork-Id: 7705 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 775178E8F; Fri, 16 Oct 2015 13:58:33 +0200 (CEST) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id A21168DA1 for ; Fri, 16 Oct 2015 13:58:29 +0200 (CEST) Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id 2A1C591746; Fri, 16 Oct 2015 11:58:29 +0000 (UTC) Received: from dhcp195.koti.laiskiainen.org.com (vpn1-6-41.ams2.redhat.com [10.36.6.41]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t9GBwMXN015206; Fri, 16 Oct 2015 07:58:27 -0400 From: Panu Matilainen To: dev@dpdk.org Date: Fri, 16 Oct 2015 14:58:15 +0300 Message-Id: <08bc213ebb41b3b3b714c7aa9e0a53b79e674dbf.1444996480.git.pmatilai@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 Subject: [dpdk-dev] [PATCH 3/5] eal: move plugin loading to eal/common 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" There's no good reason to limit plugins to Linux, make it available on FreeBSD too. Signed-off-by: Panu Matilainen --- lib/librte_eal/bsdapp/eal/eal.c | 2 ++ lib/librte_eal/common/eal_common_options.c | 52 +++++++++++++++++++++++++++++ lib/librte_eal/common/eal_options.h | 1 + lib/librte_eal/linuxapp/eal/eal.c | 53 ------------------------------ 4 files changed, 55 insertions(+), 53 deletions(-) diff --git a/lib/librte_eal/bsdapp/eal/eal.c b/lib/librte_eal/bsdapp/eal/eal.c index 1b6f705..73dab89 100644 --- a/lib/librte_eal/bsdapp/eal/eal.c +++ b/lib/librte_eal/bsdapp/eal/eal.c @@ -543,6 +543,8 @@ rte_eal_init(int argc, char **argv) rte_eal_mcfg_complete(); + eal_plugins_init(); + eal_thread_init_master(rte_config.master_lcore); ret = eal_thread_dump_affinity(cpuset, RTE_CPU_AFFINITY_STR_LEN); diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c index 1f459ac..f8fc68a 100644 --- a/lib/librte_eal/common/eal_common_options.c +++ b/lib/librte_eal/common/eal_common_options.c @@ -39,6 +39,7 @@ #include #include #include +#include #include #include @@ -93,6 +94,20 @@ eal_long_options[] = { {0, 0, NULL, 0 } }; +TAILQ_HEAD(shared_driver_list, shared_driver); + +/* Definition for shared object drivers. */ +struct shared_driver { + TAILQ_ENTRY(shared_driver) next; + + char name[PATH_MAX]; + void* lib_handle; +}; + +/* List of external loadable drivers */ +static struct shared_driver_list solib_list = +TAILQ_HEAD_INITIALIZER(solib_list); + static int lcores_parsed; static int master_lcore_parsed; static int mem_parsed; @@ -134,6 +149,37 @@ eal_reset_internal_config(struct internal_config *internal_cfg) internal_cfg->create_uio_dev = 0; } +static int +eal_plugin_add(const char *path) +{ + struct shared_driver *solib; + + solib = malloc(sizeof(*solib)); + if (solib == NULL) { + RTE_LOG(ERR, EAL, "malloc(solib) failed\n"); + return -1; + } + memset(solib, 0, sizeof(*solib)); + strncpy(solib->name, path, PATH_MAX-1); + solib->name[PATH_MAX-1] = 0; + TAILQ_INSERT_TAIL(&solib_list, solib, next); + + return 0; +} + +void +eal_plugins_init(void) +{ + struct shared_driver *solib = NULL; + + TAILQ_FOREACH(solib, &solib_list, next) { + RTE_LOG(DEBUG, EAL, "open shared lib %s\n", solib->name); + solib->lib_handle = dlopen(solib->name, RTLD_NOW); + if (solib->lib_handle == NULL) + RTE_LOG(WARNING, EAL, "%s\n", dlerror()); + } +} + /* * Parse the coremask given as argument (hexadecimal string) and fill * the global configuration (core role and core count) with the parsed @@ -716,6 +762,11 @@ eal_parse_common_option(int opt, const char *optarg, * even if info or warning messages are disabled */ RTE_LOG(CRIT, EAL, "RTE Version: '%s'\n", rte_version()); break; + /* force loading of external driver */ + case 'd': + if (eal_plugin_add(optarg) == -1) + return -1; + break; /* long options */ case OPT_NO_HUGE_NUM: @@ -902,6 +953,7 @@ eal_common_usage(void) " --"OPT_PROC_TYPE" Type of this process (primary|secondary|auto)\n" " --"OPT_SYSLOG" Set syslog facility\n" " --"OPT_LOG_LEVEL" Set default log level\n" + " -d LIB.so Add driver (can be used multiple times)\n" " -v Display version information on startup\n" " -h, --help This help\n" "\nEAL options for DEBUG use only:\n" diff --git a/lib/librte_eal/common/eal_options.h b/lib/librte_eal/common/eal_options.h index f6714d9..1f96825 100644 --- a/lib/librte_eal/common/eal_options.h +++ b/lib/librte_eal/common/eal_options.h @@ -93,5 +93,6 @@ int eal_adjust_config(struct internal_config *internal_cfg); int eal_check_common_options(struct internal_config *internal_cfg); void eal_common_usage(void); enum rte_proc_type_t eal_proc_type_detect(void); +void eal_plugins_init(void); #endif /* EAL_OPTIONS_H */ diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c index d8a53e4..455243e 100644 --- a/lib/librte_eal/linuxapp/eal/eal.c +++ b/lib/librte_eal/linuxapp/eal/eal.c @@ -43,7 +43,6 @@ #include #include #include -#include #include #include #include @@ -90,20 +89,6 @@ /* Allow the application to print its usage message too if set */ static rte_usage_hook_t rte_application_usage_hook = NULL; -TAILQ_HEAD(shared_driver_list, shared_driver); - -/* Definition for shared object drivers. */ -struct shared_driver { - TAILQ_ENTRY(shared_driver) next; - - char name[PATH_MAX]; - void* lib_handle; -}; - -/* List of external loadable drivers */ -static struct shared_driver_list solib_list = -TAILQ_HEAD_INITIALIZER(solib_list); - /* early configuration structure, when memory config is not mmapped */ static struct rte_mem_config early_mem_config; @@ -350,7 +335,6 @@ eal_usage(const char *prgname) printf("\nUsage: %s ", prgname); eal_common_usage(); printf("EAL Linux options:\n" - " -d LIB.so Add driver (can be used multiple times)\n" " --"OPT_SOCKET_MEM" Memory to allocate on sockets (comma separated values)\n" " --"OPT_HUGE_DIR" Directory where hugetlbfs is mounted\n" " --"OPT_FILE_PREFIX" Prefix for hugepage filenames\n" @@ -530,37 +514,6 @@ eal_log_level_parse(int argc, char **argv) optind = 0; /* reset getopt lib */ } -static int -eal_plugin_add(const char *path) -{ - struct shared_driver *solib; - - solib = malloc(sizeof(*solib)); - if (solib == NULL) { - RTE_LOG(ERR, EAL, "malloc(solib) failed\n"); - return -1; - } - memset(solib, 0, sizeof(*solib)); - strncpy(solib->name, path, PATH_MAX-1); - solib->name[PATH_MAX-1] = 0; - TAILQ_INSERT_TAIL(&solib_list, solib, next); - - return 0; -} - -static void -eal_plugins_init(void) -{ - struct shared_driver *solib = NULL; - - TAILQ_FOREACH(solib, &solib_list, next) { - RTE_LOG(DEBUG, EAL, "open shared lib %s\n", solib->name); - solib->lib_handle = dlopen(solib->name, RTLD_NOW); - if (solib->lib_handle == NULL) - RTE_LOG(WARNING, EAL, "%s\n", dlerror()); - } -} - /* Parse the argument given in the command line of the application */ static int eal_parse_args(int argc, char **argv) @@ -598,12 +551,6 @@ eal_parse_args(int argc, char **argv) eal_usage(prgname); exit(EXIT_SUCCESS); - /* force loading of external driver */ - case 'd': - if (eal_plugin_add(optarg) == -1) - return -1; - break; - /* long options */ case OPT_XEN_DOM0_NUM: #ifdef RTE_LIBRTE_XEN_DOM0