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 4C1CCA0C52 for ; Mon, 16 Aug 2021 10:53:01 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 437514003C; Mon, 16 Aug 2021 10:53:01 +0200 (CEST) Received: from smtp-relay-canonical-0.canonical.com (smtp-relay-canonical-0.canonical.com [185.125.188.120]) by mails.dpdk.org (Postfix) with ESMTP id 2B6304003C for ; Mon, 16 Aug 2021 10:53:00 +0200 (CEST) Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-canonical-0.canonical.com (Postfix) with ESMTPS id F3DEF40C9D for ; Mon, 16 Aug 2021 08:52:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1629103980; bh=xpPhagsU/dvj+E3TkHVaG/FDg48VK8QSeEWiw5qg2Xg=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=v3sNb/45QLMPdJyzLvGghRwylOMfseaFqTa7J5mycHTknZola5QTLjd/PzASBMNoO q3oYAdddt1u0SibQX85LKQHLABRjMeHPIvSBWddhRwpqgm1FcgU2Kx0Qx4etoupp7C eZaHjtDxRYUW7eflAom10qNM1yEFjd8dZUI56wnVodQ2mB8IOhG43JNTpDUX+s5yZl 59s7haGCsBElvw/Lrbs4q26YtQvta697I8Mm1H38Qio42A7JTJspLNeBFJtbIuzhZB 2XYS8IOHf8Tde4CSZ08fknTD3T28liTQoSTZidx4voZYheXbFi0joeZlv3gcY8bAL2 lyk0sFSsNqvMQ== Received: by mail-qk1-f198.google.com with SMTP id w2-20020a3794020000b02903b54f40b442so12932052qkd.0 for ; Mon, 16 Aug 2021 01:52:59 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=xpPhagsU/dvj+E3TkHVaG/FDg48VK8QSeEWiw5qg2Xg=; b=lFLnft95VpNoiT3CiMsZBwuNwWnJp9fJEVQ6gFcH+rxzuVUFxRLPU+eo1YGoG/mxw+ Y664gQQgAiOAv+aebhUmpuK+Lo+1X1fLdPr4lSE/Ip7DvSeXuFyym0tLfwV5tRyYxYsP rRncTPgT7PJbdUEgEF+v4EticUuGFcnIzUu/C7jLTYiBY3d0UUUm4tKsqEIjkzEhpeoI zS2P3bBSeUUogXyL8mf3ICiTSefBmjmQbpmIOYhr2FJ+7d7AjGbwZKEToRlHrR9QE5+t tEV8p+QqOOPIeBCEnSR6U60D87YvG+rrahHDgudzLNaXn9A8SyHzoM8SVV8hjEGCtX5/ YmuA== X-Gm-Message-State: AOAM533x2rd7XNyxEeIolD/LNH+m8aFcy1Tl8El8J636snzIW7Gfxfry 23Dhj9IIQSV+c4MIvZ7TfOrMtrb31JTUGmIdOWgzwQkei6M4bEUUa8nsxQgA8lPGdvZdy76S78c W/QBTQF9cGUxq30HW818YUEsrS/vswBupJZ4+VF8e X-Received: by 2002:a05:622a:1a15:: with SMTP id f21mr12788228qtb.7.1629103979011; Mon, 16 Aug 2021 01:52:59 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz4Sny4KAQ966SyCWa4vAGYK2PADT51+sdByEcedTjqibZ+Ta8ngCSD2Xr9oHx0wlZTA6WFVrkqtgY9YuiKGJo= X-Received: by 2002:a05:622a:1a15:: with SMTP id f21mr12788217qtb.7.1629103978839; Mon, 16 Aug 2021 01:52:58 -0700 (PDT) MIME-Version: 1.0 References: <20210812111223.16226-1-getelson@nvidia.com> In-Reply-To: <20210812111223.16226-1-getelson@nvidia.com> From: Christian Ehrhardt Date: Mon, 16 Aug 2021 10:52:33 +0200 Message-ID: To: Gregory Etelson Cc: dpdk stable , Matan Azrad , Viacheslav Ovsiienko Content-Type: text/plain; charset="UTF-8" Subject: Re: [dpdk-stable] [PATCH 19.11] net/mlx5: fix representor interrupt handler 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 Sender: "stable" On Thu, Aug 12, 2021 at 1:12 PM Gregory Etelson wrote: > > [ upstream commit 494d6863c2464838e8ee65b9a7d3d108145ae08d ] > > In mlx5 PMD the PCI device interrupt vector was used by Uplink > representor exclusively and other VF representors did not support > interrupt mode. > All the VFs and Uplink representors are separate ethernet devices > and must have dedicated interrupt vectors. > The fix provides each representor with a dedicated interrupt > vector. > > Fixes: 5882bde88da2 ("net/mlx5: fix representor interrupts handler") Thanks, applied > Signed-off-by: Gregory Etelson > Acked-by: Viacheslav Ovsiienko > --- > drivers/net/mlx5/mlx5.c | 30 ++++++++++++++++++++++++++++++ > drivers/net/mlx5/mlx5_rxq.c | 6 ------ > 2 files changed, 30 insertions(+), 6 deletions(-) > > diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c > index 3208b2eda7..b070d9ba89 100644 > --- a/drivers/net/mlx5/mlx5.c > +++ b/drivers/net/mlx5/mlx5.c > @@ -1334,6 +1334,11 @@ mlx5_dev_close(struct rte_eth_dev *dev) > priv->rxqs_n = 0; > priv->rxqs = NULL; > } > + if (priv->representor) { > + /* Each representor has a dedicated interrupts handler */ > + rte_free(dev->intr_handle); > + dev->intr_handle = NULL; > + } > if (priv->txqs != NULL) { > /* XXX race condition if mlx5_tx_burst() is still running. */ > usleep(1000); > @@ -3421,6 +3426,31 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, > } > restore = list[i].eth_dev->data->dev_flags; > rte_eth_copy_pci_info(list[i].eth_dev, pci_dev); > + /** > + * Each representor has a dedicated interrupts vector. > + * rte_eth_copy_pci_info() assigns PF interrupts handle to > + * representor eth_dev object because representor and PF > + * share the same PCI address. > + * Override representor device with a dedicated > + * interrupts handle here. > + * Representor interrupts handle is released in > + * mlx5_dev_stop(). > + */ > + if (list[i].info.representor) { > + struct rte_intr_handle *intr_handle; > + intr_handle = rte_zmalloc("representor interrupts", > + sizeof(*intr_handle), 0); > + if (!intr_handle) { > + DRV_LOG(ERR, > + "port %u failed to allocate memory for interrupt handler " > + "Rx interrupts will not be supported", > + i); > + rte_errno = ENOMEM; > + ret = -rte_errno; > + goto exit; > + } > + list[i].eth_dev->intr_handle = intr_handle; > + } > /* Restore non-PCI flags cleared by the above call. */ > list[i].eth_dev->data->dev_flags |= restore; > rte_eth_dev_probing_finish(list[i].eth_dev); > diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c > index e3f41d121d..16466a4ef9 100644 > --- a/drivers/net/mlx5/mlx5_rxq.c > +++ b/drivers/net/mlx5/mlx5_rxq.c > @@ -723,9 +723,6 @@ mlx5_rx_intr_vec_enable(struct rte_eth_dev *dev) > unsigned int count = 0; > struct rte_intr_handle *intr_handle = dev->intr_handle; > > - /* Representor shares dev->intr_handle with PF. */ > - if (priv->representor) > - return 0; > if (!dev->data->dev_conf.intr_conf.rxq) > return 0; > mlx5_rx_intr_vec_disable(dev); > @@ -803,9 +800,6 @@ mlx5_rx_intr_vec_disable(struct rte_eth_dev *dev) > unsigned int rxqs_n = priv->rxqs_n; > unsigned int n = RTE_MIN(rxqs_n, (uint32_t)RTE_MAX_RXTX_INTR_VEC_ID); > > - /* Representor shares dev->intr_handle with PF. */ > - if (priv->representor) > - return; > if (!dev->data->dev_conf.intr_conf.rxq) > return; > if (!intr_handle->intr_vec) > -- > 2.32.0 > -- Christian Ehrhardt Staff Engineer, Ubuntu Server Canonical Ltd