From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0B9C1A0526; Tue, 21 Jul 2020 16:41:29 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 561E71C00F; Tue, 21 Jul 2020 16:41:19 +0200 (CEST) Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70048.outbound.protection.outlook.com [40.107.7.48]) by dpdk.org (Postfix) with ESMTP id 2D8561BFE4 for ; Tue, 21 Jul 2020 16:41:16 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bDEMoraki/ae3ySXbFke4wtwFTImRt+paNYANt4EIP/M99F5cnP3z71BtMl9wo1kraIAXjKi2hOqOzM/q+xG6hdDSxY3n/wXd33DSfgXI6Nl8AgCx5RgVSUMolcUagJZCfHnK0EN+NVPKvxc4tjvNz60BKt+5ggFpm07d3l0u72UWajXWMozxqUJ5eugEJ57I+Eck/e+cb3Uw2pokW03tYX1nG6oOmXPyPEOPokQQvomzKOWFTQq6gZtN45OxBAW9OJqdE8qLdHx5JnvMfJOrf2dDSNBlu/n5BQPboqY29MtKwN04QyFiTQnPb1zvonVwvNWfCLYVg61GTq+CUjxWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hRM9oJXVt8VbBBc5hj5GzHXRKoSwnQl9Hhi5CpfuUZg=; b=eE6wZUnHTyFBnmdrk77lm6C+j1Nf7bGAaxRglAowI74HEDpTf0iGO4ZF4AX48wFDi5HuZpVfpelMBk6nCguf7e73wTCraPzblCyjIJQVOjTJW3AW0ZCbfuoUkLhwzw9BGJcR42aOkMEVJ3ktxWLhNvD19HfDwbxrmgbWpAfjZdiGmxBumwVPDjl0CryO0Kn01WtwAJGdxpq1uukfRCdWiwwrpo9Ib0Dkj/Pl9MGP38wuz2uaW2GBex0NJRcB4npSIb8PO/OBHiWWuDiDHhcvJoP8ZZBdWQdn8ypQnDo394A51KytHRvjCEz7z49Xrvhma8M7blfuYrk46TISdtTf5g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none 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=hRM9oJXVt8VbBBc5hj5GzHXRKoSwnQl9Hhi5CpfuUZg=; b=TeV+zwl4ykw4HxGFJcD5VwHaOVjn5MXlSIYfUCzK4pyEqyIQFbW/ouguWKvYWNcgMZDdrFRio9XgktQCeeWgjA+fbeh/lqj6egcHTqRwdCCg3sbvIXNfY1QE5J/ZtdAMAX6wkiE6+Pp9eF0gLviH3Ylkr4fYlTmQzYB+Y0jhWQo= Authentication-Results: dpdk.org; dkim=none (message not signed) header.d=none;dpdk.org; dmarc=none action=none header.from=mellanox.com; Received: from AM6PR05MB4216.eurprd05.prod.outlook.com (2603:10a6:209:41::13) by AM6PR05MB6055.eurprd05.prod.outlook.com (2603:10a6:20b:af::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3195.23; Tue, 21 Jul 2020 14:41:14 +0000 Received: from AM6PR05MB4216.eurprd05.prod.outlook.com ([fe80::b40f:4c0e:77de:a785]) by AM6PR05MB4216.eurprd05.prod.outlook.com ([fe80::b40f:4c0e:77de:a785%4]) with mapi id 15.20.3195.026; Tue, 21 Jul 2020 14:41:14 +0000 From: Ophir Munk To: dev@dpdk.org Cc: Raslan Darawsheh , Ophir Munk , Matan Azrad Date: Tue, 21 Jul 2020 14:41:07 +0000 Message-Id: <20200721144107.25550-2-ophirmu@mellanox.com> X-Mailer: git-send-email 2.8.4 In-Reply-To: <20200721144107.25550-1-ophirmu@mellanox.com> References: <20200721142449.24767-2-ophirmu@mellanox.com> <20200721144107.25550-1-ophirmu@mellanox.com> Content-Type: text/plain X-ClientProxiedBy: AM4PR07CA0012.eurprd07.prod.outlook.com (2603:10a6:205:1::25) To AM6PR05MB4216.eurprd05.prod.outlook.com (2603:10a6:209:41::13) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from mellanox.com (37.142.13.130) by AM4PR07CA0012.eurprd07.prod.outlook.com (2603:10a6:205:1::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3216.14 via Frontend Transport; Tue, 21 Jul 2020 14:41:13 +0000 X-Mailer: git-send-email 2.8.4 X-Originating-IP: [37.142.13.130] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: f082c43a-b61b-4c2e-3ee2-08d82d841e66 X-MS-TrafficTypeDiagnostic: AM6PR05MB6055: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtFwd X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:923; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 8mJ307MJduts7GQrkDJ5VwyW0+JU6iHKXh+pnd+JiEja1bv4JAscxHYtyAJiHCEz9/9MX8CIaXwWtqEiBmkN9Dt3hBKU0QdzdYvYTqLe11ioVSUxzxWV2HhcUU0BbBdXsAOxJXD9M1H04KkbIl/Qhedt83kMZTanw4jbYWAIo3cHBBJR8/bWqLQtmpQ9Ihgxl1xYE5rp+Xf+/ztqpCzc/aceL4UL78INZj2S2ZS1ViU5WPXPwDAndzVTTknCwpK1pNeibgQXV5D5LAxS7psZOdRS7p/5f52wKRJsT/xaK5HBifiBN9Ny7Yw3EiKgOkui1m6B6hm8Pvmd2vvnwrZPYg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM6PR05MB4216.eurprd05.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(366004)(107886003)(8936002)(498600001)(956004)(8676002)(2616005)(4326008)(7696005)(52116002)(2906002)(186003)(54906003)(26005)(16526019)(6916009)(86362001)(1076003)(36756003)(5660300002)(83380400001)(6666004)(66946007)(66476007)(66556008)(55016002)(8886007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: xIe5wQiFcP93mpmz7nDt9PhUTrxZMMO1lLjASsmeg8s7OQdyHbVQ8tHdYHWXJLRssaViSScsm2vWAFusd2TVFP1zuKAAYyjc1+K6PB+AtZaAcpIjyW2HFOQfkw4TweTXhmT+lQ9Lq7UysLjRd3p2rPJZHzIuernWccvlWouM0U9meHsVAQOijx4GzQ2IaMBW/Osq8E/1mzvQdYZbBN2Lt0GcBbGdP1EjL0DXBx6JRgdINRi6m7sSR05K9sAiBnw+McwHcG+slbhmlGNFWdGq3GN/KYurOA410X9lY/g95cyKMaYnsgDl+L68fypagZ7HcXYTp+M1pD+YQIZl8hEtZ0CmVddShWNbZIZO7E024FiMRdVZ1qeMaGD/gGE4uv6d74OoIXnOx+KJ0h/+kCRe/okuMOawsVZjdtcqt7mkFex6KxWjxjHpj+KLCJa/JD3NXjG0AOUcg4fnMLdtkCklMNVNu0n4ljMGtsgQtaXVd3015hxwxCUeVH1lBION+Qus X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: f082c43a-b61b-4c2e-3ee2-08d82d841e66 X-MS-Exchange-CrossTenant-AuthSource: AM6PR05MB4216.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2020 14:41:14.3494 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 5xjcvbb07uLXn2sjrogB5s8ekegEPD8mQQrzE13WwUOGmh8aPsM5WQ4h3h2pX6rOJXpnkzEtO6uyH5QbFa6h5w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR05MB6055 Subject: [dpdk-dev] [PATCH v3] net/mlx5: return EAGAIN on premature disable interrupt calls 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" RXQ interrupts under Linux are based on the epoll mechanism. An expected order of operations is as follows: 1. Call rte_eth_dev_rx_intr_enable(), to arm the CQ for receiving events on data input. 2. Block on rte_epoll_wait() with an array of file descriptors representing the CQ events. Upon data arrival the kernel will signal an input event on the corresponding CQ fd. 3. Call rte_eth_dev_rx_intr_disable() after the event was received and continue in polling mode. The mlx5 implementation of rte_eth_dev_rx_intr_disable() is to get the CQ event and ack it. In practice applications may wake up from rte_epoll_wait() due to timeout with no event to ack but still call rte_eth_dev_rx_intr_disable() unconditionally. In such cases the call should return EAGAIN (since the file descriptors are non-blocked), as opposed to EINVAL which indicates a real failure. In case of EAGAIN the PMD should not warn on "Unable to disable interrupt on Rx queue". This commit fixes a earlier commit where the returned value 0 from function devx_get_event() - was considered an error. Fixes: 19e429e5c7c2 ("net/mlx5: implement CQ for RxQ using DevX API") Signed-off-by: Ophir Munk Acked-by: Viacheslav Ovsiienko Acked-by: Raslan Darawsheh --- drivers/net/mlx5/mlx5_rxq.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c index e6dc5ac..c78e522 100644 --- a/drivers/net/mlx5/mlx5_rxq.c +++ b/drivers/net/mlx5/mlx5_rxq.c @@ -1188,10 +1188,8 @@ mlx5_rx_intr_disable(struct rte_eth_dev *dev, uint16_t rx_queue_id) if (rxq_obj->type == MLX5_RXQ_OBJ_TYPE_IBV) { ret = mlx5_glue->get_cq_event(rxq_obj->ibv_channel, &ev_cq, &ev_ctx); - if (ret || ev_cq != rxq_obj->ibv_cq) { - rte_errno = EINVAL; + if (ret < 0 || ev_cq != rxq_obj->ibv_cq) goto exit; - } mlx5_glue->ack_cq_events(rxq_obj->ibv_cq, 1); } else if (rxq_obj->type == MLX5_RXQ_OBJ_TYPE_DEVX_RQ) { #ifdef HAVE_IBV_DEVX_EVENT @@ -1200,22 +1198,29 @@ mlx5_rx_intr_disable(struct rte_eth_dev *dev, uint16_t rx_queue_id) ret = mlx5_glue->devx_get_event (rxq_obj->devx_channel, event_data, sizeof(struct mlx5dv_devx_async_event_hdr)); - if (ret <= 0 || event_data->cookie != - (uint64_t)(uintptr_t)rxq_obj->devx_cq) { - rte_errno = EINVAL; + if (ret < 0 || event_data->cookie != + (uint64_t)(uintptr_t)rxq_obj->devx_cq) goto exit; - } #endif /* HAVE_IBV_DEVX_EVENT */ } rxq_data->cq_arm_sn++; mlx5_rxq_obj_release(rxq_obj); return 0; exit: + /** + * For ret < 0 save the errno (may be EAGAIN which means the get_event + * function was called before receiving one). + */ + if (ret < 0) + rte_errno = errno; + else + rte_errno = EINVAL; ret = rte_errno; /* Save rte_errno before cleanup. */ if (rxq_obj) mlx5_rxq_obj_release(rxq_obj); - DRV_LOG(WARNING, "port %u unable to disable interrupt on Rx queue %d", - dev->data->port_id, rx_queue_id); + if (ret != EAGAIN) + DRV_LOG(WARNING, "port %u unable to disable interrupt on Rx queue %d", + dev->data->port_id, rx_queue_id); rte_errno = ret; /* Restore rte_errno. */ return -rte_errno; } -- 2.8.4