From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr0-f173.google.com (mail-wr0-f173.google.com [209.85.128.173]) by dpdk.org (Postfix) with ESMTP id 8A01D2BAF for ; Tue, 5 Sep 2017 15:30:01 +0200 (CEST) Received: by mail-wr0-f173.google.com with SMTP id k20so8928wre.4 for ; Tue, 05 Sep 2017 06:30:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=LwmfGK2BzBbmvoSPaP3I26gA0I2CowOHDWN9Z0F2FKU=; b=KabkGn5XI1jT1suN4HeZMk//80G3I/nLvbM1ivKCYacycXMoXQdFY1xP/MT6ZpYTWv 2QzoROrhvzcu3ktzwqZjTk5qUp9zXMvnPZwGIBfvxQdEaoybEnu8HZDtulUIzSjwhEJL UzgvsTJpalZZj/5UWNDlu+7tBcafFDGhEfRVXuOZUv6prgUtvSgwzx4U6Xjx3zEpjkjG dNGuwnLqJJdbp7xiOMSkX+YQfhs/lQNXiEbRUybhqJRyyH7pxG2Ld+aG9L4D9yG3/y14 IFy+42+OwdC8cEcKBEOIlO37x1uOdXGVBacTJ1nLhIdcMeAyuGGc4ebBK2B8wVHzC7Pl 0WiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=LwmfGK2BzBbmvoSPaP3I26gA0I2CowOHDWN9Z0F2FKU=; b=aW6rhURwoo3UJMDOz7ryTUCqEw6nmXAvRhZpq/n62Y7405Sv7tMXkMRhupr5EoN4E0 7C3wBymMln7CRSshXy51Y3DXkLdLQMab6lFq+ELfGT5j8GMIc/yu5/zm5BWimkmto+du eIPiENCD6l4Xb90fb1JJFte/2KorG7PCSMBALXSnaCP0cwF1bBmc8xfNLDm1RDjX7o4B dYOUMSns7lZAKdaSvZbAPoZNfJ7/Xnu807o8NfzaBG6VEiq19hmlbdDdv6TdxVydaoTq op/2Ph/H8B/2tXuevC2ntlrpf3PckI+WjT4GNo6esUIaVcsR3pMIJ8naQyskt7UnyZJK gfvw== X-Gm-Message-State: AHPjjUiyNp972QmlnuO9FRdJT+VJJBpLYSWdPfmU9pxXpmRg50BAZIdL UVUJigjmGQlW4F14 X-Google-Smtp-Source: ADKCNb5NGUzIct4PjwuctpitWG60G2m73ktLWtGqT+2Hw1p06iTITzmX39exqhEMkNZAEBSpXpNfgA== X-Received: by 10.223.185.123 with SMTP id b56mr2513497wrg.115.1504618200802; Tue, 05 Sep 2017 06:30:00 -0700 (PDT) Received: from bidouze.vm.6wind.com (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id 193sm598254wmh.47.2017.09.05.06.29.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Sep 2017 06:30:00 -0700 (PDT) Date: Tue, 5 Sep 2017 15:29:50 +0200 From: =?iso-8859-1?Q?Ga=EBtan?= Rivet To: Adrien Mazarguil Cc: Matan Azrad , dev@dpdk.org Message-ID: <20170905132950.GH21444@bidouze.vm.6wind.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) Subject: Re: [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 13:30:01 -0000 On Tue, Sep 05, 2017 at 02:56:39PM +0200, Adrien Mazarguil wrote: > 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 }; This is nicely written > + 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 > -- Gaëtan Rivet 6WIND