From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM03-BY2-obe.outbound.protection.outlook.com (mail-by2nam03on0067.outbound.protection.outlook.com [104.47.42.67]) by dpdk.org (Postfix) with ESMTP id 0B0412C60 for ; Wed, 22 Aug 2018 20:57:09 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=E4CodBRygrdFJoUbIH9fJdHeofFTyyfC/zIZnLBq1Bg=; b=fRwoC12gcnqeg3cQN7R8FvLPtCIYddoqmEvDdfnWu9MO1RnV6KPblEuku1/kY2QYrU3L+kezSKAVMoxycqqy+ISbn2keoeaIX3jYuQpfZYce53kS052OWnh907cpqlgHiWa5zdZkrEO/Ry5FntaNKazeI7nhXzp1rPU/WTAIJFc= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Rasesh.Mody@cavium.com; Received: from cavium.com (198.186.1.5) by SN6PR07MB5374.namprd07.prod.outlook.com (2603:10b6:805:74::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1059.22; Wed, 22 Aug 2018 18:57:07 +0000 From: Rasesh Mody To: stable@dpdk.org Cc: Rasesh Mody , yskoh@mellanox.com, mvarlese@suse.de, Dept-EngDPDKDev@cavium.com Date: Wed, 22 Aug 2018 11:56:54 -0700 Message-Id: <1534964214-22769-1-git-send-email-rasesh.mody@cavium.com> X-Mailer: git-send-email 1.7.10.3 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [198.186.1.5] X-ClientProxiedBy: CO1PR15CA0086.namprd15.prod.outlook.com (2603:10b6:101:20::30) To SN6PR07MB5374.namprd07.prod.outlook.com (2603:10b6:805:74::21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9131129c-c274-417d-27c4-08d608610f17 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989137)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:SN6PR07MB5374; X-Microsoft-Exchange-Diagnostics: 1; SN6PR07MB5374; 3:w0l3HGbEkTdDqoWaED4swHGGpoGETixS2Nj/NWhJ/YP/GrhLIG+O6m1B/q5X/50b9mR8ta3CXj3cyvO5nBS4npTsM/v5A8UDzQsGOBFQwGyp4mOlfunTglL1Z1GBdy9NUuu2CG0xD0xxZpgVNzk3SdY7po5MUEbrnBO8QeRnJhmP0hpdTmSN/XXxenrscI/dLhioV0w+G37LlQQMhTN40U8eC2zsr3Bj5pvOKEEc9UBj8GKukiB5lnWJODPJc9Ks; 25:qcitmC23q5lW51eBsKusHEOc7jlTPcQtXaBUVVlKDJhY8qEWebjJoqflXz/RJXYyD30IYVGZNo01UBTCo3bnbdmB4FiwemyDuFTUO+j57qI5x2zRewoC3zgJwoGhUpNGppo1d2TTVplB6cSmdfI+UldA4teVC7OjHgmC5Qpd8BlzHv3F9WMiDxX1AnPv78gtEtESYVTtzuMmdglmwNLRmjH2EmqvkqMaITCyTS+4TQDAz9Yvkna2qSvKEcK8qlYqv7TcsghCFRpVzWZtu88J0yx/l541f2eG+nlwMJ+bic70BJjFb1TFe0jJBQNKKERvJ0VLly5AMagKoUZpAN9GhA==; 31:Bvemd1H207cwy9vrZyYT1iwwAX2yynQpwGTR2QSRE3u5YTyOOffxrLSV8ztcfTz1kC9v/JtLekk0FDf3cU3pZXZuQaefXKwdNcltdbWTd9C7uWP61iZeBjvCaKdhpIcAe/MeOahVrkdtdKiyy9REuHeoTWbFCpLzIw1RVYRMCUt8Zsm6P/i0uooZ2KU0gq3wMJNY0NYwJuyUCcz+B8aq+ZAALHd1CeABCwIcywXF9WU= X-MS-TrafficTypeDiagnostic: SN6PR07MB5374: X-Microsoft-Exchange-Diagnostics: 1; SN6PR07MB5374; 20:Jl82D9MQ9C15m7weCw4RrGssjmSLhXcpkRQR+1pdpmuNBx7F1rcjJTsz+q1FDZevTgVACe5Jf5FvC5kbweX1Onur6WTd6zH/fHMMtMOZFdD066QvrS4ng9FHGTBXvhfrwIn8SeEsy67ZK0egYZ+SCd8RpPaQlmC6QqtKKJTi2SFMv3w1AVIxVORGpqe6joydC9GJmckT9746hIZuoDC0oOAqJpb0qtEq3z/Y6tYYcOhqR+jauK/cyQ5+OHQ4x2zq2iZFxIcNhPRGjWwk5e6AvVYqdv1oTR+YuyqoWm+bB9/eUpmeK5SRkUdveE+X2vz223itMqbdWTagCc1uuWXlcCh3RgYDXZhgMxG14J3lMaF/xJSAVqe9STPfCDxbTjmKBrbjSsylCRL6N1mE9YZEgSWDbX/B67KIWCoXiO0+7/r1eDZDKxFjSPfr71lA80owNHv2A9FXu6oA+xL+/k+W/WCRG65BXkgQfv9G66lpPmtbZEwTIn4vKPpdWPJPTXoO; 4:SKiqMq3mr5AQbx1Gr3bdBI2CSbJFB1mDghyqB0aZhQkhgbzefDmh+nl4JSAW2OwBFldwsQeJy9EbWskws1oVa3Xv+tkWQwM03Pt5rdIP0ssm6hxPmMJNuhw9YZ7/P+Y37tgNUqxoZWcpl3vlBxe5wQvmrwRlqrODXNXeQixhTeHH6iI+H6wlFkANaD5ENYSYXOa9ylSGUbwVoNG2yL7gwrHitv2XmMlxd2n+g1fsrpv6TDy5g47JcKPtB9imR5DvzlvX9OyyWnbxXiS4vF7cdXrTqQnVdaeXiPPMI7ro5YTR/eKOG9DaBWpjE/X/Eqdr X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(20558992708506); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(823301075)(93006095)(93001095)(3002001)(10201501046)(3231311)(944501410)(52105095)(149027)(150027)(6041310)(20161123558120)(20161123564045)(20161123562045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699016); SRVR:SN6PR07MB5374; BCL:0; PCL:0; RULEID:; SRVR:SN6PR07MB5374; X-Forefront-PRVS: 0772E5DAD5 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(136003)(396003)(346002)(376002)(39860400002)(366004)(189003)(199004)(47776003)(50466002)(2361001)(305945005)(6666003)(5660300001)(6916009)(8676002)(48376002)(7736002)(81156014)(86362001)(14444005)(107886003)(52116002)(4720700003)(7696005)(66066001)(51416003)(16586007)(44832011)(316002)(81166006)(4326008)(25786009)(16526019)(1857600001)(106356001)(6116002)(478600001)(386003)(2351001)(72206003)(68736007)(486006)(97736004)(3846002)(53936002)(105586002)(186003)(8936002)(36756003)(476003)(2906002)(55016002)(2616005)(69596002)(956004)(26005)(50226002)(21086003); DIR:OUT; SFP:1101; SCL:1; SRVR:SN6PR07MB5374; H:cavium.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN6PR07MB5374; 23:a2hxsTTqqbTU724wHXJ6IZEWJ9mO5szET0Ep9zHT6?= =?us-ascii?Q?jPKrPq5fJRPpNfvdLDyGmmuV0UREdLME01lZFFrR3sgVD+wiZO1JuDSaH4eQ?= =?us-ascii?Q?ZoS71BeMVCIWBe304W3f8izjzaTfSQrcRCvph5YDJGNgdt7biUNKFqJC9huC?= =?us-ascii?Q?GZ5jDxMdWmrl3Ri+xExrjx7nqobSKiE8COUgAWCPvVVmeeGSWg5UrpXXbrNw?= =?us-ascii?Q?GpfllaoI/Kb+xOf8tcNbt/8g9XaSLQND0v5+1X/BFGW+OJdfcbMEARsxJ7vH?= =?us-ascii?Q?Z52JM3ZG2+qpXKGTXeSiFdlwH5N2b2WGMnCcjUXpEcVQ2oBaunR7BiOQAwhL?= =?us-ascii?Q?zMdYdldCAVWGCzoqhUk2KVFoQK1bp8UbbiZVgpIacVmvlJ7DBuoDr0BaAWAG?= =?us-ascii?Q?uaaU138YkBnqkLzlE8BIQXmjKnvCxnQULBcDA+j8Fo/Co0/i1axpdIdSL5iO?= =?us-ascii?Q?tZ6pN97z0w3Z3Wazci7h/f7x10qCRiox5bjoxe/R5sPBb5nIY0dNhTPTmCQo?= =?us-ascii?Q?TwHdb4yBYRFf/nL6iaRBHI/slIHpRgNKOaI2Z1cTnJyCBj062W8tVx4b0iF0?= =?us-ascii?Q?k55SjUVVniq5Zjrm6dTNSawjxZN2h9ymVKjcER11tr4AmZZH3Wgttghl7rJc?= =?us-ascii?Q?kicwDbiTNiTp/fL0chUnrUwOpjiOvwR4bVo0GhQid9XrHwRdPzBE7shWr/5+?= =?us-ascii?Q?BbkDT7Au0+s/2y7yZBRXd2NP0NF/SSXS1YaQlprKZDPE2mA9J49JQ//WyWq/?= =?us-ascii?Q?Ydk8qI41dSJ9hKyF0bRGY2qbR4CX24MvPJnqOuHgToh3iURwbzhWKJe01I4+?= =?us-ascii?Q?iAcHiCv5sl7fZlnS40OALAyLnOJu4waAkXwkvDZvKLGU3d82B4Y5wPNJO3B4?= =?us-ascii?Q?6nq8Gqo1Doo47V5AmhaOnTYie5y5CWLbRBsZJEBm3So9B2DkacsLS372Ltim?= =?us-ascii?Q?gqv+0dp9L+eBKjvaKMIkpD3meXI0xn7B4aiH9lIiFKcmfLQ8BWDeBcr/Iv9M?= =?us-ascii?Q?QqX7wNsL6NUxYyz6i3d6y7GnodAIS+HXQIvxhh8Cpo6kEhV/xFI+iAxJHQi4?= =?us-ascii?Q?uT+guWpK7tLtwQP78DlL0cheo6TVBZK9usEe76M6Rz+6LiGe0nzc41pz1ODX?= =?us-ascii?Q?mCoMRd8Of9Th9WAsKBKoDOpto461+3CVfidJzx444KVIhMrW3sOZlXVHRd32?= =?us-ascii?Q?bjMTZQ1Zhr2sOPOFlQ0Id/GpUAbA1AYabjRJE1psBqS/fqSdR3vzGx1/y3HL?= =?us-ascii?Q?6zysJf8TiFZ/hiUHw2ZM6QfH82ohrSU6QXpadEwi9wu8u1nXI9xwxVCRdAIN?= =?us-ascii?Q?X+dy45j5zGMBKFcEaDosrM=3D?= X-Microsoft-Antispam-Message-Info: PWjGUOw5iKkdfKQ7K4fJY6pdNGzju09tZ/DnyXB+JlxJhgJ2egXfp0vHiydAhrwQ3gsu8w4KiIH1uI2GUovd0wAts+cdOzKdljcNXB0WSOR+hz8vlMY+ZBr7IPsRU4UtPqw3Ht8r6kJDn2ZZRZuP0e9vciIrhGavCgNS4gTO3jwNQVHNsZaePc7DkD/p5fbC27xw6oqERetHqtKgq3OjuRKUcb/SLdPI6mwOQW5nDyzTK8x+ubK34n1rhvele8TQ/kO5nqgYk7Pgae8DHdjZBer8UNVp7voX+dB3tlfk87CNlaDzw6JkctL78ja6CTWHgC7Ut+lcq/tKpYcA6NHNPjBWMCKb8AhFaaP7gHOr7qY= X-Microsoft-Exchange-Diagnostics: 1; SN6PR07MB5374; 6:tqtI59pohiogzgq9I8AxeP58vYYtWSZT9aFliyb76AVV+Bqw5f+sTKYkwJf8t2scWh8/xU24HxTfc5X81e5hQezxsHWx4vmnh6/Z4/06oYqGnH4RpzQbSqIEI1yeWNc+eZJJNmcMHzHbj0CAwWy6+j5Sjcni8jqAnnq6qHAc3RT5sNsuuxMMidSTFuT+oJG1b3zqQx7eTN3ESb7Mneg/YZn2123qpOrZ+JO16cmyj0sYSqpSj+M8pFQTt64VqdnqzbdFkA1zd+EV2K5aTSXml+POhth7E65un/g7RMiiSuB8dB2pGQReRyatdVuiSpDAQuLI/CnPXCQ9A7aLa/eRJnb4rDcJO+P3De6A+hN6SmKG1NEr5er4knRAOAdY0PVB0jgal7QgAD6H0qnopIz4YRNJhMKQc1+eqnItf23xuddDf/tzduWwsbU07ydVb3o7VU1rtDnuXhwp2+rf8LL5cg==; 5:WoRmhBiggMlYiTlnYCzR4sal8nsJOyXglLQRFn/ocyb/d+nszyvlc+2M3O7S3o/JV/2zOEjWVIdYPqrNAA/6Z/aD8laYEQxLElImJCy+BgE++81/Ue8t3GZihcACAtq7SInivlMX7FiaoyfCHl4GSa1m3wScd6kF4y70vkZZZrU=; 7:k8OiRZ937OXgaxQsF2fuKpyDi5W+VvL//dcCwhgCn8d2ujSNeu3pvBuaL9Mb+izHQoFQ4CYLiXH1rQjhtlqnE7oO0OUNtYj28rRyW2CNgxg4frsqlw4O6kwlpp7FWYw7NsIC1sWAqj9yP6iLGXx2YueZ04NvR3OHqbip/3QMV0ymD8f+w85VA8jAo3GeTwxuFoykGJyLGoBn/amkwcztzI6md5g2otwpw9cgg6nBOpUbPPW3ycfJRE+/59alyXAT SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Aug 2018 18:57:07.2216 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9131129c-c274-417d-27c4-08d608610f17 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR07MB5374 Subject: [dpdk-stable] [PATCH] net/bnx2x: fix to set device link status X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Aug 2018 18:57:10 -0000 As rte_eth_linkstatus_set() is not available in DPDK 17.11.x, add/use APIs to get/set the device link status. This fixes the compilation error originally reported. In 17.11.x, testpmd doesn't call link_update() as part "port stop all". Add an explicit call in dev_stop(). Without this change, on "port stop all" command, peer correctly reflects the link status as down, however, the testpmd incorrectly reports the link status as up with "show port info all". Fixes: 5bc1ab14417b ("net/bnx2x: fix poll link status") Reported-by: Marco Varlese Signed-off-by: Rasesh Mody --- drivers/net/bnx2x/bnx2x.c | 2 +- drivers/net/bnx2x/bnx2x_ethdev.c | 117 +++++++++++++++++++++++++++++--------- 2 files changed, 91 insertions(+), 28 deletions(-) diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c index 01035fb..e58684d 100644 --- a/drivers/net/bnx2x/bnx2x.c +++ b/drivers/net/bnx2x/bnx2x.c @@ -7062,7 +7062,7 @@ void bnx2x_periodic_callout(struct bnx2x_softc *sc) { if ((sc->state != BNX2X_STATE_OPEN) || (atomic_load_acq_long(&sc->periodic_flags) == PERIODIC_STOP)) { - PMD_DRV_LOG(WARNING, "periodic callout exit (state=0x%x)", + PMD_DRV_LOG(INFO, "periodic callout exit (state=0x%x)", sc->state); return; } diff --git a/drivers/net/bnx2x/bnx2x_ethdev.c b/drivers/net/bnx2x/bnx2x_ethdev.c index d3f2efb..a2eb538 100644 --- a/drivers/net/bnx2x/bnx2x_ethdev.c +++ b/drivers/net/bnx2x/bnx2x_ethdev.c @@ -14,6 +14,7 @@ #include #include #include +#include /* * The set of PCI devices this driver supports @@ -79,16 +80,71 @@ struct rte_bnx2x_xstats_name_off { offsetof(struct bnx2x_eth_stats, pfc_frames_received_lo)} }; +/** + * Atomically reads the link status information from global + * structure rte_eth_dev. + * + * @param dev + * - Pointer to the structure rte_eth_dev to read from. + * - Pointer to the buffer to be saved with the link status. + * + * @return + * - On success, zero. + * - On failure, negative value. + */ +static inline int +bnx2x_dev_atomic_read_link_status(struct rte_eth_dev *dev, + struct rte_eth_link *link) +{ + struct rte_eth_link *dst = link; + struct rte_eth_link *src = &(dev->data->dev_link); + + if (rte_atomic64_cmpset((uint64_t *)dst, *(uint64_t *)dst, + *(uint64_t *)src) == 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. + * - Pointer to the buffer to be saved with the link status. + * + * @return + * - On success, zero. + * - On failure, negative value. + */ +static inline int +bnx2x_dev_atomic_write_link_status(struct rte_eth_dev *dev, + struct rte_eth_link *link) +{ + struct rte_eth_link *dst = &(dev->data->dev_link); + struct rte_eth_link *src = link; + + if (rte_atomic64_cmpset((uint64_t *)dst, *(uint64_t *)dst, + *(uint64_t *)src) == 0) + return -1; + + return 0; +} + static int bnx2x_link_update(struct rte_eth_dev *dev) { struct bnx2x_softc *sc = dev->data->dev_private; + struct rte_eth_link orig; struct rte_eth_link link; PMD_INIT_FUNC_TRACE(); bnx2x_link_status_update(sc); + memset(&orig, 0, sizeof(orig)); memset(&link, 0, sizeof(link)); + bnx2x_dev_atomic_read_link_status(dev, &orig); mb(); link.link_speed = sc->link_vars.line_speed; switch (sc->link_vars.duplex) { @@ -102,8 +158,9 @@ struct rte_bnx2x_xstats_name_off { link.link_autoneg = !(dev->data->dev_conf.link_speeds & ETH_LINK_SPEED_FIXED); link.link_status = sc->link_vars.link_up; + bnx2x_dev_atomic_write_link_status(dev, &link); - return rte_eth_linkstatus_set(dev, &link); + return (link.link_status == orig.link_status) ? -1 : 0; } static void @@ -169,6 +226,32 @@ void bnx2x_periodic_stop(void *param) */ static int +bnx2x_dev_link_update(struct rte_eth_dev *dev, __rte_unused int wait_to_complete) +{ + PMD_INIT_FUNC_TRACE(); + + return bnx2x_link_update(dev); +} + +static int +bnx2xvf_dev_link_update(struct rte_eth_dev *dev, __rte_unused int wait_to_complete) +{ + struct bnx2x_softc *sc = dev->data->dev_private; + int ret = 0; + + ret = bnx2x_link_update(dev); + + bnx2x_check_bull(sc); + if (sc->old_bulletin.valid_bitmap & (1 << CHANNEL_DOWN)) { + PMD_DRV_LOG(ERR, "PF indicated channel is down." + "VF device is no longer operational"); + dev->data->dev_link.link_status = ETH_LINK_DOWN; + } + + return ret; +} + +static int bnx2x_dev_configure(struct rte_eth_dev *dev) { struct bnx2x_softc *sc = dev->data->dev_private; @@ -270,6 +353,12 @@ void bnx2x_periodic_stop(void *param) return; } + /* Update device link status */ + if (IS_PF(sc)) + bnx2x_dev_link_update(dev, 0); + else + bnx2xvf_dev_link_update(dev, 0); + return; } @@ -342,32 +431,6 @@ void bnx2x_periodic_stop(void *param) } static int -bnx2x_dev_link_update(struct rte_eth_dev *dev, __rte_unused int wait_to_complete) -{ - PMD_INIT_FUNC_TRACE(); - - return bnx2x_link_update(dev); -} - -static int -bnx2xvf_dev_link_update(struct rte_eth_dev *dev, __rte_unused int wait_to_complete) -{ - struct bnx2x_softc *sc = dev->data->dev_private; - int ret = 0; - - ret = bnx2x_link_update(dev); - - bnx2x_check_bull(sc); - if (sc->old_bulletin.valid_bitmap & (1 << CHANNEL_DOWN)) { - PMD_DRV_LOG(ERR, "PF indicated channel is down." - "VF device is no longer operational"); - dev->data->dev_link.link_status = ETH_LINK_DOWN; - } - - return ret; -} - -static int bnx2x_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) { struct bnx2x_softc *sc = dev->data->dev_private; -- 1.7.10.3