From patchwork Tue Jan 9 09:09:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yongseok Koh X-Patchwork-Id: 33156 X-Patchwork-Delegate: shahafs@mellanox.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9B6E01B161; Tue, 9 Jan 2018 10:09:38 +0100 (CET) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0087.outbound.protection.outlook.com [104.47.0.87]) by dpdk.org (Postfix) with ESMTP id 79A672904; Tue, 9 Jan 2018 10:09:37 +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=DytyubtMfXUMbPShOz+AbPlPPHn1gN0MyImLxFXrsU8=; b=JEMumr0FYnzpr5jBj5bBxUNw6r5OsAxyiwBDbqU4rbsjhG2Es7JZQfcdyNd6dCJbVKO0HvB6+6o9J4ijKJT+cVk3MvuOXg7N/FEbHYbjvLpatnKJApA2lFA7m24W1++sjFI82i42Q9p7+IkF5A7aBAJfUR/3WCHQSg9O0ucDLQ8= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=yskoh@mellanox.com; Received: from mellanox.com (209.116.155.178) by AM5PR0501MB2035.eurprd05.prod.outlook.com (2603:10a6:203:1a::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.386.5; Tue, 9 Jan 2018 09:09:33 +0000 From: Yongseok Koh To: adrien.mazarguil@6wind.com, nelio.laranjeiro@6wind.com Cc: dev@dpdk.org, Yongseok Koh , stable@dpdk.org Date: Tue, 9 Jan 2018 01:09:20 -0800 Message-Id: <20180109090920.14033-1-yskoh@mellanox.com> X-Mailer: git-send-email 2.11.0 MIME-Version: 1.0 X-Originating-IP: [209.116.155.178] X-ClientProxiedBy: YQXPR0101CA0068.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c00:14::45) To AM5PR0501MB2035.eurprd05.prod.outlook.com (2603:10a6:203:1a::21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: b6c4ea01-ddbf-42e7-7af9-08d55740b3a4 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(48565401081)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:AM5PR0501MB2035; X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2035; 3:9HN7DFFmk6xDYMLhu0lmH8nVCWdE13lCG1GWhUBO0gQOxuRpjaJTTWTZnAScrCW6E0U58LwKWSzh4qS+kzFtUPLW/41W0SRJ+SJJZ+3KH15IFWIpAdsSZx0eNZ19t8dalYapN+aSxEZMVzz32z1L6HeZrcUJ8AFlnN9Tzb2jIxaOAI6dUPB/d6PeNV+gBmF5Q3E5RzVpTkIX9ijqb+RMIafF2Ge8gMa5o1f1rXBh2h9R54hBUtblSoudIDuB92hW; 25:9yX5/wdofPdwhXXzggR8qka68C8dz7EdLR2od+V4mWP+j0//8zqYhZ6ZiP3FVWY+L59dw3Kiu2xDraChJprq2dNrexbcODGPkWSr5kXryuDkiW2mY0VgdygopU8yMpGVqhu+kv+TbL0SzSENruZavBqoIoeXkhR/taRky7V3SzsmVl15Wpfsb3CdtstuXkzRt6ts1wvSzoL9iMOi2Rsjat0c8Og5UrEUVbuUYSbdy3qZyzJPVshyVvj8jwNX44sBnQTX04iL2C+ElM4jW7RxL5by8f+hYs6vftSIZ2pNhcRZDVfqLivA56A+10ViZcOXeFHVTqY9AQhdPK2OfW8zWA==; 31:cUfRkByVfK6g83Bstn7TXTOLTzTjt5792eEtFMgkN4FrGS7US61a6om4kAyVSBAzsziq/apRrXjrLmCLcjQzB2dAYk4RjILGbpYa3cxBqw+bCeNq2AWbHxVd53xReEsYUP8nzks2gyDdcsnYbWJpfKcBZ4hSj4vKqyjS3L+zV/LhilLmB/ZBTfA5uC62D0xmi0fM4oRaCLQRXg0MdwzJK2jjqsbtNd1lmSNKLjxgBz8= X-MS-TrafficTypeDiagnostic: AM5PR0501MB2035: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2035; 20:is8koHTBgRfZCpVeJdkIth0vyb/PWUYWBk3UOqPZNSwFBQ0u9vMhpr57y4eNoF3ZeC8r86O1ePInNAwyzJThm7I3VX5kfb9yt7BdPibo8JOHBx7DTcLP91aGsP4v/HPn8TR+nzN7RSvz/qDKIufqNp5SL8o+FXawZTHQUPs591r301vQd5819hISS66q1h1gABrYU9NfpJgK8y+5/hT1LcZlX2t4mWgWndZk4jNAy1KksXnHrde/SE4NZxYa9Pvw9tZjjuwJ7eGzM1nvoKzrgcRvba0L22LdN8gtDMAhCYQFow7733hxOyNzMorb/hjqDv5AShlDNyFA4aym5nRMjGVs3xqbZxL80KcoqzygyV6d5+aFgomHKnCS99RaY5JYc/4uTJQxZHAMiR8Nsqf3keVx9cCk+pqINRvZ87y9gxBXoTV09WtYoCcXoaDzuy4BgzNPJfJGt4TmPACEVunN39zEPbWJ7XLo+54InMiICxZMG+f5g0ithuV9jZ0rAqYV; 4:1PVTl69ZEDHrJ7bqIXX0WfTcVU0FZYF2ILPv3QlZQ/fdlF27QgBcJm6HPGX3KPpWqnCUfgMqO09s5KNUV2j9utdE6OEF6meodsbc/LtB2BnEoqfqd19xXja9Yb2MoZVMbN5vYyJt7ekTC4hVivMh8XOGe8hiufbqELuMNWkXSJtqe1csKrXSkBv2X8vX6U/7N1tpja27/b29ui0kq53+FYaGm+EOYdWyrymNi9aBuUMvK5bLvKcFBY7P69qceag65zM4ai/BSPIaIvLAhOPVAA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040470)(2401047)(8121501046)(5005006)(3231023)(944501075)(10201501046)(93006095)(93001095)(3002001)(6055026)(6041268)(20161123560045)(20161123562045)(20161123558120)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:AM5PR0501MB2035; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:AM5PR0501MB2035; X-Forefront-PRVS: 0547116B72 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(346002)(396003)(39380400002)(366004)(376002)(39860400002)(199004)(189003)(55016002)(50226002)(48376002)(53936002)(305945005)(50466002)(8936002)(86362001)(69596002)(6666003)(81156014)(8676002)(81166006)(97736004)(21086003)(68736007)(36756003)(51416003)(7696005)(106356001)(52116002)(105586002)(16586007)(25786009)(478600001)(4326008)(66066001)(7736002)(2906002)(5660300001)(316002)(386003)(47776003)(1076002)(3846002)(16526018)(59450400001)(6116002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM5PR0501MB2035; 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; AM5PR0501MB2035; 23:oY1t7tSWh/s1/Ek38WtJGnM8A4O7Ovh0vRG33JI?= kBjngXdI7gXhgieTzmxM+jt/cHkstgmw1s+5S57QdV7YeYJIicoCKBKhq8hyeqjPunZFKS2q+isgoRXSRy6VKFMqOhIf4G2DClEruqzUzdyzgb6jtOgRpSJXIjBWLGjzyWSqnIjMyP2ZK3DwnKSwzDcRTww7cHXTSQuEzvLfb6K06iClNgXQ+VEHkhFT++A09sZpJmJm7mTvddxlny7GV7wxGeCvqVPlZ4QDzhjqEWywzXNpWNs4xWAHtjhFWjcXsdbJR3nkRqx/O8/qTH48p7aijFR2jtTFbVqlxpF7WEoYuztzrXO4a0l+gld0Z4+TUM55a/MTpvNX6gYccA2vRRjANs527EPPLLJdmE0wHLiR+VYlPzF9Lhz1WD50NulIpswCNCJf80EBh4vHKLvf/zOJmB6bpnPSTCPDVtTyWlMBP+MySwa9JfmjXSCM2lYHSsSGBSauks9aGhLsSAG0NRO91JR4DhX160XF4Qks+h/4CxaM+q1yriD3n++Xk5HrO/jXVZyUofivLIs0+/2UUIOds20xdITsFMQjjwNXTC8KUmsp6x6VW4OwDfUUPsdfkpb7ZIoYl1xI7MPxH+dpa46iL86hSlBFGF+KduTf1A3s9YXY66PIxEhZR4nCoVzUi18yCRbPTfw1CzR0wV9Gt9a396ipk1NC+9bdvS0Yf0+sFRY06rzDNeKJiNI0vG8rn+HsA+/xhoZFQjFvd9iwmfmYcAoCsuFdWFETFx2Lim0e/p5ApQsviaIH6pgre1FQa519c7CFoL630AMMffELlaSkBZJmYyd1VDKzkPNtMppxONdw+qPt47gM+MUfE0H6CPKDC/KRF6y98Fr++V0LzmJ5LYnmO+8BaAqckCsJkvdXUkgiEMMt//EeXshampb37xzu14Gm5OhjvF31mziBxkTE8LDZbhGuS2RtVO1BsB4NCiYwbHpxx/MLewgUwwwReYipYsqLM0+cJmYt1ZwUIYL9azd+2KbopOqWTnDfnXMXtVxE0tqNfDGluIumwRNUji+bdjZQn8uKMS/nTAeB6FooN X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2035; 6:S7VqGtKfkoXZsG3FXYcmAmzfeiRUG9joRlu1RQRxha9MUbMo0TlLKDmbvJONHW8jAk7TtwdaoVUdIsn036w/c6Swgpc9DtAk9MfW42GNb3JDmRcp8VnunB/n2dSTLxu9MiLEvaLOtPwrY/Tj0ME5/Qq0A98H5q6uLD9jqb/Hq/UaEcxpU1rF237hR5DloxLJdw8pvUrxycqa+Q8VrKnFl7K7sutuzY+OSe6jnVwK12hOY8GicW9JKrMPByscwTsOv2El8fP4EJSnqTEf3Guq2jjzJ2hvWaaSH+ccIutTT5Agmw56zQ67oKwxLXYfrGZuQij7+l8mDAzUciYBSkHKkoO2VGfZDVY3FaDFIZ+hCLo=; 5:kKckqeKZOMxJEjw9/7VMBGZ9ZYsKRS+Q/pQFos1jRe8Ul1kpNiJtLdAYcYMYHfq4SP8x+SVBW8tw9qHLSs5dfuT7hjvaiHAyMmJtDQGExRHvXfafz8+h4OyyPwmRxo1EmPSTGTeCw1DjDMql3YSI8MZqrAIYkWfxQdLaIcpIWc0=; 24:nFK28AOTZSpNDD7PUKAN4wM8sC/JbWAFeKwh70DkcmnAXWNjZ4w3o1766wFySqF1HO7EDX/YgapfIEOdwxlOed1Speg+0lV4v8xxGOZ1ulM=; 7:yT0EdSrjSNOMp4PONRu0kqv9+1X6jGQRXkLjruiwUkJWFDmnSFx80hBqmGoGFJ5jkt29yVcek91F5egCpk24Wl39v/xQpz2XZw6gUkgczxk2MZtvixV3AP0VeK1Ce1fjzTi0rGdkhhkq23cVLs+9tIgVRiHmHVQOfrEZdz7tTrJs4Sr5u5yA3idZZ2ICzOvLaXf7No31lfdOGCyvwXCS9BFYAmtdOudJ9x28xbE43YqffsQwPQu8BoAVkmQiubEz SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jan 2018 09:09:33.3086 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b6c4ea01-ddbf-42e7-7af9-08d55740b3a4 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0501MB2035 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 e6a69b823..1a4f444c7 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -165,6 +165,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 282ef241e..9354dd17f 100644 --- a/drivers/net/mlx5/mlx5_ethdev.c +++ b/drivers/net/mlx5/mlx5_ethdev.c @@ -1185,8 +1185,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); @@ -1256,9 +1260,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;