From patchwork Mon Mar 4 12:29:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Brandes, Shai" X-Patchwork-Id: 137912 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7586143B9B; Mon, 4 Mar 2024 13:34:40 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DC9EB42E78; Mon, 4 Mar 2024 13:31:06 +0100 (CET) Received: from smtp-fw-6002.amazon.com (smtp-fw-6002.amazon.com [52.95.49.90]) by mails.dpdk.org (Postfix) with ESMTP id 545A542E5E for ; Mon, 4 Mar 2024 13:31:04 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1709555464; x=1741091464; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=imMddOi02cP+x7fzEIddIAfYIdp2Tq1G/Eb+KN8IAM0=; b=hEnHmuM2DVX6o+kV3zPTUVZQf1HspzGqOdQHxb6YDdOjehp08T+7W+BJ QUwpAt4WSbGSdMGg5g0LB/ZXNzKWMrtFvOmLAAfa4bgkIQXcIKkNuF0ww hxmPo6wEZMq0gVe0RvdlqKHUbLVv+F5sCFDrvT6r+3JDAcFOI/sBSaf0K c=; X-IronPort-AV: E=Sophos;i="6.06,203,1705363200"; d="scan'208";a="390752687" Received: from iad12-co-svc-p1-lb1-vlan3.amazon.com (HELO smtpout.prod.us-west-2.prod.farcaster.email.amazon.dev) ([10.43.8.6]) by smtp-border-fw-6002.iad6.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Mar 2024 12:31:04 +0000 Received: from EX19MTAEUB001.ant.amazon.com [10.0.17.79:60628] by smtpin.naws.eu-west-1.prod.farcaster.email.amazon.dev [10.0.42.5:2525] with esmtp (Farcaster) id 8c43ac00-8e78-4568-a6f4-2107cd489611; Mon, 4 Mar 2024 12:31:02 +0000 (UTC) X-Farcaster-Flow-ID: 8c43ac00-8e78-4568-a6f4-2107cd489611 Received: from EX19D007EUB003.ant.amazon.com (10.252.51.43) by EX19MTAEUB001.ant.amazon.com (10.252.51.26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.28; Mon, 4 Mar 2024 12:30:54 +0000 Received: from EX19MTAUWA001.ant.amazon.com (10.250.64.204) by EX19D007EUB003.ant.amazon.com (10.252.51.43) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.28; Mon, 4 Mar 2024 12:30:53 +0000 Received: from HFA15-CG15235BS.amazon.com (10.1.212.49) by mail-relay.amazon.com (10.250.64.204) with Microsoft SMTP Server id 15.2.1258.28 via Frontend Transport; Mon, 4 Mar 2024 12:30:52 +0000 From: To: CC: , Shai Brandes Subject: [PATCH v2 30/33] net/ena: exhaust interrupt callbacks in device close Date: Mon, 4 Mar 2024 14:29:39 +0200 Message-ID: <20240304122942.3496-31-shaibran@amazon.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20240304122942.3496-1-shaibran@amazon.com> References: <20240304122942.3496-1-shaibran@amazon.com> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Shai Brandes Change rte_intr_callback_unregister to its synchronous variant to ensure all active interrupt callbacks are completed before proceeding with the flow. Relocate the interrupt deregistration to precede the release of stats memory, thereby preventing the interrupt handler from accessing memory that has already been freed. Signed-off-by: Shai Brandes Reviewed-by: Amit Bernstein --- drivers/net/ena/ena_ethdev.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index 2a7b7c0cba..d73e321d0f 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -871,6 +871,7 @@ static int ena_close(struct rte_eth_dev *dev) struct rte_intr_handle *intr_handle = pci_dev->intr_handle; struct ena_adapter *adapter = dev->data->dev_private; int ret = 0; + int rc; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; @@ -879,17 +880,17 @@ static int ena_close(struct rte_eth_dev *dev) ret = ena_stop(dev); adapter->state = ENA_ADAPTER_STATE_CLOSED; + rte_intr_disable(intr_handle); + rc = rte_intr_callback_unregister_sync(intr_handle, ena_interrupt_handler_rte, dev); + if (unlikely(rc != 0)) + PMD_INIT_LOG(ERR, "Failed to unregister interrupt handler\n"); + ena_rx_queue_release_all(dev); ena_tx_queue_release_all(dev); rte_free(adapter->drv_stats); adapter->drv_stats = NULL; - rte_intr_disable(intr_handle); - rte_intr_callback_unregister(intr_handle, - ena_interrupt_handler_rte, - dev); - /* * MAC is not allocated dynamically. Setting NULL should prevent from * release of the resource in the rte_eth_dev_release_port().