From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-eopbgr60087.outbound.protection.outlook.com [40.107.6.87]) by dpdk.org (Postfix) with ESMTP id 1828F1B1E3; Wed, 10 Jan 2018 18:47:08 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=2XThH5dlAR8CVCliyvLIKb1sClI2lULS/rBCF26JZIU=; b=Gj0Dfv54lKXTTyw6dSl4xtxR+jdZIh9XaZVro8BEVfUHFyfxsy0zPt3/YijBweVBQOR7fymw6iv6XyHVSkM70Ghl0f2T1v1q7AaPZrLyqkR9eVodrP330hxdrNwhA0drcs7J2t4TH6PdSqpX0d8XPqRpsuflm4YYLrqqG+DPAGo= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=yskoh@mellanox.com; Received: from mellanox.com (209.116.155.178) by HE1PR0501MB2042.eurprd05.prod.outlook.com (2603:10a6:3:35::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.386.5; Wed, 10 Jan 2018 17:47:03 +0000 From: Yongseok Koh To: adrien.mazarguil@6wind.com, nelio.laranjeiro@6wind.com Cc: dev@dpdk.org, Yongseok Koh , stable@dpdk.org Date: Wed, 10 Jan 2018 09:46:49 -0800 Message-Id: <20180110174649.33662-1-yskoh@mellanox.com> X-Mailer: git-send-email 2.11.0 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [209.116.155.178] X-ClientProxiedBy: BN6PR14CA0020.namprd14.prod.outlook.com (2603:10b6:404:79::30) To HE1PR0501MB2042.eurprd05.prod.outlook.com (2603:10a6:3:35::20) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: dd41e3e9-abe9-44a1-2fc6-08d558522938 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(48565401081)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:HE1PR0501MB2042; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2042; 3:ACnqX+/Ur6ZAjSTb35nWc1pGhf9MQuby0/3ckl5p4lqqW1eerhFohzxN/AAqgwgaaLidrok6YZcXfMjSN41BU1FMIDB/F1J9ePmFSsXSx+TgHw+HZ4vjV0ieAq7qjORkpLN1gcZPrKjHoh6Gfs2BFpRubUoIgL3RRDpPo37aQLFfU+gd5j3r3JlGEgOeJ1OXWujJihZRNR5IKhJkWOxbvqQwsUVAKdQPX4Smt1EMZOavhdYAnT1fHLPkJiAWpap+; 25:blG7R6jUf9slH++8pyagiRP0KreffjiM97B/hxcWnaiVphCv5WkCCMtngKmn+WsRmyLeuMXSQY9/vP36ELJejoYTmA5WEvXUWvts/qRskYtYs8bk+COY4c9YmvL8fGTQDH+8Ytschf0r0mWxBOuVWuZErAbYuD00UXbMH6YBujPpCcbUEFE0cfOxcq3m8PazQhaJNKzVO1J7vtv1iUc0rQAjkBUxyuIhLREB5c3ZIu+4galziiktzp5v/8n0j/C1lPb2+XPR47mI5opWVLQnTAtY6iZFGj/23n1EnwWjz9Uyq46GJ9WBnwfNLITdVyOCGFL+JAAvGjjs2/B/7+ioLg==; 31:M/3upYY92lqVKpngWYBrBswFQ9KAyjsceUeZQ37a0ULpd3dvrQGbsdyOYYJn+y15uS+H4WoOQ5qIGFux8OJ/v0R3tM2EW4F6Emx06bN4CX+atP6GG5qR/4t9szt7VjW6HNRKYH9jI1jP1d4DLoNe0z9+gKAyk5y17wPkynYpBHeZh/Hq6HEAtYv+2hnsXYWvrebC9+YS3fV3AGdzjNlH98rB4bPnma9ZuhxDqszW1Uk= X-MS-TrafficTypeDiagnostic: HE1PR0501MB2042: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2042; 20:j4syo5dIiPipH2wmt/N8uQdjg9Q8pBF3dOjCIh/fJtMgEvu13lmlRTqb3QEe8tdC/hX+t0mIDv8s84l1ygACSVdlndqCKv3pMQzpCU111V1YnodfhmHDgJPwV37Q4tFGHslmWPRdsXHTQKOq5jCew0LdUJY7R4rhBfnIiimQhXUhIFoawKBfaYrpstvjaVvvA8RXRQF+tEbTSazVRoBkbQpmstg1Nzyot3G3LuEsFW/dcbkfSlIhR2sd7MEBybHL7DLZc9fBIUeZglw9WCMD4G6EIYNKvK1FTUFJGcBcmXNL6JtSmcURcEnPRBDuViYwcdvUsd3lbGMDdH6gtFJfqjD3ygZ4sAUOuPnBwlFcZRdgUP21NUHO/P78Xg4weOugDKhgi4h5OzVwCrtYCD8+8n4FYfjj4VGXNN3UJX3RPIxmb91bGiBznoO8MTtjQtI0+YGyjVQA1xoXAhbHVFLJJLPEqksdaxqIZbIT8+QxZzmM8zHfLxXlLI2Syrtk/4BS; 4:R0P9OFuF23AuW1sGf5uuAJwxfDmFE7f0jr/1b7BiTbPdd6Qt8Ssd2idTXK1xU1rDFGv/WljPckR7SpF5xKfTGPGNI+gPFD5HL0T8PJxV4N3XpA3dif6XL+H4gQiXkYbKmAndXI5/NrKhQIP2ZkZCRb0PEGKp9w8Mb7UlBBK9hWTXFU+YZaXuLypEDA6ys+CjRwwSID77VQyQpKt42blUH/nOx4ppD8O9ql9vr/rbqrQDcN/Ms3j/KzONJOLpi0kYV4A7+cZYr1M+ZrOSfThLgA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040470)(2401047)(5005006)(8121501046)(10201501046)(3231023)(944501075)(3002001)(93006095)(93001095)(6055026)(6041268)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123560045)(20161123564045)(20161123562045)(6072148)(201708071742011); SRVR:HE1PR0501MB2042; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:HE1PR0501MB2042; X-Forefront-PRVS: 0548586081 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39860400002)(396003)(366004)(346002)(376002)(39380400002)(199004)(189003)(4326008)(53936002)(66066001)(59450400001)(2906002)(6116002)(6666003)(52116002)(7696005)(47776003)(48376002)(16586007)(21086003)(51416003)(1076002)(316002)(3846002)(55016002)(7736002)(305945005)(50466002)(25786009)(86362001)(8676002)(69596002)(81156014)(478600001)(68736007)(105586002)(106356001)(16526018)(36756003)(81166006)(386003)(8936002)(5660300001)(97736004)(50226002); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0501MB2042; H:mellanox.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0501MB2042; 23:TBpD1Iwgpr09KSkbpU7r3S6X9o61gS1rnuPWlbA?= =?us-ascii?Q?8GoG0Unwq2Tt6q6QwtBBQ5m6kxdZ5Ss8Xp1eiPeql1pUv5EyGm5APEh47Dr3?= =?us-ascii?Q?u4DWYddbYToIZAtC6UkSprQnzQ6aT592NlvqSEM+HndCoH2oqNqnAskIZQrR?= =?us-ascii?Q?ezKLGvGBuD+wvX4TlXwK+MmAHesn+vSKF0QL9E3rptaEspVYIANuKE723vzC?= =?us-ascii?Q?qm1rsV4dMhoxIbl0VIbruxUkRgcpn2E5lhq/nllgi7woM126jRoyGDeYFUqR?= =?us-ascii?Q?8gyqPWvN9R3rsJxxi3V7xDnmvI2Zd23ku+Jk+vbxIwbLGgowgapVoNKZ0uyh?= =?us-ascii?Q?9j6owPzCy0uEW/jaS96sSZ3qas8O03+uNf9VF2Wh2Qmv1R79Prax/siua7Ot?= =?us-ascii?Q?pgMpQMXHgo7b4vKDSCsPQrEA3s37mkCQx4O6AUdb4C8+IqBnGbquLOqSVj5p?= =?us-ascii?Q?Qb3AzE3NM1NI1Gz/R5ykrvTG7/UQEH1k/XkHirwXutZO/LqL92NRExi28iAj?= =?us-ascii?Q?IKUhedgT+G7lhQWq2P2qqpPkneHEcvcrwUkydKJ/2VCb1zxnk3tsZmIOszP6?= =?us-ascii?Q?MAWfL6TRDli0h52hn0HlWpjcmiogassrtFlzummGkYYXIhBlck3eYrG3kcCr?= =?us-ascii?Q?SVFWyZBVa/w3YMQa9l+flfl+BdD7sBAl3d/m4Ewux1FvFB26CiX1ukpZJcS3?= =?us-ascii?Q?BNrxZFzAaGYozrLfKIovwDSW07W2XFp1ZIpX7v1EVesMl18lX6ZprmpmlSMQ?= =?us-ascii?Q?udv+M9jxeu+7kyxFBE4Lk8Y6zn5SBMnDlUWtmUg+rzw/sxvwWToN/MnHrBoB?= =?us-ascii?Q?3xG7kItNwLisIhfW/oU7X2cBRlSSkWE/IeAqqDAoDGwFHHFIP9tp/BySiG3S?= =?us-ascii?Q?B165fJsfHEW1giA2jjy/7ZNxFUWHS31zxQg9RL/j2wdUwMhmYZvAyOTPV6y4?= =?us-ascii?Q?cO7/KPPqyMHv4BKA6t9MDzz4ikltKm85NHM2UQN4Xtwyn50fPWzmQyuxWNcX?= =?us-ascii?Q?Qx71jH9sgFrNRF+YTgdBnJXzc5nw+nPfHBl5Bn8L+q+BUzDXiHxNvV+Z5dkA?= =?us-ascii?Q?Vr1C+IkiDGPw7NiGYCbWVwDM+A4+Z?= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2042; 6:5DVn144mDXfIfNlw83UVBoZSoeglKe9CJUN/w///f8K8DJnMd48m9bu38C3sH7xTTe2DM/pEKWrQYMFxBd0MCInt4g8gSfyrR2FBtYevww0zjPPX/wbr5XhtJgzHdkJOtqlPfZvGSBoyrPr9ymVIPSocd4pPFfCVPZsLET/fZPvg5Upnz0Ekg3411DexucnwQ3AlRAnWwuKzjKA9krKpNJgkYqfqv8ZwoU73Ol8FRLXvR37lUJjeaN9uKVz3EBUxWAAehTcPH8/Kq+wVQGUbo49JHTMoMen3pvVtbG8Vn+Am/50sdEyTGGv2H58hAGcglqrm6OImzX4XcK/owMvE0TtULALiSyF9cHdsG60XfKU=; 5:8O5FCcvDDWaPgw8ZxbF5mHdrVfw3Tbop7pLvsh/iTKqEAy6qDX26eSrrSJex6hXfIjtRVyidjyPDWFR+dKnr+tMb2tRvFBvvVP9JBKqxhownFIr2+JhA50OmxlFZHlCVCsagi6/5zm7P7tJ3PWV1lSfaVGUDvSy3FFXYwtrJVuA=; 24:1b94siXVHM2aeHVvBQLwpdou7CDegY1fbm/XujyCA6tZvaNvSdJnrpXA/kCxtLZ53ep6eEROroqDu/HgPAZ+7Al0dD/DZO8yytASa/7cMsI=; 7:cjY7TulnOZ14++jH8N5r/8brsTelHVfiVlQznpwXlrWFqxSU/93XCh4TfKUlUqe1JDTGDI9227aqn9NXgl4ym6dSlmjCP9PTh4e4GRIsRRK88Y6QPOAehJ5VFAo/Du0HHMlHpPUh3TTXUqz6LLpOPimwMThyOBEA+awPx6aPWjbFVANf3s3+aSG64ZRu4xYkf2sCpi/3dilk1gaXCd9KJIXqskQxayREdX99TYJpu/clsn1nuJLOO5F38JsyYaR7 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2018 17:47:03.1309 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: dd41e3e9-abe9-44a1-2fc6-08d558522938 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0501MB2042 Subject: [dpdk-dev] [PATCH] net/mlx5: fix deadlock of link status alarm X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jan 2018 17:47:08 -0000 If mlx5_dev_link_status_handler() is executed while canceling the alarm, deadlock can happen because rte_eal_alarm_cancel() waits for all callbackes to finish execution and both calls are protected by priv->lock. Fixes: 198a3c339a8f ("mlx5: handle link status interrupts") Cc: stable@dpdk.org Signed-off-by: Yongseok Koh Acked-by: Nelio Laranjeiro --- drivers/net/mlx5/mlx5.h | 16 ++++++++++++++++ drivers/net/mlx5/mlx5_ethdev.c | 13 +++++++++---- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index 8ee522069..e740a4e77 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -180,6 +180,22 @@ priv_lock(struct priv *priv) } /** + * Try to lock private structure to protect it from concurrent access in the + * control path. + * + * @param priv + * Pointer to private structure. + * + * @return + * 1 if the lock is successfully taken; 0 otherwise. + */ +static inline int +priv_trylock(struct priv *priv) +{ + return rte_spinlock_trylock(&priv->lock); +} + +/** * Unlock private structure. * * @param priv diff --git a/drivers/net/mlx5/mlx5_ethdev.c b/drivers/net/mlx5/mlx5_ethdev.c index 278a4dfc3..618d13d5f 100644 --- a/drivers/net/mlx5/mlx5_ethdev.c +++ b/drivers/net/mlx5/mlx5_ethdev.c @@ -1187,8 +1187,12 @@ mlx5_dev_link_status_handler(void *arg) struct priv *priv = dev->data->dev_private; int ret; - priv_lock(priv); - assert(priv->pending_alarm == 1); + while (!priv_trylock(priv)) { + /* Alarm is being canceled. */ + if (priv->pending_alarm == 0) + return; + rte_pause(); + } priv->pending_alarm = 0; ret = priv_link_status_update(priv); priv_unlock(priv); @@ -1258,9 +1262,10 @@ priv_dev_interrupt_handler_uninstall(struct priv *priv, struct rte_eth_dev *dev) if (priv->primary_socket) rte_intr_callback_unregister(&priv->intr_handle_socket, mlx5_dev_handler_socket, dev); - if (priv->pending_alarm) + if (priv->pending_alarm) { + priv->pending_alarm = 0; rte_eal_alarm_cancel(mlx5_dev_link_status_handler, dev); - priv->pending_alarm = 0; + } priv->intr_handle.fd = 0; priv->intr_handle.type = RTE_INTR_HANDLE_UNKNOWN; priv->intr_handle_socket.fd = 0; -- 2.11.0