From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-outbound-2.vmware.com (smtp-outbound-2.vmware.com [208.91.2.13]) by dpdk.org (Postfix) with ESMTP id 486315A32 for ; Wed, 11 Feb 2015 03:24:32 +0100 (CET) Received: from sc9-mailhost3.vmware.com (sc9-mailhost3.vmware.com [10.113.161.73]) by smtp-outbound-2.vmware.com (Postfix) with ESMTP id BB4D4289CD; Tue, 10 Feb 2015 18:24:28 -0800 (PST) Received: from EX13-CAS-001.vmware.com (EX13-CAS-001.vmware.com [10.113.191.51]) by sc9-mailhost3.vmware.com (Postfix) with ESMTP id B6C7E407C3; Tue, 10 Feb 2015 18:24:28 -0800 (PST) Received: from EX13-MBX-026.vmware.com (10.113.191.46) by EX13-MBX-025.vmware.com (10.113.191.45) with Microsoft SMTP Server (TLS) id 15.0.913.22; Tue, 10 Feb 2015 18:24:28 -0800 Received: from EX13-MBX-026.vmware.com ([fe80::858b:7f42:fd7c:703d]) by EX13-MBX-026.vmware.com ([fe80::858b:7f42:fd7c:703d%17]) with mapi id 15.00.0913.011; Tue, 10 Feb 2015 18:24:28 -0800 From: Yong Wang To: Stephen Hemminger , "dev@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH 4/7] vmxnet3: fix link state handling Thread-Index: AQHQGbj24FxG5SkIR0G/+flVgzB1h5zrEEKA Date: Wed, 11 Feb 2015 02:24:27 +0000 Message-ID: References: <1418793196-17953-1-git-send-email-stephen@networkplumber.org> <1418793196-17953-5-git-send-email-stephen@networkplumber.org> In-Reply-To: <1418793196-17953-5-git-send-email-stephen@networkplumber.org> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.113.160.246] Content-Type: text/plain; charset="us-ascii" Content-ID: <20E30E1CBF9588438FDAE150E2395836@pa-exch1.vmware.com> Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Cc: Stephen Hemminger Subject: Re: [dpdk-dev] [PATCH 4/7] 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: Wed, 11 Feb 2015 02:24:32 -0000 On 12/16/14, 9:13 PM, "Stephen Hemminger" wrote: >From: Stephen Hemminger > >This patch is a bugfx. > >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 One nit below: > lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c | 53 >+++++++++++++++++++++++---------- > 1 file changed, 38 insertions(+), 15 deletions(-) > >diff --git a/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c >b/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c >index 4947c78..7afb43f 100644 >--- a/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c >+++ b/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c >@@ -157,9 +157,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 read from. "to write to" here. >+ * - 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; >@@ -576,7 +603,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 > /* >@@ -658,28 +685,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.3 >