From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr0-f169.google.com (mail-wr0-f169.google.com [209.85.128.169]) by dpdk.org (Postfix) with ESMTP id C7A815587 for ; Tue, 5 Sep 2017 14:56:59 +0200 (CEST) Received: by mail-wr0-f169.google.com with SMTP id p14so6672026wrg.3 for ; Tue, 05 Sep 2017 05:56:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=xcxEAxymIbdGdTVyNOzbEWvd7e09flPrFQCqRi6Hevk=; b=jUygHUm24DkSxRr7UfxxRlkKgRQi6d9bXjoIVc7qsXeSKGSRvLMfLnPKC7+IFdniiF k0UfHVuC5m9wOg44yXmBdPQZI9tg/erzlKAtSRzxiQB1i0codkLYWAYHqCbxA/L8td7b lx8kTa/Z3/SRJg7/Q7OtYGZikrUWwl2rDEYmYTU4nmqi+tHqg+p78zrIVIRdxA+fRcNV VCg/oDnjYyr3bnRIENFQoxr28tr8+Gn3o3UYuRLucB4CYNQNB1dyajGAA3k32LxSp4s6 DRi0IhgD9idpXmr4HwRcan/dVx2HMJ1a+Gr3D+CwtN5f3X0TBH6XhqMkbMxkvHFnv6yU 3X+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=xcxEAxymIbdGdTVyNOzbEWvd7e09flPrFQCqRi6Hevk=; b=nuIAK2QXMi1Ag0h5hkoTWfGyHGbAsh7Xi/oTr3RnRKB6x09zvYGDHtQqLd/LP9sryg oEmn2dQZ4fSJKjAcqTKx8UlXzwEZ9+nT+dd7q/kfwIznjBtjMzrcRfkjiP8QnyuGfYnZ J0DflHjBeQLS026OneHXzW0otYz73y0FZ7Ysll+rTNJMeMovGDt7txu8EbqvC9BlqyjR swst26+rCpWAygQLT4smosrEXIqADK0rIxL3pgH2rM/jHdZG4dH1w4e9PnuagBgrlbWJ DBGNNBgSe8lkReDFB4Sj2TRIUIaQQbdYe58RvZ+OB4Yab86lBDVW8Ge+YxbrZlxucIHp fJ0w== X-Gm-Message-State: AHPjjUjqrS2yFjW2wse/DYO5zWkpGxV6etgCYc0yrw1J90P32PV0rYR/ jJGNUcYhOWvnx1QB X-Google-Smtp-Source: ADKCNb6W16t8b0O5XGXSE+nfUl1fFPAjyzov+oNA/K05/8Wnv6mqw+tK63qrqMibOzMN4cDEl5CdZQ== X-Received: by 10.223.169.39 with SMTP id u36mr2189089wrc.309.1504616219326; Tue, 05 Sep 2017 05:56:59 -0700 (PDT) Received: from 6wind.com (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id 1sm557056wmq.10.2017.09.05.05.56.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Sep 2017 05:56:58 -0700 (PDT) From: Adrien Mazarguil To: Gaetan Rivet , Matan Azrad Cc: dev@dpdk.org Date: Tue, 5 Sep 2017 14:56:39 +0200 Message-Id: X-Mailer: git-send-email 2.1.4 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v1 3/3] net/mlx4: merge interrupt collector function 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: , X-List-Received-Date: Tue, 05 Sep 2017 12:57:00 -0000 Since interrupt handler is the only function relying on it, merging them simplifies the code as there is no need for an API to return collected events. Signed-off-by: Adrien Mazarguil --- drivers/net/mlx4/mlx4_intr.c | 94 +++++++++++++-------------------------- 1 file changed, 30 insertions(+), 64 deletions(-) diff --git a/drivers/net/mlx4/mlx4_intr.c b/drivers/net/mlx4/mlx4_intr.c index e1e6c05..3806322 100644 --- a/drivers/net/mlx4/mlx4_intr.c +++ b/drivers/net/mlx4/mlx4_intr.c @@ -135,53 +135,6 @@ mlx4_rx_intr_vec_enable(struct priv *priv) } /** - * Collect interrupt events. - * - * @param priv - * Pointer to private structure. - * @param events - * Pointer to event flags holder. - * - * @return - * Number of events. - */ -static int -mlx4_collect_interrupt_events(struct priv *priv, uint32_t *events) -{ - struct ibv_async_event event; - const struct rte_intr_conf *const intr_conf = - &priv->dev->data->dev_conf.intr_conf; - int ret = 0; - - *events = 0; - /* Read all message and acknowledge them. */ - for (;;) { - if (ibv_get_async_event(priv->ctx, &event)) - break; - switch (event.event_type) { - case IBV_EVENT_PORT_ACTIVE: - case IBV_EVENT_PORT_ERR: - if (!intr_conf->lsc || mlx4_link_status_check(priv)) - break; - *events |= (1 << RTE_ETH_EVENT_INTR_LSC); - ret++; - break; - case IBV_EVENT_DEVICE_FATAL: - if (!intr_conf->rmv) - break; - *events |= (1 << RTE_ETH_EVENT_INTR_RMV); - ret++; - break; - default: - DEBUG("event type %d on port %d not handled", - event.event_type, event.element.port_num); - } - ibv_ack_async_event(&event); - } - return ret; -} - -/** * Process scheduled link status check. * * If LSC interrupts are requested, process related callback. @@ -250,26 +203,39 @@ mlx4_link_status_check(struct priv *priv) static void mlx4_interrupt_handler(struct priv *priv) { - int ret; - uint32_t ev; - int i; + enum { LSC, RMV, }; + static const enum rte_eth_event_type type[] = { + [LSC] = RTE_ETH_EVENT_INTR_LSC, + [RMV] = RTE_ETH_EVENT_INTR_RMV, + }; + uint32_t caught[RTE_DIM(type)] = { 0 }; + struct ibv_async_event event; + const struct rte_intr_conf *const intr_conf = + &priv->dev->data->dev_conf.intr_conf; + unsigned int i; - ret = mlx4_collect_interrupt_events(priv, &ev); - if (ret > 0) { - for (i = RTE_ETH_EVENT_UNKNOWN; - i < RTE_ETH_EVENT_MAX; - i++) { - if (ev & (1 << i)) { - ev &= ~(1 << i); - _rte_eth_dev_callback_process(priv->dev, i, - NULL, NULL); - ret--; - } + /* Read all message and acknowledge them. */ + while (!ibv_get_async_event(priv->ctx, &event)) { + switch (event.event_type) { + case IBV_EVENT_PORT_ACTIVE: + case IBV_EVENT_PORT_ERR: + if (intr_conf->lsc && !mlx4_link_status_check(priv)) + ++caught[LSC]; + break; + case IBV_EVENT_DEVICE_FATAL: + if (intr_conf->rmv) + ++caught[RMV]; + break; + default: + DEBUG("event type %d on physical port %d not handled", + event.event_type, event.element.port_num); } - if (ret) - WARN("%d event%s not processed", ret, - (ret > 1 ? "s were" : " was")); + ibv_ack_async_event(&event); } + for (i = 0; i != RTE_DIM(caught); ++i) + if (caught[i]) + _rte_eth_dev_callback_process(priv->dev, type[i], + NULL, NULL); } /** -- 2.1.4