From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f44.google.com (mail-wm0-f44.google.com [74.125.82.44]) by dpdk.org (Postfix) with ESMTP id 7BAB32C5F for ; Thu, 3 Mar 2016 15:28:21 +0100 (CET) Received: by mail-wm0-f44.google.com with SMTP id l68so133762709wml.0 for ; Thu, 03 Mar 2016 06:28:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=RKyN5hk0hNXnVQHpJPXwviae0pFhWYvxUMd2wlqgoek=; b=0Y1uIwYb/eV9yFCYJIWRtHWEU7Op4X/SylprbXV5R6sRIkPplKJeh6rNLbY/S0A4Lt 3mbdF4HMjJeZ35UrGYPrrmPYZYA50PVBt9arl7jlD+C2wxqzdBncD1pAm1lOaAqsvfIu OYWdlfLT3P1r540gBo8yM9/+83MN+iQLeMH0HWfDb+b2aPUuSX8557xtYVkTW9a5jfog BkD2dCogCx7iH/4fFLgtIMzGWicXFUHA9gY0IrIq6yBTJl+ICM0+R5Im42Nw/twDYYky 2SI0qmgRKHrA0wHhOJzFem3YPCg0/1VIrQOCvXSV9OAyxO6ZEoozv9SAsWpSErV1LUjV WoEg== 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=RKyN5hk0hNXnVQHpJPXwviae0pFhWYvxUMd2wlqgoek=; b=PP4QXdIjda+L4AvS5+0J6zc1zmh4RYv/UCJJmUHNLWsCw1BUJXLKwYqyxKaFQxWoWM BBiNhzK8DmcehFB13/ZJQ/OQN2l6OUtMo+TkYNYbUUtwsFxWOkPBGCI9M3hi/xyeMK4F n1ryNlOth92xfQWtQH/mfpVJYY9vTl5sQg09WmBc80K6GsWfNCJwEMnUTDC1UX8IUvgq qPH7ytG/FKM6ny5zNu3LXFDAS3pIRuoIe5ifZ0FzB8AhXm/Z2FqsE2nuijjFVcnG1pOK ogQuh/Cix9qjpa6AZR1PX2BRhChrmSeqs8+KN9stBKQNnS9RmfKens4CtFye5958+23h a5cA== X-Gm-Message-State: AD7BkJI2FWS0NEnFg4dP3u74gG2L+HbAsA3EywDgqeYpE2QBc5UPqdw1eysxr3ZB0TgLPJvt X-Received: by 10.28.225.8 with SMTP id y8mr6633696wmg.94.1457015301343; Thu, 03 Mar 2016 06:28:21 -0800 (PST) Received: from 6wind.com (guy78-3-82-239-227-177.fbx.proxad.net. [82.239.227.177]) by smtp.gmail.com with ESMTPSA id d9sm40885732wjf.43.2016.03.03.06.28.20 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 03 Mar 2016 06:28:20 -0800 (PST) From: Adrien Mazarguil To: dev@dpdk.org Date: Thu, 3 Mar 2016 15:27:57 +0100 Message-Id: <1457015279-3089-4-git-send-email-adrien.mazarguil@6wind.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1457015279-3089-1-git-send-email-adrien.mazarguil@6wind.com> References: <1456165148-28416-1-git-send-email-adrien.mazarguil@6wind.com> <1457015279-3089-1-git-send-email-adrien.mazarguil@6wind.com> Subject: [dpdk-dev] [PATCH v2 3/5] mlx5: add RX CRC stripping configuration 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: Thu, 03 Mar 2016 14:28:21 -0000 From: Olga Shern Until now, CRC was always stripped by hardware. This feature can be configured since MLNX_OFED >= 3.2. Signed-off-by: Olga Shern --- doc/guides/nics/mlx5.rst | 2 ++ doc/guides/rel_notes/release_16_04.rst | 6 ++++++ drivers/net/mlx5/Makefile | 5 +++++ drivers/net/mlx5/mlx5.c | 7 +++++++ drivers/net/mlx5/mlx5.h | 1 + drivers/net/mlx5/mlx5_rxq.c | 24 ++++++++++++++++++++++++ drivers/net/mlx5/mlx5_rxtx.c | 6 ++++-- drivers/net/mlx5/mlx5_rxtx.h | 1 + 8 files changed, 50 insertions(+), 2 deletions(-) diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst index f0d8a7e..8b63f3f 100644 --- a/doc/guides/nics/mlx5.rst +++ b/doc/guides/nics/mlx5.rst @@ -84,6 +84,7 @@ Features - Support for multiple MAC addresses. - VLAN filtering. - RX VLAN stripping. +- RX CRC stripping configuration. - Promiscuous mode. - Multicast promiscuous mode. - Hardware checksum offloads. @@ -232,6 +233,7 @@ Currently supported by DPDK: - Flow director. - RX VLAN stripping. + - RX CRC stripping configuration. - Minimum firmware version: diff --git a/doc/guides/rel_notes/release_16_04.rst b/doc/guides/rel_notes/release_16_04.rst index 49eed7e..01fb7ed 100644 --- a/doc/guides/rel_notes/release_16_04.rst +++ b/doc/guides/rel_notes/release_16_04.rst @@ -95,6 +95,12 @@ This section should contain new features added in this release. Sample format: Implemented TX support in secondary processes (like mlx4). +* **mlx5: Added RX CRC stripping configuration.** + + Until now, CRC was always stripped. It can now be configured. + + Only available with Mellanox OFED >= 3.2. + Resolved Issues --------------- diff --git a/drivers/net/mlx5/Makefile b/drivers/net/mlx5/Makefile index 7076ae3..cc6de2d 100644 --- a/drivers/net/mlx5/Makefile +++ b/drivers/net/mlx5/Makefile @@ -137,6 +137,11 @@ mlx5_autoconf.h: $(RTE_SDK)/scripts/auto-config-h.sh infiniband/verbs.h \ enum IBV_EXP_CQ_RX_TCP_PACKET \ $(AUTOCONF_OUTPUT) + $Q sh -- '$<' '$@' \ + HAVE_VERBS_FCS \ + infiniband/verbs.h \ + enum IBV_EXP_CREATE_WQ_FLAG_SCATTER_FCS \ + $(AUTOCONF_OUTPUT) $(SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD):.c=.o): mlx5_autoconf.h diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index 998e6f0..acfb365 100644 --- a/drivers/net/mlx5/mlx5.c +++ b/drivers/net/mlx5/mlx5.c @@ -417,6 +417,13 @@ mlx5_pci_devinit(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) DEBUG("VLAN stripping is %ssupported", (priv->hw_vlan_strip ? "" : "not ")); +#ifdef HAVE_VERBS_FCS + priv->hw_fcs_strip = !!(exp_device_attr.exp_device_cap_flags & + IBV_EXP_DEVICE_SCATTER_FCS); +#endif /* HAVE_VERBS_FCS */ + DEBUG("FCS stripping configuration is %ssupported", + (priv->hw_fcs_strip ? "" : "not ")); + #else /* HAVE_EXP_QUERY_DEVICE */ priv->ind_table_max_size = RSS_INDIRECTION_TABLE_SIZE; #endif /* HAVE_EXP_QUERY_DEVICE */ diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index bad9283..9690827 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -103,6 +103,7 @@ struct priv { unsigned int hw_csum:1; /* Checksum offload is supported. */ unsigned int hw_csum_l2tun:1; /* Same for L2 tunnels. */ unsigned int hw_vlan_strip:1; /* VLAN stripping is supported. */ + unsigned int hw_fcs_strip:1; /* FCS stripping is supported. */ unsigned int vf:1; /* This is a VF device. */ unsigned int pending_alarm:1; /* An alarm is pending. */ /* RX/TX queues. */ diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c index 3d84f41..19a1119 100644 --- a/drivers/net/mlx5/mlx5_rxq.c +++ b/drivers/net/mlx5/mlx5_rxq.c @@ -1258,6 +1258,30 @@ rxq_setup(struct rte_eth_dev *dev, struct rxq *rxq, uint16_t desc, 0), #endif /* HAVE_EXP_DEVICE_ATTR_VLAN_OFFLOADS */ }; + +#ifdef HAVE_VERBS_FCS + /* By default, FCS (CRC) is stripped by hardware. */ + if (dev->data->dev_conf.rxmode.hw_strip_crc) { + tmpl.crc_present = 0; + } else if (priv->hw_fcs_strip) { + /* Ask HW/Verbs to leave CRC in place when supported. */ + attr.wq.flags |= IBV_EXP_CREATE_WQ_FLAG_SCATTER_FCS; + attr.wq.comp_mask |= IBV_EXP_CREATE_WQ_FLAGS; + tmpl.crc_present = 1; + } else { + WARN("%p: CRC stripping has been disabled but will still" + " be performed by hardware, make sure MLNX_OFED and" + " firmware are up to date", + (void *)dev); + tmpl.crc_present = 0; + } + DEBUG("%p: CRC stripping is %s, %u bytes will be subtracted from" + " incoming frames to hide it", + (void *)dev, + tmpl.crc_present ? "disabled" : "enabled", + tmpl.crc_present << 2); +#endif /* HAVE_VERBS_FCS */ + tmpl.wq = ibv_exp_create_wq(priv->ctx, &attr.wq); if (tmpl.wq == NULL) { ret = (errno ? errno : EINVAL); diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c index 4919189..34340d2 100644 --- a/drivers/net/mlx5/mlx5_rxtx.c +++ b/drivers/net/mlx5/mlx5_rxtx.c @@ -828,7 +828,8 @@ mlx5_rx_burst_sp(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n) } if (ret == 0) break; - len = ret; + assert(ret >= (rxq->crc_present << 2)); + len = ret - (rxq->crc_present << 2); pkt_buf_len = len; /* * Replace spent segments with new ones, concatenate and @@ -1040,7 +1041,8 @@ mlx5_rx_burst(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n) } if (ret == 0) break; - len = ret; + assert(ret >= (rxq->crc_present << 2)); + len = ret - (rxq->crc_present << 2); rep = __rte_mbuf_raw_alloc(rxq->mp); if (unlikely(rep == NULL)) { /* diff --git a/drivers/net/mlx5/mlx5_rxtx.h b/drivers/net/mlx5/mlx5_rxtx.h index 6a0087e..61be3e4 100644 --- a/drivers/net/mlx5/mlx5_rxtx.h +++ b/drivers/net/mlx5/mlx5_rxtx.h @@ -116,6 +116,7 @@ struct rxq { unsigned int csum:1; /* Enable checksum offloading. */ unsigned int csum_l2tun:1; /* Same for L2 tunnels. */ unsigned int vlan_strip:1; /* Enable VLAN stripping. */ + unsigned int crc_present:1; /* CRC must be subtracted. */ union { struct rxq_elt_sp (*sp)[]; /* Scattered RX elements. */ struct rxq_elt (*no_sp)[]; /* RX elements. */ -- 2.1.4