From patchwork Thu Sep 17 05:30:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 77979 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id BAF5DA04B6; Thu, 17 Sep 2020 07:33:56 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7CBB01D5AC; Thu, 17 Sep 2020 07:31:24 +0200 (CEST) Received: from mail-lj1-f194.google.com (mail-lj1-f194.google.com [209.85.208.194]) by dpdk.org (Postfix) with ESMTP id 1CA461D592 for ; Thu, 17 Sep 2020 07:31:17 +0200 (CEST) Received: by mail-lj1-f194.google.com with SMTP id s205so887786lja.7 for ; Wed, 16 Sep 2020 22:31:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=o43HPlKaWQzT8RfNIRo9j31AwbMObuS3UTAQM1B4vyY=; b=illgkzxnLOi1joi0C3DA7wJMRXHL5ZtoTjM0M364UFrpHmEFswAnwEuhOJdcVg1Qq0 3qTEJ3sZMVWxSLQ1bS2tVh+X6Rkwu4weGE1hAevW5KSjp+4/nSgq5HfJSIfrh9vo6OUN AP7fklRw2oB54/0+EDbVTh3C0f/BWhFUaJB4H2dBgkrqYyvBr1jcpEwwpzPV0WZMCgBt JR8xIK4lNR1NHHdn5ohizJ7Rqn4kZZYpIOAfQWdO9OcAWvrsrTU2TisQyB0FS4crX+3L Axe7f+h+l3OXDX0AsRtrbMuZTiNmzbtenmgn4wsrIk/04TOu301HVhy8XBb1azsbkxXS aPnQ== 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:mime-version:content-transfer-encoding; bh=o43HPlKaWQzT8RfNIRo9j31AwbMObuS3UTAQM1B4vyY=; b=je6meBKkYl/Amdl5V7wrnoeG+5a2jYbvZgSDioXUtj3jvF6FBa+X6WbbGZV9s5nzcV VuQSbnS+UZEMZNdwX39tQdEAEbVqZKD/e1Ycz3Efy3Lf4PawXxiP2ImlOzY0Rx6gvi29 4PLuAumtqjMKx6OQKI4bhZnmH1BLclcRKar9zoT9atl6gR2C0sdekqNJOe/QuPgL5erU fQAGuvDGTVYiWjl4xxuU7g3WZmlPuJXikQx4FtFt44tvHh4RJP91TFHoDDcAj5SpcRCI UFR3QR3WpLkBlmDMm6WRrf91dJ4OGUF41PjecKTQ6xOt/rrTPLn22ekWeLKVnCZkxoth Bz6g== X-Gm-Message-State: AOAM5316D19/n/pYYiK8Fo6qrVzNzlgPRpJKd/VDPJCnCA5HBKzemjAI PuH4VmPeDT9BsWiloXy7KWIIVlHxCV8ZB2c6 X-Google-Smtp-Source: ABdhPJyLBCBnLIfVdxIORNHNgAuYlKbYslINQXfkd/vUUKJhkiavNOY2bcpCYIMApX15vnJbrLQ+GA== X-Received: by 2002:a2e:7307:: with SMTP id o7mr9212302ljc.323.1600320676470; Wed, 16 Sep 2020 22:31:16 -0700 (PDT) Received: from mkPC.semihalf.local (193-106-246-138.noc.fibertech.net.pl. [193.106.246.138]) by smtp.gmail.com with ESMTPSA id j3sm5033686lfb.185.2020.09.16.22.31.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Sep 2020 22:31:15 -0700 (PDT) From: Michal Krawczyk To: dev@dpdk.org Cc: gtzalik@amazon.com, igorch@amazon.com, Michal Krawczyk , Marcin Wojtas , Evgeny Schemeilin Date: Thu, 17 Sep 2020 07:30:34 +0200 Message-Id: <20200917053035.1889989-20-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200917053035.1889989-1-mk@semihalf.com> References: <20200917053035.1889989-1-mk@semihalf.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 19/20] net/ena: lock dynamic usages of the admin queue 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" There are some cases, where the admin queue commands after the configuration phase finished - for example, the application could ask for the driver statitics from multiple cores at once. As by the design, the admin queue is not multithread safe, the spinlock was added to protect all usages of the admin queue after the configuration is done. Signed-off-by: Michal Krawczyk Reviewed-by: Igor Chauskin Reviewed-by: Guy Tzalik --- drivers/net/ena/ena_ethdev.c | 9 +++++++++ drivers/net/ena/ena_ethdev.h | 7 +++++++ 2 files changed, 16 insertions(+) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index 8077519735..97e383315b 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -570,7 +570,9 @@ static int ena_rss_reta_update(struct rte_eth_dev *dev, } } + rte_spinlock_lock(&adapter->admin_lock); rc = ena_com_indirect_table_set(ena_dev); + rte_spinlock_unlock(&adapter->admin_lock); if (unlikely(rc && rc != ENA_COM_UNSUPPORTED)) { PMD_DRV_LOG(ERR, "Cannot flush the indirect table\n"); return rc; @@ -599,7 +601,9 @@ static int ena_rss_reta_query(struct rte_eth_dev *dev, (reta_size > RTE_RETA_GROUP_SIZE && ((reta_conf + 1) == NULL))) return -EINVAL; + rte_spinlock_lock(&adapter->admin_lock); rc = ena_com_indirect_table_get(ena_dev, indirect_table); + rte_spinlock_unlock(&adapter->admin_lock); if (unlikely(rc && rc != ENA_COM_UNSUPPORTED)) { PMD_DRV_LOG(ERR, "cannot get indirect table\n"); return -ENOTSUP; @@ -954,7 +958,10 @@ static int ena_stats_get(struct rte_eth_dev *dev, return -ENOTSUP; memset(&ena_stats, 0, sizeof(ena_stats)); + + rte_spinlock_lock(&adapter->admin_lock); rc = ena_com_get_dev_basic_stats(ena_dev, &ena_stats); + rte_spinlock_unlock(&adapter->admin_lock); if (unlikely(rc)) { PMD_DRV_LOG(ERR, "Could not retrieve statistics from ENA\n"); return rc; @@ -1876,6 +1883,8 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev) goto err_delete_debug_area; } + rte_spinlock_init(&adapter->admin_lock); + rte_intr_callback_register(intr_handle, ena_interrupt_handler_rte, adapter); diff --git a/drivers/net/ena/ena_ethdev.h b/drivers/net/ena/ena_ethdev.h index 6e24a4e582..ddc80dade0 100644 --- a/drivers/net/ena/ena_ethdev.h +++ b/drivers/net/ena/ena_ethdev.h @@ -200,6 +200,13 @@ struct ena_adapter { u16 max_mtu; struct ena_offloads offloads; + /* The admin queue isn't protected by the lock and is used to + * retrieve statistics from the device. As there is no guarantee that + * application won't try to get statistics from multiple threads, it is + * safer to lock the queue to avoid admin queue failure. + */ + rte_spinlock_t admin_lock; + int id_number; char name[ENA_NAME_MAX_LEN]; u8 mac_addr[RTE_ETHER_ADDR_LEN];