From patchwork Fri Jun 17 05:22:48 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "John Daley (johndale)" X-Patchwork-Id: 13942 X-Patchwork-Delegate: bruce.richardson@intel.com 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 18A5CCC10; Fri, 17 Jun 2016 07:22:55 +0200 (CEST) Received: from alln-iport-8.cisco.com (alln-iport-8.cisco.com [173.37.142.95]) by dpdk.org (Postfix) with ESMTP id 4998ACBFE for ; Fri, 17 Jun 2016 07:22:53 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=@cisco.com; l=3905; q=dns/txt; s=iport; t=1466140973; x=1467350573; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=yAjD5eMwr+NgcJCHPzZsC0sVf21ZLWpLzpKIGIyoavw=; b=M3QV/rVLeGKKXLKfvD7FzFFBSVK+ECxFj5AgmPUTOb4lp6i8bBiP5MHF G8jwTkgdn0KDQC+hb5BhT7VRPREGAGbRq+F+JRHPdCy5YvdtML009cg2N qSTWnG2H9cuihsVsGB71DclIf2Q6MACxS/J2QGqy7ddPidydM+2UoCMeY M=; X-IronPort-AV: E=Sophos;i="5.26,481,1459814400"; d="scan'208";a="286544782" Received: from rcdn-core-2.cisco.com ([173.37.93.153]) by alln-iport-8.cisco.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Jun 2016 05:22:52 +0000 Received: from cisco.com (savbu-usnic-a.cisco.com [10.193.184.48]) by rcdn-core-2.cisco.com (8.14.5/8.14.5) with ESMTP id u5H5MqYp010755; Fri, 17 Jun 2016 05:22:52 GMT Received: by cisco.com (Postfix, from userid 392789) id 1B5E53FAAE34; Thu, 16 Jun 2016 22:22:52 -0700 (PDT) From: John Daley To: dev@dpdk.org Cc: bruce.richardson@intel.com, John Daley Date: Thu, 16 Jun 2016 22:22:48 -0700 Message-Id: <1466140969-5580-4-git-send-email-johndale@cisco.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1466140969-5580-1-git-send-email-johndale@cisco.com> References: <1466140969-5580-1-git-send-email-johndale@cisco.com> Subject: [dpdk-dev] [PATCH 3/4] enic: add an update MTU function for non-Rx scatter mode 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" Provide an update MTU callbaack. The function returns -ENOTSUP if Rx scatter is enabled. Updating the MTU to be greater than the value configured via the Cisco CIMC/UCSM management interface is allowed provided it is still less than the maximum egress packet size allowed by the NIC. Signed-off-by: John Daley --- drivers/net/enic/enic.h | 1 + drivers/net/enic/enic_ethdev.c | 10 +++++++++- drivers/net/enic/enic_main.c | 44 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/drivers/net/enic/enic.h b/drivers/net/enic/enic.h index 78f7bd7..8122358 100644 --- a/drivers/net/enic/enic.h +++ b/drivers/net/enic/enic.h @@ -245,4 +245,5 @@ uint16_t enic_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts); uint16_t enic_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts); +int enic_set_mtu(struct enic *enic, uint16_t new_mtu); #endif /* _ENIC_H_ */ diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c index 31d9600..9a738c2 100644 --- a/drivers/net/enic/enic_ethdev.c +++ b/drivers/net/enic/enic_ethdev.c @@ -520,6 +520,14 @@ static void enicpmd_remove_mac_addr(struct rte_eth_dev *eth_dev, __rte_unused ui enic_del_mac_address(enic); } +static int enicpmd_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu) +{ + struct enic *enic = pmd_priv(eth_dev); + + ENICPMD_FUNC_TRACE(); + return enic_set_mtu(enic, mtu); +} + static const struct eth_dev_ops enicpmd_eth_dev_ops = { .dev_configure = enicpmd_dev_configure, .dev_start = enicpmd_dev_start, @@ -537,7 +545,7 @@ static const struct eth_dev_ops enicpmd_eth_dev_ops = { .queue_stats_mapping_set = NULL, .dev_infos_get = enicpmd_dev_info_get, .dev_supported_ptypes_get = enicpmd_dev_supported_ptypes_get, - .mtu_set = NULL, + .mtu_set = enicpmd_mtu_set, .vlan_filter_set = enicpmd_vlan_filter_set, .vlan_tpid_set = NULL, .vlan_offload_set = enicpmd_vlan_offload_set, diff --git a/drivers/net/enic/enic_main.c b/drivers/net/enic/enic_main.c index 32ecdae..c23938a 100644 --- a/drivers/net/enic/enic_main.c +++ b/drivers/net/enic/enic_main.c @@ -854,6 +854,50 @@ int enic_set_vnic_res(struct enic *enic) return rc; } +/* The Cisco NIC can send and receive packets up to a max packet size + * determined by the NIC type and firmware. There is also an MTU + * configured into the NIC via the CIMC/UCSM management interface + * which can be overridden by this function (up to the max packet size). + * Depending on the network setup, doing so may cause packet drops + * and unexpected behavior. + */ +int enic_set_mtu(struct enic *enic, uint16_t new_mtu) +{ + uint16_t old_mtu; /* previous setting */ + uint16_t config_mtu; /* Value configured into NIC via CIMC/UCSM */ + struct rte_eth_dev *eth_dev = enic->rte_dev; + + old_mtu = eth_dev->data->mtu; + config_mtu = enic->config.mtu; + + /* only works with Rx scatter disabled */ + if (enic->rte_dev->data->dev_conf.rxmode.enable_scatter) + return -ENOTSUP; + + if (new_mtu > enic->max_mtu) { + dev_err(enic, + "MTU not updated: requested (%u) greater than max (%u)\n", + new_mtu, enic->max_mtu); + return -EINVAL; + } + if (new_mtu < ENIC_MIN_MTU) { + dev_info(enic, + "MTU not updated: requested (%u) less than min (%u)\n", + new_mtu, ENIC_MIN_MTU); + return -EINVAL; + } + if (new_mtu > config_mtu) + dev_warning(enic, + "MTU (%u) is greater than value configured in NIC (%u)\n", + new_mtu, config_mtu); + + /* update the mtu */ + eth_dev->data->mtu = new_mtu; + + dev_info(enic, "MTU changed from %u to %u\n", old_mtu, new_mtu); + return 0; +} + static int enic_dev_init(struct enic *enic) { int err;