From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from prod-mail-xrelay07.akamai.com (prod-mail-xrelay07.akamai.com [72.246.2.115]) by dpdk.org (Postfix) with ESMTP id E47BE11A2 for ; Fri, 6 Mar 2015 18:21:44 +0100 (CET) Received: from prod-mail-xrelay07.akamai.com (localhost.localdomain [127.0.0.1]) by postfix.imss70 (Postfix) with ESMTP id 5E9E847764; Fri, 6 Mar 2015 17:21:44 +0000 (GMT) Received: from prod-mail-relay06.akamai.com (prod-mail-relay06.akamai.com [172.17.120.126]) by prod-mail-xrelay07.akamai.com (Postfix) with ESMTP id 48FF047763; Fri, 6 Mar 2015 17:21:44 +0000 (GMT) Received: from email.msg.corp.akamai.com (ustx2ex-cas1.msg.corp.akamai.com [172.27.25.30]) by prod-mail-relay06.akamai.com (Postfix) with ESMTP id 2F4272027; Fri, 6 Mar 2015 17:21:44 +0000 (GMT) Received: from ustx2ex-cashub5.dfw01.corp.akamai.com (172.27.25.71) by ustx2ex-dag1mb3.msg.corp.akamai.com (172.27.27.103) with Microsoft SMTP Server (TLS) id 15.0.913.22; Fri, 6 Mar 2015 11:21:37 -0600 Received: from USMBX2.msg.corp.akamai.com ([169.254.1.102]) by ustx2ex-cashub5.dfw01.corp.akamai.com ([172.27.25.71]) with mapi; Fri, 6 Mar 2015 11:21:37 -0600 From: "Sanford, Robert" To: Stephen Hemminger Date: Fri, 6 Mar 2015 11:21:36 -0600 Thread-Topic: [dpdk-dev] [PATCH v3 01/10] vmxnet3: fix link state handling Thread-Index: AdBYMgBs7rXV6nPXTGyhPgVlnshqCA== Message-ID: References: <1425600635-20628-1-git-send-email-stephen@networkplumber.org> <1425600635-20628-2-git-send-email-stephen@networkplumber.org> In-Reply-To: <1425600635-20628-2-git-send-email-stephen@networkplumber.org> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Microsoft-MacOutlook/14.4.3.140616 acceptlanguage: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Cc: "dev@dpdk.org" , Stephen Hemminger Subject: Re: [dpdk-dev] [PATCH v3 01/10] vmxnet3: fix link state handling 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: Fri, 06 Mar 2015 17:21:45 -0000 Hi Stephen, Have you considered supporting LSC interrupts in vmxnet3? -- Thanks, Robert >From: Stephen Hemminger > >The Intel version of VMXNET3 driver does not handle link state properly. >The VMXNET3 API returns 1 if connected and 0 if disconnected. >Also need to return correct value to indicate state change. > >Signed-off-by: Stephen Hemminger >Acked-by: Yong Wang >--- > lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c | 54 >++++++++++++++++++++++++--------- > 1 file changed, 39 insertions(+), 15 deletions(-) > >diff --git a/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c >b/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c >index 6068c60..4c882ee 100644 >--- a/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c >+++ b/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c >@@ -149,9 +149,36 @@ gpa_zone_reserve(struct rte_eth_dev *dev, uint32_t >size, > * - On success, zero. > * - On failure, negative value. > */ >-static inline int >-rte_vmxnet3_dev_atomic_write_link_status(struct rte_eth_dev *dev, >- struct rte_eth_link *link) >+ >+static int >+vmxnet3_dev_atomic_read_link_status(struct rte_eth_dev *dev, >+ struct rte_eth_link *link) >+{ >+ struct rte_eth_link *dst =3D link; >+ struct rte_eth_link *src =3D &(dev->data->dev_link); >+ >+ if (rte_atomic64_cmpset((uint64_t *)dst, *(uint64_t *)dst, >+ *(uint64_t *)src) =3D=3D 0) >+ return -1; >+ >+ return 0; >+} >+ >+/** >+ * Atomically writes the link status information into global >+ * structure rte_eth_dev. >+ * >+ * @param dev >+ * - Pointer to the structure rte_eth_dev to write to. >+ * - Pointer to the buffer to be saved with the link status. >+ * >+ * @return >+ * - On success, zero. >+ * - On failure, negative value. >+ */ >+static int >+vmxnet3_dev_atomic_write_link_status(struct rte_eth_dev *dev, >+ struct rte_eth_link *link) > { > struct rte_eth_link *dst =3D &(dev->data->dev_link); > struct rte_eth_link *src =3D link; >@@ -384,6 +411,7 @@ vmxnet3_setup_driver_shared(struct rte_eth_dev *dev) > devRead->misc.driverInfo.vmxnet3RevSpt =3D 1; > devRead->misc.driverInfo.uptVerSpt =3D 1; >=20 >+ devRead->misc.mtu =3D rte_le_to_cpu_32(dev->data->mtu); > devRead->misc.queueDescPA =3D hw->queueDescPA; > devRead->misc.queueDescLen =3D hw->queue_desc_len; > devRead->misc.mtu =3D hw->cur_mtu; >@@ -570,7 +598,7 @@ vmxnet3_dev_stop(struct rte_eth_dev *dev) >=20 > /* Clear recorded link status */ > memset(&link, 0, sizeof(link)); >- rte_vmxnet3_dev_atomic_write_link_status(dev, &link); >+ vmxnet3_dev_atomic_write_link_status(dev, &link); > } >=20 > /* >@@ -653,28 +681,24 @@ static int > vmxnet3_dev_link_update(struct rte_eth_dev *dev, __attribute__((unused)) >int wait_to_complete) > { > struct vmxnet3_hw *hw =3D dev->data->dev_private; >- struct rte_eth_link link; >+ struct rte_eth_link old, link; > uint32_t ret; >=20 >+ memset(&link, 0, sizeof(link)); >+ vmxnet3_dev_atomic_read_link_status(dev, &old); >+ > VMXNET3_WRITE_BAR1_REG(hw, VMXNET3_REG_CMD, VMXNET3_CMD_GET_LINK); > ret =3D VMXNET3_READ_BAR1_REG(hw, VMXNET3_REG_CMD); >=20 >- if (!ret) { >- PMD_INIT_LOG(ERR, "Link Status Negative : %s()", __func__); >- return -1; >- } >- > if (ret & 0x1) { > link.link_status =3D 1; > link.link_duplex =3D ETH_LINK_FULL_DUPLEX; > link.link_speed =3D ETH_LINK_SPEED_10000; >- >- rte_vmxnet3_dev_atomic_write_link_status(dev, &link); >- >- return 0; > } >=20 >- return -1; >+ vmxnet3_dev_atomic_write_link_status(dev, &link); >+ >+ return (old.link_status =3D=3D link.link_status) ? -1 : 0; > } >=20 > /* Updating rxmode through Vmxnet3_DriverShared structure in adapter */ >--=20 >2.1.4 >