From patchwork Fri Dec 13 23:35:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chenmin Sun X-Patchwork-Id: 63851 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id B9BA8A04F1; Fri, 13 Dec 2019 15:36:46 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id F2EBD1BFAD; Fri, 13 Dec 2019 15:36:45 +0100 (CET) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by dpdk.org (Postfix) with ESMTP id AC9851BF75 for ; Fri, 13 Dec 2019 15:36:43 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 13 Dec 2019 06:36:42 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,309,1571727600"; d="scan'208";a="265545300" Received: from npg-dpdk-vpp-scm-1.sh.intel.com ([10.67.118.248]) by FMSMGA003.fm.intel.com with ESMTP; 13 Dec 2019 06:36:41 -0800 From: chenmin.sun@intel.com To: dev@dpdk.org Date: Sat, 14 Dec 2019 07:35:54 +0800 Message-Id: <20191213233554.90866-1-chenmin.sun@intel.com> X-Mailer: git-send-email 2.17.1 Subject: [dpdk-dev] [FDIO] dpdk: add devargs support 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" From: Chenmin Sun Type: feature This patch adds the devargs support for dpdk device The devargs are used as hardware-specific init args for dpdk devices please refer to the nic guides under $(DPDK_DIR)/doc/guides/nics/$(NIC_DRIVER).rst Signed-off-by: Chenmin Sun Change-Id: Id380d04720090bb66afe5ce09d664e5e248b8eb9 --- src/plugins/dpdk/device/dpdk.h | 2 ++ src/plugins/dpdk/device/format.c | 3 +++ src/plugins/dpdk/device/init.c | 36 +++++++++++++++++++++----------- src/vpp/conf/startup.conf | 5 +++++ 4 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/plugins/dpdk/device/dpdk.h b/src/plugins/dpdk/device/dpdk.h index d58d2daa7..ab28ac06a 100644 --- a/src/plugins/dpdk/device/dpdk.h +++ b/src/plugins/dpdk/device/dpdk.h @@ -336,6 +336,8 @@ typedef struct u32 hqos_enabled; dpdk_device_config_hqos_t hqos; u8 tso; + u8 *devargs; + #define DPDK_DEVICE_TSO_DEFAULT 0 #define DPDK_DEVICE_TSO_OFF 1 #define DPDK_DEVICE_TSO_ON 2 diff --git a/src/plugins/dpdk/device/format.c b/src/plugins/dpdk/device/format.c index 292c083fc..20493eb77 100644 --- a/src/plugins/dpdk/device/format.c +++ b/src/plugins/dpdk/device/format.c @@ -564,6 +564,9 @@ format_dpdk_device (u8 * s, va_list * args) format_white_space, indent + 2, format_dpdk_link_status, xd); s = format (s, "%Uflags: %U\n", format_white_space, indent + 2, format_dpdk_device_flags, xd); + if (di.device->devargs && di.device->devargs->args) + s = format (s, "%UDevargs: %s\n", + format_white_space, indent + 2, di.device->devargs->args); s = format (s, "%Urx: queues %d (max %d), desc %d " "(min %d max %d align %d)\n", format_white_space, indent + 2, xd->rx_q_used, di.max_rx_queues, diff --git a/src/plugins/dpdk/device/init.c b/src/plugins/dpdk/device/init.c index 5a6262c30..d0125e939 100644 --- a/src/plugins/dpdk/device/init.c +++ b/src/plugins/dpdk/device/init.c @@ -1118,6 +1118,8 @@ dpdk_device_config (dpdk_config_main_t * conf, vlib_pci_addr_t pci_addr, { devconf->tso = DPDK_DEVICE_TSO_OFF; } + else if (unformat (input, "devargs %s", &devconf->devargs)) + ; else { error = clib_error_return (0, "unknown input `%U'", @@ -1428,21 +1430,31 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input) /* copy tso config from default device */ _(tso) + /* copy tso config from default device */ + _(devargs) + /* add DPDK EAL whitelist/blacklist entry */ if (num_whitelisted > 0 && devconf->is_blacklisted == 0) - { - tmp = format (0, "-w%c", 0); - vec_add1 (conf->eal_init_args, tmp); - tmp = format (0, "%U%c", format_vlib_pci_addr, &devconf->pci_addr, 0); - vec_add1 (conf->eal_init_args, tmp); - } + { + tmp = format (0, "-w%c", 0); + vec_add1 (conf->eal_init_args, tmp); + if (devconf->devargs) + { + tmp = format (0, "%U,%s", format_vlib_pci_addr, &devconf->pci_addr, devconf->devargs, 0); + } + else + { + tmp = format (0, "%U%c", format_vlib_pci_addr, &devconf->pci_addr, 0); + } + vec_add1 (conf->eal_init_args, tmp); + } else if (num_whitelisted == 0 && devconf->is_blacklisted != 0) - { - tmp = format (0, "-b%c", 0); - vec_add1 (conf->eal_init_args, tmp); - tmp = format (0, "%U%c", format_vlib_pci_addr, &devconf->pci_addr, 0); - vec_add1 (conf->eal_init_args, tmp); - } + { + tmp = format (0, "-b%c", 0); + vec_add1 (conf->eal_init_args, tmp); + tmp = format (0, "%U%c", format_vlib_pci_addr, &devconf->pci_addr, 0); + vec_add1 (conf->eal_init_args, tmp); + } })); /* *INDENT-ON* */ diff --git a/src/vpp/conf/startup.conf b/src/vpp/conf/startup.conf index 3d83a1336..b0d0c8664 100644 --- a/src/vpp/conf/startup.conf +++ b/src/vpp/conf/startup.conf @@ -105,6 +105,11 @@ cpu { ## Default is off ## To enable TSO, 'enable-tcp-udp-checksum' must be set # tso on + + ## Devargs + ## device specific init args + ## Default is NULL + # devargs safe-mode-support=1,pipeline-mode-support=1 # } ## Whitelist specific interface by specifying PCI address