From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on0046.outbound.protection.outlook.com [104.47.2.46]) by dpdk.org (Postfix) with ESMTP id 8857FAAC7 for ; Tue, 5 Jun 2018 02:37:49 +0200 (CEST) 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:X-MS-Exchange-SenderADCheck; bh=xUtnPcvEcHH6ALyhIk+JafRQjGHKPpwyQpVm46vmgY8=; b=PfVhrphBZZZwCcf4D8W55y+kWQKJGK6Pwn2XzQBzJ2SN19NtU2ytSqi4JjDnnu3Z44XaAwIgxyJmZ7+Z8o/APXkty41eeJwIzUWwk2awvmFAVXuLMjd8EWImptbB6MXgCHBYIqfI6k/qsuID9qr1xRpwazYQ8PgLnyJKPfhVx4U= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=yskoh@mellanox.com; Received: from mellanox.com (209.116.155.178) by AM5PR0501MB2034.eurprd05.prod.outlook.com (2603:10a6:203:1a::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.820.11; Tue, 5 Jun 2018 00:37:46 +0000 From: Yongseok Koh To: yliu@fridaylinux.org Cc: stable@dpdk.org, shahafs@mellanox.com, adrien.mazarguil@6wind.com, nelio.laranjeiro@6wind.com Date: Mon, 4 Jun 2018 17:37:15 -0700 Message-Id: <20180605003721.14367-5-yskoh@mellanox.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180605003721.14367-1-yskoh@mellanox.com> References: <20180605002732.13866-1-yskoh@mellanox.com> <20180605003721.14367-1-yskoh@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Originating-IP: [209.116.155.178] X-ClientProxiedBy: BYAPR03CA0027.namprd03.prod.outlook.com (2603:10b6:a02:a8::40) To AM5PR0501MB2034.eurprd05.prod.outlook.com (2603:10a6:203:1a::20) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:AM5PR0501MB2034; X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2034; 3:kyi78H8nPiAiIagvqxPHaFP/wK10NajZb7CJeCQf/g6RiMoqxo48+BHmnkKpoc9xeP9DX/3sKN3rAZEujM5cbkRgkRPud71gspLgyJKgmVWPoox9am3SHee1asAp7gs3tw9QoA45kOR6tlKcOc8n5GU/l6n48TnGf/cHjz//ztMHz+hQ5ANHwFOVgRya1fDQQBI06WwW/5emiwEjDIwaK34HEOCfPJ9K2a+izqW9Dx09ctavM9CKFIoLa2Mkydg2; 25:CQQXeZf7bzrSLp3wDq8GmZUIR88k4FRVDg32fgu98lm7ZJurXAv4q4jH3SkMb0ev2OIJHUZEE7xfn3IBsPP62xQOrZWZG7R5xLNroq+zFHrAmM3C9mKuDdlFa8/eOxnMd59tDAFle4hs3SnnA85uHM5luQgAopOlnU5MenoHETZBTJwsTj5fmvQgQnijG0UML08fPM9Pk0cZCiqBvUOvpO0M+L/i4RN7I90YmgM4dpbyUqWsVuZcTRQIAZBuIlUp7LdsoGipXoqii6AlxTB3eP/g2CCFGr9boNkf+kKuJobx17LadHpC7PUYfUFr7lP+JLvI3cNdstIYFW4uYScN1w==; 31:H3DfpmW67lj/odeM4l2dlC0rireoOpxF9etcx8fuOm66d8fVszlmobArXHfQ0+OJsERJQzHDLGBErig9+K0UKkNo/SebiurR1xbHknFOttn8Lk91Vp+BNQ1KNd3k1rwaz7NDE5AOa+RuZLdyM7I6lVRRWdecW31CVSSPJ1RB9fN/ta/NGy6RnItobB3BXgdRTiEOHSTFkhxF9CXNdk5WO0UgmzMUJUWMYtWKVjmGuqo= X-MS-TrafficTypeDiagnostic: AM5PR0501MB2034: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2034; 20:BPBmUkNEoA2XgAOmLPwCCH4Jca0+0jQeq6FsxR82U8hT3eD7gq1+OMf3+Z/a4jEuEhh7xZ8crttj9C8pDH5ZaWLEwNyarLuohYHF4/J8ccgsbaziK1N3jRlAXI0Rssp6NxHJma5lGcud5N7RSF37mWxVSH9WQEYxhJG31+6K2DzNjasEdTbqx71I/MmER8epg0VsUqqU+MjH1pQcDoRmEKmZtfIF4TLgOzxGUP8T7gQpfFWMMOTwYpHd3cMF56qd8uPG8CQCJCGoYXeFczBt0cxbMIuUf9Lx8oUU1Zma/EP0v/jPSeKth08lvfdlooCc1fMzzaK9dTMgYdtRL043MwRD8NHTkrDQckqDgxkwHmVGhqkh/z7hcb1/Wb4E1lSls5BR/gl2qZuQemv2g5KGxMXqhjrzxAwDXa7wP0stgkh9eB/HXFG4SToxLKOM3bjyDLB2Esxk6X7KmFM8Jc4FrmrkYzLuuLrCh2fZaqAO3haqQxPDXV7PBMDtQpkwQ4El; 4:TFd2lmKwXnJMv5JwSMSegzoDyu/A3WUfW4ROW8mIkcd5s9cuCmDvVQUY3nN77lNMGSGvfBfp8sYKZar68CK9mAy+1pAnonIKPOwX3In+3ygdAucIVDnppfkf+7auy7lWd/QlS/irEE+E0o+EeI0gxlntr0Zyd8eX5OVvzc/M4AKUz17lQQtIAehJkHY6rHAX8A0X/eWHHcF3TSEUx0sDr0Oe42IKvLJ7B6vBVsTe+RUIxEv7i9XSZsMb7p4Q7ODnGrDbZaWNdBfE7Lmzf891Nw== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:AM5PR0501MB2034; BCL:0; PCL:0; RULEID:; SRVR:AM5PR0501MB2034; X-Forefront-PRVS: 0694C54398 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(346002)(376002)(396003)(366004)(39860400002)(39380400002)(199004)(189003)(81156014)(50226002)(25786009)(69596002)(4326008)(7736002)(8936002)(305945005)(47776003)(76176011)(575784001)(52116002)(316002)(7696005)(68736007)(53936002)(97736004)(66066001)(86362001)(81166006)(55016002)(59450400001)(8676002)(2906002)(446003)(1076002)(105586002)(2870700001)(50466002)(6916009)(476003)(5660300001)(11346002)(6666003)(23676004)(2616005)(386003)(478600001)(21086003)(486006)(106356001)(36756003)(2351001)(2361001)(186003)(6116002)(16526019)(26005)(3846002)(956004)(309714004); DIR:OUT; SFP:1101; SCL:1; SRVR:AM5PR0501MB2034; H:mellanox.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtBTTVQUjA1MDFNQjIwMzQ7MjM6ZjVVS0I1VmIyUG5tQnR5VXN4VzhwSjBF?= =?utf-8?B?bnhKZTNPZEtydzg5YUxVbVZGU1N5em1lbllmRUZIQWtHVmNUVFZJcVQ5K3ho?= =?utf-8?B?cURWeTBYZ0VzYVVoelBlUENTM3BCajZjOCtSSDcwdURJMHBHMkQzQzdOYVRC?= =?utf-8?B?Zkg4SnB3aG5CbWJjWEk2bDYySUxvNWtHNk1wOTdLSHdKSDlPd0h3VW1lQks2?= =?utf-8?B?b25xcVhRYk9QTzdGMkhhUjF5aDZSUm1vR05TNnNFMVhLU01QYjRVM1YvWDVH?= =?utf-8?B?VGJwdVZWQjZGU0l6ZCt4T3NibjBDYTJCY3g2eExkWThVdDlIbCt4S2s2YXdt?= =?utf-8?B?OFdWRTdvWUJYKzl6U0RQclFXYktRS0ZHRGdUQjMwN2xyTjBieXpQSmpibVNw?= =?utf-8?B?a2NBS0xETHMzd3BSR1h3Y1oxNUFRMWNPKzhzZHBFL0FvY2FTTmE4SUYySFJo?= =?utf-8?B?TmFPMElUcnNML3hEU2NHYnEyVUFuZS9reXNHT3dFYXJVaFk2N0FhaUsvRDJp?= =?utf-8?B?L3ZiWFVaRlFreE44NHBKYVJOMWIvT2pudFpQUEVDdFhINXdSa0tBc3VLTGxK?= =?utf-8?B?cEl4dmVNczlVaG9yZUdXczY5YkxPYjdrVko2N0FoaE5wZnRCK1FyYnU2ajVa?= =?utf-8?B?VUgwd253WWlWVlg1NytJRVU2Ym16MDNQM2U3cWdMeDQ4M1ZIK2ZPK0I0RHl1?= =?utf-8?B?dDMzYnpMRkZNdTFTWEFiNjRpOXpSWWZDSXRNeUVyOVh6Tzd6NVY1WDNJcU5Y?= =?utf-8?B?RUcxUkdHMEU1RHk0RldIY1FpTHRwWklpL2MydWloQWt5SlZyRmxzUGdqcmlM?= =?utf-8?B?eFVLWUF0YU1keUdHL2pUTWorYXFCQUJCV290b2FsK1dQMTF3Vk84SS9zT3RE?= =?utf-8?B?YVpHU0hvK1VKeTRoNTc4YzV2d2xUcGhQQ2s0d1A1eW8wVEREZHg1aUZ3QWJX?= =?utf-8?B?anlWMGhDYlFiQU9mbVZWQ0JrNEJOV21WN0o5dXNSRStqcyttM3JQNHJXS3py?= =?utf-8?B?bWp2TDh5aDdPeE9aSFFFR1Q1UC9EU0xVa2taSmhtSDRwWVZZWjl3YzB0U1VE?= =?utf-8?B?eDFXU0liR0NNOFhlVmNSR3JRMk9mNWc1bXMvWktid25GZmNMVW55blFDVU16?= =?utf-8?B?Q2YzMFVTSGlvblBtOG5pSGZLbXFEQVpuTTZydWNhcVVud1ZtNXhiZ2hRVEhG?= =?utf-8?B?NlFPTlNqNFljSTNTcUhVYjNCOWtxbDhHa0pQaUdJNWthdWpsNnptbG02M3Jn?= =?utf-8?B?c2pnMHdRWDVSSTcyTlV3bm1ZU1g3bkFuNTYyUEViZm9sbkNnT1JiaXNCVGVu?= =?utf-8?B?MVgxaE9BZkxUOHN6UTVTOU4rYU9SN0FnZEZTVTdIM1VUUTN4T1NsSnhwTTlD?= =?utf-8?B?Y0dtWlhFNDUwbCtmRmpqWmJzOHpEK1dwUnFRYk5CeGxFbmRVbEk4cGlJNkpQ?= =?utf-8?B?dTJsRzl1Wmk3L1FWV0JreWI3dmNaQkpvZDQ0ZjVXM09JVGsweDBrcWM3UERo?= =?utf-8?B?RFNlVnVzOENKMXNESEtTUXBhRzJlYkRMeFBaUXZDS3NDdHk3c3VKR21qM0hY?= =?utf-8?B?WXZ3VTNTc05vT1pzMmpBMkQ1ZG1zb1BmaGNBeTQrRVRFdlAvd3N3cC8ydVMy?= =?utf-8?B?ZG5WVmtQdW0vQlF6R3JSOFNpQm5sVkZkMjNaZXhQWWh0QlVFdjd4NTdkdEJI?= =?utf-8?B?T3RycThCWmMwL1NkcGllNzl6eHVGQTExenpyYWo1MGFWWUNkOUEyWkxLR01j?= =?utf-8?Q?vsgnzZCSXGPKAAGqN0Jt7X2vWsYwzP+J0Mumei8=3D?= X-Microsoft-Antispam-Message-Info: Zsl0q4dTryA0oOf8FbKZBR6hYpkzy7viLjvnQJLNT/rGZL/PK4anqmgRkUIhXuNfkNyBFckxZhl77oP5XeteuvDUiGR6LvzQvjz4lAhtfLLSkh1pa+dhgSRd0xONdFES4Hgdu9Long069m64c4PHAZ9CkqR4fDY2DqtSjlFfh6LQLaTqUTn8xaCgq35NoVyW X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2034; 6:kHwfa9vGDWL/l+uvfG0q4wiYMBOc69++//HMdjDXVey3nD02EWV327ehysgxynSfYvFlhYbE5O5XIkwUp4FwmKVRqKReu/Wg+wcOBgpGH6LxsRJfEyX/aSfe6eK9dJNO4MouyDnboxTzQEhf3HQ1Tfk7QZDcsnRwxlVi2No9WlV87FoSjYazFjvT0ew+YAdlqqLK0D+bhXX+c5NJYTj2obW3CB8ug3RGvCCMl9E4fsO8bo2zlGXvaFent+UewcR92T2JyJWQntRu29qcECNUQ4W0tEc96fKSt/NNnMYNIh7tuj5SuiJYE2RU6eChrkHvohOZR6fMvnci4BdoKycOsMn5jIIFjQDz67F9FcaYRSeAbj/tAfO4WO2Ua6MZRaKYii9n8EJeSECCxRMlQjsnP/suVnQWaiXUg3UZXDJMsWtihvSiRgOD5slrmICkbEwQOiv+omUj8pIpuj9+xGmZyQ==; 5:2CakCMb4GOgKPHKCPoQOnX01D58MzXeuVfixat4HOc/PqTQVFxTMZ3pGdU43aSTAeB2O4WGFiKFHXipzIgwlR4BOTnnu3rvYv4WR9tuUJMK2duNDD1zmcZPt9enRyooAQIOkOnhW9wtrmTSvGl+7d3xqaxLEaF869tYmw4O3U4E=; 24:PqGpRXP9NisyvLKXOJaKWLPM6sgrUZPCsUUfcPBigN/wm3LopH2yZ7lzcGGjHfQKU3UEfhMUhDcbwFgnrOLf3IjSBtdiij0cKxqzg4QOOZ4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2034; 7:+5OBDDFASSnre9q98U7/w8GZWxWDfDZwNa8LZ8yuoOWPAMmZtD3ITMocl7nqxRHQG1BHHcRkllUohpfdWkI/yOa/Yx8LtegOtqqItxgTVuGGqtW3KQ2Nj53sbnaXUpIrFK4/nOvUA7UFAkEurvHevToq9fqdb2sVAAFz8shn9KhBsjJHiIY6ohhptrCdbYY265viPfnrp/0I+1TcgZWnxhCJHxcJszf0FtGKQQJa6Xf6n1oRxpLxviwUlrd7NKQY X-MS-Office365-Filtering-Correlation-Id: 685b0d19-7383-42a1-5ed3-08d5ca7c8fb0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jun 2018 00:37:46.6008 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 685b0d19-7383-42a1-5ed3-08d5ca7c8fb0 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0501MB2034 Subject: [dpdk-stable] [PATCH v2 24/67] net/mlx5: remove control path locks 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: Tue, 05 Jun 2018 00:37:49 -0000 From: NĂ©lio Laranjeiro [ backported from upstream commit 7b2423cd2e84c61d3052147cea7643d15d49d1e9 ] In priv struct only the memory region needs to be protected against concurrent access between the control plane and the data plane. Signed-off-by: Nelio Laranjeiro Acked-by: Adrien Mazarguil --- drivers/net/mlx5/mlx5.c | 2 -- drivers/net/mlx5/mlx5.h | 43 +----------------------------- drivers/net/mlx5/mlx5_ethdev.c | 58 +++-------------------------------------- drivers/net/mlx5/mlx5_flow.c | 18 +------------ drivers/net/mlx5/mlx5_mr.c | 4 +-- drivers/net/mlx5/mlx5_rss.c | 8 ------ drivers/net/mlx5/mlx5_rxq.c | 9 ------- drivers/net/mlx5/mlx5_stats.c | 15 +---------- drivers/net/mlx5/mlx5_trigger.c | 7 ----- drivers/net/mlx5/mlx5_txq.c | 5 ---- drivers/net/mlx5/mlx5_vlan.c | 6 ----- 11 files changed, 9 insertions(+), 166 deletions(-) diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index 9ee9d2c36..98e877040 100644 --- a/drivers/net/mlx5/mlx5.c +++ b/drivers/net/mlx5/mlx5.c @@ -207,7 +207,6 @@ mlx5_dev_close(struct rte_eth_dev *dev) unsigned int i; int ret; - priv_lock(priv); DEBUG("%p: closing device \"%s\"", (void *)dev, ((priv->ctx != NULL) ? priv->ctx->device->name : "")); @@ -269,7 +268,6 @@ mlx5_dev_close(struct rte_eth_dev *dev) ret = priv_mr_verify(priv); if (ret) WARN("%p: some Memory Region still remain", (void *)priv); - priv_unlock(priv); memset(priv, 0, sizeof(*priv)); } diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index dc165a8a3..6eacc3738 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -163,7 +163,7 @@ struct priv { LIST_HEAD(ind_tables, mlx5_ind_table_ibv) ind_tbls; uint32_t link_speed_capa; /* Link speed capabilities. */ struct mlx5_xstats_ctrl xstats_ctrl; /* Extended stats control. */ - rte_spinlock_t lock; /* Lock for control functions. */ + rte_spinlock_t mr_lock; /* MR Lock. */ int primary_socket; /* Unix socket for primary process. */ void *uar_base; /* Reserved address space for UAR mapping */ struct rte_intr_handle intr_handle_socket; /* Interrupt handler. */ @@ -171,47 +171,6 @@ struct priv { /* Context for Verbs allocator. */ }; -/** - * Lock private structure to protect it from concurrent access in the - * control path. - * - * @param priv - * Pointer to private structure. - */ -static inline void -priv_lock(struct priv *priv) -{ - rte_spinlock_lock(&priv->lock); -} - -/** - * 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 - * Pointer to private structure. - */ -static inline void -priv_unlock(struct priv *priv) -{ - rte_spinlock_unlock(&priv->lock); -} - /* mlx5.c */ int mlx5_getenv_int(const char *); diff --git a/drivers/net/mlx5/mlx5_ethdev.c b/drivers/net/mlx5/mlx5_ethdev.c index 79d62bbc1..650b6287c 100644 --- a/drivers/net/mlx5/mlx5_ethdev.c +++ b/drivers/net/mlx5/mlx5_ethdev.c @@ -296,18 +296,16 @@ priv_set_flags(struct priv *priv, unsigned int keep, unsigned int flags) } /** - * Ethernet device configuration. - * - * Prepare the driver for a given number of TX and RX queues. + * DPDK callback for Ethernet device configuration. * * @param dev * Pointer to Ethernet device structure. * * @return - * 0 on success, errno value on failure. + * 0 on success, negative errno value on failure. */ -static int -dev_configure(struct rte_eth_dev *dev) +int +mlx5_dev_configure(struct rte_eth_dev *dev) { struct priv *priv = dev->data->dev_private; unsigned int rxqs_n = dev->data->nb_rx_queues; @@ -371,28 +369,7 @@ dev_configure(struct rte_eth_dev *dev) j = 0; } return 0; -} - -/** - * DPDK callback for Ethernet device configuration. - * - * @param dev - * Pointer to Ethernet device structure. - * - * @return - * 0 on success, negative errno value on failure. - */ -int -mlx5_dev_configure(struct rte_eth_dev *dev) -{ - struct priv *priv = dev->data->dev_private; - int ret; - priv_lock(priv); - ret = dev_configure(dev); - assert(ret >= 0); - priv_unlock(priv); - return -ret; } /** @@ -411,7 +388,6 @@ mlx5_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info) char ifname[IF_NAMESIZE]; info->pci_dev = RTE_ETH_DEV_TO_PCI(dev); - priv_lock(priv); /* FIXME: we should ask the device for these values. */ info->min_rx_bufsize = 32; info->max_rx_pktlen = 65536; @@ -456,7 +432,6 @@ mlx5_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info) info->hash_key_size = priv->rss_conf.rss_key_len; info->speed_capa = priv->link_speed_capa; info->flow_type_rss_offloads = ~MLX5_RSS_HF_MASK; - priv_unlock(priv); } /** @@ -515,7 +490,6 @@ mlx5_link_update_unlocked_gset(struct rte_eth_dev *dev) struct rte_eth_link dev_link; int link_speed = 0; - /* priv_lock() is not taken to allow concurrent calls. */ if (priv_ifreq(priv, SIOCGIFFLAGS, &ifr)) { WARN("ioctl(SIOCGIFFLAGS) failed: %s", strerror(errno)); return -1; @@ -781,9 +755,7 @@ mlx5_link_update(struct rte_eth_dev *dev, int wait_to_complete __rte_unused) struct priv *priv = dev->data->dev_private; int ret; - priv_lock(priv); ret = priv_link_update(priv, wait_to_complete); - priv_unlock(priv); return ret; } @@ -805,7 +777,6 @@ mlx5_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu) uint16_t kern_mtu; int ret = 0; - priv_lock(priv); ret = priv_get_mtu(priv, &kern_mtu); if (ret) goto out; @@ -820,13 +791,11 @@ mlx5_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu) priv->mtu = mtu; DEBUG("adapter port %u MTU set to %u", priv->port, mtu); } - priv_unlock(priv); return 0; out: ret = errno; WARN("cannot set port %u MTU to %u: %s", priv->port, mtu, strerror(ret)); - priv_unlock(priv); assert(ret >= 0); return -ret; } @@ -853,7 +822,6 @@ mlx5_dev_get_flow_ctrl(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) int ret; ifr.ifr_data = (void *)ðpause; - priv_lock(priv); if (priv_ifreq(priv, SIOCETHTOOL, &ifr)) { ret = errno; WARN("ioctl(SIOCETHTOOL, ETHTOOL_GPAUSEPARAM)" @@ -872,7 +840,6 @@ mlx5_dev_get_flow_ctrl(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) fc_conf->mode = RTE_FC_NONE; ret = 0; out: - priv_unlock(priv); assert(ret >= 0); return -ret; } @@ -911,7 +878,6 @@ mlx5_dev_set_flow_ctrl(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) ethpause.tx_pause = 1; else ethpause.tx_pause = 0; - priv_lock(priv); if (priv_ifreq(priv, SIOCETHTOOL, &ifr)) { ret = errno; WARN("ioctl(SIOCETHTOOL, ETHTOOL_SPAUSEPARAM)" @@ -921,7 +887,6 @@ mlx5_dev_set_flow_ctrl(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) } ret = 0; out: - priv_unlock(priv); assert(ret >= 0); return -ret; } @@ -1064,15 +1029,8 @@ mlx5_dev_link_status_handler(void *arg) struct priv *priv = dev->data->dev_private; int ret; - 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); if (!ret) _rte_eth_dev_callback_process(dev, RTE_ETH_EVENT_INTR_LSC, NULL, NULL); @@ -1093,9 +1051,7 @@ mlx5_dev_interrupt_handler(void *cb_arg) struct priv *priv = dev->data->dev_private; uint32_t events; - priv_lock(priv); events = priv_dev_status_handler(priv); - priv_unlock(priv); if (events & (1 << RTE_ETH_EVENT_INTR_LSC)) _rte_eth_dev_callback_process(dev, RTE_ETH_EVENT_INTR_LSC, NULL, NULL); @@ -1116,9 +1072,7 @@ mlx5_dev_handler_socket(void *cb_arg) struct rte_eth_dev *dev = cb_arg; struct priv *priv = dev->data->dev_private; - priv_lock(priv); priv_socket_handle(priv); - priv_unlock(priv); } /** @@ -1218,9 +1172,7 @@ mlx5_set_link_down(struct rte_eth_dev *dev) struct priv *priv = dev->data->dev_private; int err; - priv_lock(priv); err = priv_dev_set_link(priv, 0); - priv_unlock(priv); return err; } @@ -1239,9 +1191,7 @@ mlx5_set_link_up(struct rte_eth_dev *dev) struct priv *priv = dev->data->dev_private; int err; - priv_lock(priv); err = priv_dev_set_link(priv, 1); - priv_unlock(priv); return err; } diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c index 9f48ccf3d..d51f0ece5 100644 --- a/drivers/net/mlx5/mlx5_flow.c +++ b/drivers/net/mlx5/mlx5_flow.c @@ -1937,9 +1937,7 @@ mlx5_flow_validate(struct rte_eth_dev *dev, int ret; struct mlx5_flow_parse parser = { .create = 0, }; - priv_lock(priv); ret = priv_flow_convert(priv, attr, items, actions, error, &parser); - priv_unlock(priv); return ret; } @@ -1959,10 +1957,8 @@ mlx5_flow_create(struct rte_eth_dev *dev, struct priv *priv = dev->data->dev_private; struct rte_flow *flow; - priv_lock(priv); flow = priv_flow_create(priv, &priv->flows, attr, items, actions, error); - priv_unlock(priv); return flow; } @@ -2444,9 +2440,7 @@ mlx5_flow_destroy(struct rte_eth_dev *dev, { struct priv *priv = dev->data->dev_private; - priv_lock(priv); priv_flow_destroy(priv, &priv->flows, flow); - priv_unlock(priv); return 0; } @@ -2462,9 +2456,7 @@ mlx5_flow_flush(struct rte_eth_dev *dev, { struct priv *priv = dev->data->dev_private; - priv_lock(priv); priv_flow_flush(priv, &priv->flows); - priv_unlock(priv); return 0; } @@ -2522,16 +2514,14 @@ priv_flow_query_count(struct ibv_counter_set *cs, * @see rte_flow_ops */ int -mlx5_flow_query(struct rte_eth_dev *dev, +mlx5_flow_query(struct rte_eth_dev *dev __rte_unused, struct rte_flow *flow, enum rte_flow_action_type action __rte_unused, void *data, struct rte_flow_error *error) { - struct priv *priv = dev->data->dev_private; int res = EINVAL; - priv_lock(priv); if (flow->cs) { res = priv_flow_query_count(flow->cs, &flow->counter_stats, @@ -2543,7 +2533,6 @@ mlx5_flow_query(struct rte_eth_dev *dev, NULL, "no counter found for flow"); } - priv_unlock(priv); return -res; } #endif @@ -2561,13 +2550,11 @@ mlx5_flow_isolate(struct rte_eth_dev *dev, { struct priv *priv = dev->data->dev_private; - priv_lock(priv); if (dev->data->dev_started) { rte_flow_error_set(error, EBUSY, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, "port must be stopped first"); - priv_unlock(priv); return -rte_errno; } priv->isolated = !!enable; @@ -2575,7 +2562,6 @@ mlx5_flow_isolate(struct rte_eth_dev *dev, priv->dev->dev_ops = &mlx5_dev_ops_isolate; else priv->dev->dev_ops = &mlx5_dev_ops; - priv_unlock(priv); return 0; } @@ -3057,9 +3043,7 @@ mlx5_dev_filter_ctrl(struct rte_eth_dev *dev, *(const void **)arg = &mlx5_flow_ops; return 0; case RTE_ETH_FILTER_FDIR: - priv_lock(priv); ret = priv_fdir_ctrl_func(priv, filter_op, arg); - priv_unlock(priv); break; default: ERROR("%p: filter type (%d) not supported", diff --git a/drivers/net/mlx5/mlx5_mr.c b/drivers/net/mlx5/mlx5_mr.c index 7da54758c..12d9b2f8e 100644 --- a/drivers/net/mlx5/mlx5_mr.c +++ b/drivers/net/mlx5/mlx5_mr.c @@ -193,9 +193,9 @@ mlx5_txq_mp2mr_reg(struct mlx5_txq_data *txq, struct rte_mempool *mp, container_of(txq, struct mlx5_txq_ctrl, txq); struct mlx5_mr *mr; - priv_lock(txq_ctrl->priv); + rte_spinlock_lock(&txq_ctrl->priv->mr_lock); mr = priv_txq_mp2mr_reg(txq_ctrl->priv, txq, mp, idx); - priv_unlock(txq_ctrl->priv); + rte_spinlock_unlock(&txq_ctrl->priv->mr_lock); return mr; } diff --git a/drivers/net/mlx5/mlx5_rss.c b/drivers/net/mlx5/mlx5_rss.c index 8f0882c89..45838f0b3 100644 --- a/drivers/net/mlx5/mlx5_rss.c +++ b/drivers/net/mlx5/mlx5_rss.c @@ -72,7 +72,6 @@ mlx5_rss_hash_update(struct rte_eth_dev *dev, struct priv *priv = dev->data->dev_private; int ret = 0; - priv_lock(priv); if (rss_conf->rss_hf & MLX5_RSS_HF_MASK) { ret = -EINVAL; goto out; @@ -90,7 +89,6 @@ mlx5_rss_hash_update(struct rte_eth_dev *dev, } priv->rss_conf.rss_hf = rss_conf->rss_hf; out: - priv_unlock(priv); return ret; } @@ -113,7 +111,6 @@ mlx5_rss_hash_conf_get(struct rte_eth_dev *dev, if (!rss_conf) return -EINVAL; - priv_lock(priv); if (rss_conf->rss_key && (rss_conf->rss_key_len >= priv->rss_conf.rss_key_len)) { memcpy(rss_conf->rss_key, priv->rss_conf.rss_key, @@ -121,7 +118,6 @@ mlx5_rss_hash_conf_get(struct rte_eth_dev *dev, } rss_conf->rss_key_len = priv->rss_conf.rss_key_len; rss_conf->rss_hf = priv->rss_conf.rss_hf; - priv_unlock(priv); return 0; } @@ -250,9 +246,7 @@ mlx5_dev_rss_reta_query(struct rte_eth_dev *dev, int ret; struct priv *priv = dev->data->dev_private; - priv_lock(priv); ret = priv_dev_rss_reta_query(priv, reta_conf, reta_size); - priv_unlock(priv); return -ret; } @@ -277,9 +271,7 @@ mlx5_dev_rss_reta_update(struct rte_eth_dev *dev, int ret; struct priv *priv = dev->data->dev_private; - priv_lock(priv); ret = priv_dev_rss_reta_update(priv, reta_conf, reta_size); - priv_unlock(priv); if (dev->data->dev_started) { mlx5_dev_stop(dev); mlx5_dev_start(dev); diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c index 26eb30a40..91f598c18 100644 --- a/drivers/net/mlx5/mlx5_rxq.c +++ b/drivers/net/mlx5/mlx5_rxq.c @@ -242,7 +242,6 @@ mlx5_rx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, container_of(rxq, struct mlx5_rxq_ctrl, rxq); int ret = 0; - priv_lock(priv); if (!rte_is_power_of_2(desc)) { desc = 1 << log2above(desc); WARN("%p: increased number of descriptors in RX queue %u" @@ -254,7 +253,6 @@ mlx5_rx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, if (idx >= priv->rxqs_n) { ERROR("%p: queue index out of range (%u >= %u)", (void *)dev, idx, priv->rxqs_n); - priv_unlock(priv); return -EOVERFLOW; } if (!mlx5_priv_rxq_releasable(priv, idx)) { @@ -275,7 +273,6 @@ mlx5_rx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, (void *)dev, (void *)rxq_ctrl); (*priv->rxqs)[idx] = &rxq_ctrl->rxq; out: - priv_unlock(priv); return -ret; } @@ -296,12 +293,10 @@ mlx5_rx_queue_release(void *dpdk_rxq) return; rxq_ctrl = container_of(rxq, struct mlx5_rxq_ctrl, rxq); priv = rxq_ctrl->priv; - priv_lock(priv); if (!mlx5_priv_rxq_releasable(priv, rxq_ctrl->rxq.stats.idx)) rte_panic("Rx queue %p is still used by a flow and cannot be" " removed\n", (void *)rxq_ctrl); mlx5_priv_rxq_release(priv, rxq_ctrl->rxq.stats.idx); - priv_unlock(priv); } /** @@ -459,7 +454,6 @@ mlx5_rx_intr_enable(struct rte_eth_dev *dev, uint16_t rx_queue_id) struct mlx5_rxq_ctrl *rxq_ctrl; int ret = 0; - priv_lock(priv); rxq_data = (*priv->rxqs)[rx_queue_id]; if (!rxq_data) { ret = EINVAL; @@ -478,7 +472,6 @@ mlx5_rx_intr_enable(struct rte_eth_dev *dev, uint16_t rx_queue_id) mlx5_priv_rxq_ibv_release(priv, rxq_ibv); } exit: - priv_unlock(priv); if (ret) WARN("unable to arm interrupt on rx queue %d", rx_queue_id); return -ret; @@ -506,7 +499,6 @@ mlx5_rx_intr_disable(struct rte_eth_dev *dev, uint16_t rx_queue_id) void *ev_ctx; int ret = 0; - priv_lock(priv); rxq_data = (*priv->rxqs)[rx_queue_id]; if (!rxq_data) { ret = EINVAL; @@ -530,7 +522,6 @@ mlx5_rx_intr_disable(struct rte_eth_dev *dev, uint16_t rx_queue_id) exit: if (rxq_ibv) mlx5_priv_rxq_ibv_release(priv, rxq_ibv); - priv_unlock(priv); if (ret) WARN("unable to disable interrupt on rx queue %d", rx_queue_id); diff --git a/drivers/net/mlx5/mlx5_stats.c b/drivers/net/mlx5/mlx5_stats.c index 50e3ea5f2..785563227 100644 --- a/drivers/net/mlx5/mlx5_stats.c +++ b/drivers/net/mlx5/mlx5_stats.c @@ -340,7 +340,6 @@ mlx5_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) unsigned int i; unsigned int idx; - priv_lock(priv); /* Add software counters. */ for (i = 0; (i != priv->rxqs_n); ++i) { struct mlx5_rxq_data *rxq = (*priv->rxqs)[i]; @@ -386,7 +385,6 @@ mlx5_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) /* FIXME: retrieve and add hardware counters. */ #endif *stats = tmp; - priv_unlock(priv); return 0; } @@ -403,7 +401,6 @@ mlx5_stats_reset(struct rte_eth_dev *dev) unsigned int i; unsigned int idx; - priv_lock(priv); for (i = 0; (i != priv->rxqs_n); ++i) { if ((*priv->rxqs)[i] == NULL) continue; @@ -421,7 +418,6 @@ mlx5_stats_reset(struct rte_eth_dev *dev) #ifndef MLX5_PMD_SOFT_COUNTERS /* FIXME: reset hardware counters. */ #endif - priv_unlock(priv); } /** @@ -448,16 +444,13 @@ mlx5_xstats_get(struct rte_eth_dev *dev, struct mlx5_xstats_ctrl *xstats_ctrl = &priv->xstats_ctrl; int stats_n; - priv_lock(priv); stats_n = priv_ethtool_get_stats_n(priv); if (stats_n < 0) { - priv_unlock(priv); return -1; } if (xstats_ctrl->stats_n != stats_n) priv_xstats_init(priv); ret = priv_xstats_get(priv, stats); - priv_unlock(priv); } return ret; } @@ -475,15 +468,12 @@ mlx5_xstats_reset(struct rte_eth_dev *dev) struct mlx5_xstats_ctrl *xstats_ctrl = &priv->xstats_ctrl; int stats_n; - priv_lock(priv); stats_n = priv_ethtool_get_stats_n(priv); if (stats_n < 0) - goto unlock; + return; if (xstats_ctrl->stats_n != stats_n) priv_xstats_init(priv); priv_xstats_reset(priv); -unlock: - priv_unlock(priv); } /** @@ -503,18 +493,15 @@ int mlx5_xstats_get_names(struct rte_eth_dev *dev __rte_unused, struct rte_eth_xstat_name *xstats_names, unsigned int n) { - struct priv *priv = dev->data->dev_private; unsigned int i; if (n >= xstats_n && xstats_names) { - priv_lock(priv); for (i = 0; i != xstats_n; ++i) { strncpy(xstats_names[i].name, mlx5_counters_init[i].dpdk_name, RTE_ETH_XSTATS_NAME_SIZE); xstats_names[i].name[RTE_ETH_XSTATS_NAME_SIZE - 1] = 0; } - priv_unlock(priv); } return xstats_n; } diff --git a/drivers/net/mlx5/mlx5_trigger.c b/drivers/net/mlx5/mlx5_trigger.c index ad15158fe..2ae532d92 100644 --- a/drivers/net/mlx5/mlx5_trigger.c +++ b/drivers/net/mlx5/mlx5_trigger.c @@ -169,7 +169,6 @@ mlx5_dev_start(struct rte_eth_dev *dev) int err; dev->data->dev_started = 1; - priv_lock(priv); err = priv_flow_create_drop_queue(priv); if (err) { ERROR("%p: Drop queue allocation failed: %s", @@ -207,7 +206,6 @@ mlx5_dev_start(struct rte_eth_dev *dev) goto error; } priv_dev_interrupt_handler_install(priv, dev); - priv_unlock(priv); return 0; error: /* Rollback. */ @@ -219,7 +217,6 @@ mlx5_dev_start(struct rte_eth_dev *dev) priv_txq_stop(priv); priv_rxq_stop(priv); priv_flow_delete_drop_queue(priv); - priv_unlock(priv); return err; } @@ -237,7 +234,6 @@ mlx5_dev_stop(struct rte_eth_dev *dev) struct priv *priv = dev->data->dev_private; struct mlx5_mr *mr; - priv_lock(priv); dev->data->dev_started = 0; /* Prevent crashes when queues are still in use. */ dev->rx_pkt_burst = removed_rx_burst; @@ -254,7 +250,6 @@ mlx5_dev_stop(struct rte_eth_dev *dev) for (mr = LIST_FIRST(&priv->mr); mr; mr = LIST_FIRST(&priv->mr)) priv_mr_release(priv, mr); priv_flow_delete_drop_queue(priv); - priv_unlock(priv); } /** @@ -439,8 +434,6 @@ mlx5_traffic_restart(struct rte_eth_dev *dev) { struct priv *priv = dev->data->dev_private; - priv_lock(priv); priv_dev_traffic_restart(priv, dev); - priv_unlock(priv); return 0; } diff --git a/drivers/net/mlx5/mlx5_txq.c b/drivers/net/mlx5/mlx5_txq.c index 09d62a95b..f3b3daecb 100644 --- a/drivers/net/mlx5/mlx5_txq.c +++ b/drivers/net/mlx5/mlx5_txq.c @@ -142,7 +142,6 @@ mlx5_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, container_of(txq, struct mlx5_txq_ctrl, txq); int ret = 0; - priv_lock(priv); if (desc <= MLX5_TX_COMP_THRESH) { WARN("%p: number of descriptors requested for TX queue %u" " must be higher than MLX5_TX_COMP_THRESH, using" @@ -161,7 +160,6 @@ mlx5_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, if (idx >= priv->txqs_n) { ERROR("%p: queue index out of range (%u >= %u)", (void *)dev, idx, priv->txqs_n); - priv_unlock(priv); return -EOVERFLOW; } if (!mlx5_priv_txq_releasable(priv, idx)) { @@ -182,7 +180,6 @@ mlx5_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, (void *)dev, (void *)txq_ctrl); (*priv->txqs)[idx] = &txq_ctrl->txq; out: - priv_unlock(priv); return -ret; } @@ -204,7 +201,6 @@ mlx5_tx_queue_release(void *dpdk_txq) return; txq_ctrl = container_of(txq, struct mlx5_txq_ctrl, txq); priv = txq_ctrl->priv; - priv_lock(priv); for (i = 0; (i != priv->txqs_n); ++i) if ((*priv->txqs)[i] == txq) { DEBUG("%p: removing TX queue %p from list", @@ -212,7 +208,6 @@ mlx5_tx_queue_release(void *dpdk_txq) mlx5_priv_txq_release(priv, i); break; } - priv_unlock(priv); } diff --git a/drivers/net/mlx5/mlx5_vlan.c b/drivers/net/mlx5/mlx5_vlan.c index aa8b319d7..653c5fef4 100644 --- a/drivers/net/mlx5/mlx5_vlan.c +++ b/drivers/net/mlx5/mlx5_vlan.c @@ -63,7 +63,6 @@ mlx5_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on) unsigned int i; int ret = 0; - priv_lock(priv); DEBUG("%p: %s VLAN filter ID %" PRIu16, (void *)dev, (on ? "enable" : "disable"), vlan_id); assert(priv->vlan_filter_n <= RTE_DIM(priv->vlan_filter)); @@ -99,7 +98,6 @@ mlx5_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on) if (dev->data->dev_started) priv_dev_traffic_restart(priv, dev); out: - priv_unlock(priv); return ret; } @@ -172,9 +170,7 @@ mlx5_vlan_strip_queue_set(struct rte_eth_dev *dev, uint16_t queue, int on) ERROR("VLAN stripping, invalid queue number %d", queue); return; } - priv_lock(priv); priv_vlan_strip_queue_set(priv, queue, on); - priv_unlock(priv); } /** @@ -199,10 +195,8 @@ mlx5_vlan_offload_set(struct rte_eth_dev *dev, int mask) return 0; } /* Run on every RX queue and set/reset VLAN stripping. */ - priv_lock(priv); for (i = 0; (i != priv->rxqs_n); i++) priv_vlan_strip_queue_set(priv, i, hw_vlan_strip); - priv_unlock(priv); } return 0; } -- 2.11.0