From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id AA901A0545 for ; Thu, 15 Dec 2022 11:57:55 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A531E40685; Thu, 15 Dec 2022 11:57:55 +0100 (CET) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mails.dpdk.org (Postfix) with ESMTP id 3DF7140A8A for ; Thu, 15 Dec 2022 11:57:54 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1671101873; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=STr4DCknQWlo63hSb5PdvmFwHMMHaeQ8aGZKzX34/SA=; b=g6Sb1keKBN815J+8R5teaMAVhLH/78FtskqFabAurNv7LlfirepsyQ6UPc7RWVGFcOMTDZ gH7TtNYPgKa/ThkcoqMrnsFb3yXHrpuEVMbh+UBild9/xbu1RXs9s0E5DRDC80zYmSU8CJ Lnaa2bFKPiIWYJCEOnihaKe4dQTXntc= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-16-hMIGkmn-NwO9g9vtMqvJJQ-1; Thu, 15 Dec 2022 05:57:50 -0500 X-MC-Unique: hMIGkmn-NwO9g9vtMqvJJQ-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5C33F3833290; Thu, 15 Dec 2022 10:57:50 +0000 (UTC) Received: from rh.redhat.com (unknown [10.39.195.49]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5D54C1121314; Thu, 15 Dec 2022 10:57:48 +0000 (UTC) From: Kevin Traynor To: stable@dpdk.org Cc: bluca@debian.org, david.marchand@redhat.com, john.mcnamara@intel.com, qi.z.zhang@intel.com, jie1x.wang@intel.com, Kevin Traynor , Jingjing Wu , Beilei Xing Subject: [PATCH 21.11] Revert "net/iavf: add thread for event callbacks" Date: Thu, 15 Dec 2022 10:57:29 +0000 Message-Id: <20221215105729.480368-1-ktraynor@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.3 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org This reverts commit fcf8e69afb79eede8d14f8f5e16c6212d5c2dbfe. Reverting this commit as it has just been backported for 21.11.3 but an issue has been identified. A fix is in progress but it is not ready in time for 21.11.3. It is better to revert the patch and keep the behaviour in 21.11.3 the same as 21.11/21.11.1/21.11.2 and do a correct chain of fixes in a later release when they are available. Link to discussion upstream patch being discussed [1] and for reference commit id of patch being reverted in DPDK main branch [2]. [1] https://mails.dpdk.org/archives/dev/2022-November/256458.html [2] commit cb5c1b91f76f ("net/iavf: add thread for event callbacks") Signed-off-by: Kevin Traynor --- drivers/net/iavf/iavf.h | 2 - drivers/net/iavf/iavf_ethdev.c | 5 -- drivers/net/iavf/iavf_vchnl.c | 153 ++------------------------------- 3 files changed, 6 insertions(+), 154 deletions(-) diff --git a/drivers/net/iavf/iavf.h b/drivers/net/iavf/iavf.h index afffc1a13e..29692e3994 100644 --- a/drivers/net/iavf/iavf.h +++ b/drivers/net/iavf/iavf.h @@ -401,6 +401,4 @@ _atomic_set_async_response_cmd(struct iavf_info *vf, enum virtchnl_ops ops) int iavf_check_api_version(struct iavf_adapter *adapter); int iavf_get_vf_resource(struct iavf_adapter *adapter); -void iavf_dev_event_handler_fini(void); -int iavf_dev_event_handler_init(void); void iavf_handle_virtchnl_msg(struct rte_eth_dev *dev); int iavf_enable_vlan_strip(struct iavf_adapter *adapter); diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c index 54a05b3658..630779fb21 100644 --- a/drivers/net/iavf/iavf_ethdev.c +++ b/drivers/net/iavf/iavf_ethdev.c @@ -2563,7 +2563,4 @@ iavf_dev_init(struct rte_eth_dev *eth_dev) ð_dev->data->mac_addrs[0]); - if (iavf_dev_event_handler_init()) - goto init_vf_err; - if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_WB_ON_ITR) { /* register callback func to eal lib */ @@ -2720,6 +2717,4 @@ iavf_dev_uninit(struct rte_eth_dev *dev) iavf_dev_close(dev); - iavf_dev_event_handler_fini(); - return 0; } diff --git a/drivers/net/iavf/iavf_vchnl.c b/drivers/net/iavf/iavf_vchnl.c index d408e19adc..1bd3559ec2 100644 --- a/drivers/net/iavf/iavf_vchnl.c +++ b/drivers/net/iavf/iavf_vchnl.c @@ -3,5 +3,4 @@ */ -#include #include #include @@ -13,5 +12,4 @@ #include #include -#include #include @@ -30,144 +28,4 @@ #define ASQ_DELAY_MS 1 -#define MAX_EVENT_PENDING 16 - -struct iavf_event_element { - TAILQ_ENTRY(iavf_event_element) next; - struct rte_eth_dev *dev; - enum rte_eth_event_type event; - void *param; - size_t param_alloc_size; - uint8_t param_alloc_data[0]; -}; - -struct iavf_event_handler { - uint32_t ndev; - pthread_t tid; - int fd[2]; - pthread_mutex_t lock; - TAILQ_HEAD(event_lsit, iavf_event_element) pending; -}; - -static struct iavf_event_handler event_handler = { - .fd = {-1, -1}, -}; - -#ifndef TAILQ_FOREACH_SAFE -#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ - for ((var) = TAILQ_FIRST((head)); \ - (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ - (var) = (tvar)) -#endif - -static void * -iavf_dev_event_handle(void *param __rte_unused) -{ - struct iavf_event_handler *handler = &event_handler; - TAILQ_HEAD(event_list, iavf_event_element) pending; - - while (true) { - char unused[MAX_EVENT_PENDING]; - ssize_t nr = read(handler->fd[0], &unused, sizeof(unused)); - if (nr <= 0) - break; - - TAILQ_INIT(&pending); - pthread_mutex_lock(&handler->lock); - TAILQ_CONCAT(&pending, &handler->pending, next); - pthread_mutex_unlock(&handler->lock); - - struct iavf_event_element *pos, *save_next; - TAILQ_FOREACH_SAFE(pos, &pending, next, save_next) { - TAILQ_REMOVE(&pending, pos, next); - rte_eth_dev_callback_process(pos->dev, pos->event, pos->param); - rte_free(pos); - } - } - - return NULL; -} - -static void -iavf_dev_event_post(struct rte_eth_dev *dev, - enum rte_eth_event_type event, - void *param, size_t param_alloc_size) -{ - struct iavf_event_handler *handler = &event_handler; - char notify_byte; - struct iavf_event_element *elem = rte_malloc(NULL, sizeof(*elem) + param_alloc_size, 0); - if (!elem) - return; - - elem->dev = dev; - elem->event = event; - elem->param = param; - elem->param_alloc_size = param_alloc_size; - if (param && param_alloc_size) { - rte_memcpy(elem->param_alloc_data, param, param_alloc_size); - elem->param = elem->param_alloc_data; - } - - pthread_mutex_lock(&handler->lock); - TAILQ_INSERT_TAIL(&handler->pending, elem, next); - pthread_mutex_unlock(&handler->lock); - - ssize_t nw = write(handler->fd[1], ¬ify_byte, 1); - RTE_SET_USED(nw); -} - -int -iavf_dev_event_handler_init(void) -{ - struct iavf_event_handler *handler = &event_handler; - - if (__atomic_add_fetch(&handler->ndev, 1, __ATOMIC_RELAXED) != 1) - return 0; -#if defined(RTE_EXEC_ENV_WINDOWS) && RTE_EXEC_ENV_WINDOWS != 0 - int err = _pipe(handler->fd, MAX_EVENT_PENDING, O_BINARY); -#else - int err = pipe(handler->fd); -#endif - if (err != 0) { - __atomic_sub_fetch(&handler->ndev, 1, __ATOMIC_RELAXED); - return -1; - } - - TAILQ_INIT(&handler->pending); - pthread_mutex_init(&handler->lock, NULL); - - if (rte_ctrl_thread_create(&handler->tid, "iavf-event-thread", - NULL, iavf_dev_event_handle, NULL)) { - __atomic_sub_fetch(&handler->ndev, 1, __ATOMIC_RELAXED); - return -1; - } - - return 0; -} - -void -iavf_dev_event_handler_fini(void) -{ - struct iavf_event_handler *handler = &event_handler; - - if (__atomic_sub_fetch(&handler->ndev, 1, __ATOMIC_RELAXED) != 0) - return; - - int unused = pthread_cancel(handler->tid); - RTE_SET_USED(unused); - close(handler->fd[0]); - close(handler->fd[1]); - handler->fd[0] = -1; - handler->fd[1] = -1; - - pthread_join(handler->tid, NULL); - pthread_mutex_destroy(&handler->lock); - - struct iavf_event_element *pos, *save_next; - TAILQ_FOREACH_SAFE(pos, &handler->pending, next, save_next) { - TAILQ_REMOVE(&handler->pending, pos, next); - rte_free(pos); - } -} - static uint32_t iavf_convert_link_speed(enum virtchnl_link_speed virt_link_speed) @@ -421,6 +279,6 @@ iavf_handle_pf_event_msg(struct rte_eth_dev *dev, uint8_t *msg, PMD_DRV_LOG(DEBUG, "VIRTCHNL_EVENT_RESET_IMPENDING event"); vf->vf_reset = true; - iavf_dev_event_post(dev, RTE_ETH_EVENT_INTR_RESET, - NULL, 0); + rte_eth_dev_callback_process(dev, RTE_ETH_EVENT_INTR_RESET, + NULL); break; case VIRTCHNL_EVENT_LINK_CHANGE: @@ -436,5 +294,5 @@ iavf_handle_pf_event_msg(struct rte_eth_dev *dev, uint8_t *msg, } iavf_dev_link_update(dev, 0); - iavf_dev_event_post(dev, RTE_ETH_EVENT_INTR_LSC, NULL, 0); + rte_eth_dev_callback_process(dev, RTE_ETH_EVENT_INTR_LSC, NULL); break; case VIRTCHNL_EVENT_PF_DRIVER_CLOSE: @@ -502,6 +360,7 @@ iavf_handle_virtchnl_msg(struct rte_eth_dev *dev) RTE_ETH_EVENT_IPSEC_UNKNOWN; desc.metadata = ev->ipsec_event_data; - iavf_dev_event_post(dev, RTE_ETH_EVENT_IPSEC, - &desc, sizeof(desc)); + rte_eth_dev_callback_process(dev, + RTE_ETH_EVENT_IPSEC, + &desc); return; } -- 2.38.1