From patchwork Wed Dec 16 21:12:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Boyer X-Patchwork-Id: 85260 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 D8461A09F0; Wed, 16 Dec 2020 22:13:40 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 81CA6C9D8; Wed, 16 Dec 2020 22:13:25 +0100 (CET) Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) by dpdk.org (Postfix) with ESMTP id 787B2C9D6 for ; Wed, 16 Dec 2020 22:13:23 +0100 (CET) Received: by mail-pl1-f170.google.com with SMTP id v3so13647914plz.13 for ; Wed, 16 Dec 2020 13:13:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pensando.io; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=g5MRGZOM2ag3W4mzO0OaYTErIvBW8n30gLP1q6tXNSI=; b=KJEXrlRBe+EdAzVam27gSy4cbOUmFecxeuPZA1xKDIw3uT8vCKwbVdFul2HQlz7TFc JCQ2CbafBkRrLg5AsEtfqyynwJOGFLKtI96ToBjbp5rkVy9JwdkvTKiG7JTEVkQSbDxa DqGy1q4ZH5lX9Uh8YS9XXcBnzYTmw8B1E4FYLMpYw8OavrC7cRaOgihXfLyAfJervmv2 B2zhhNJ+cyCHI2JDzJvTGypJPHalFEj+DreoAUd7auUoCkPG44K3XWDkOI1X2wMhrKnq Kk8uN1S4VQUrZ/LxKq+sW2QfJwGNaD+7ovCEVHSKmAheb01kwqkqrvtvEcg5WV3stvlP +cWA== 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:in-reply-to:references; bh=g5MRGZOM2ag3W4mzO0OaYTErIvBW8n30gLP1q6tXNSI=; b=geKfsIWUfp4np+yu0zkza++VSJr/L+W8eHLsjfF7T8pYmIM4a60F4hNvd0urE4sRzY 3GzEup4CZceGsCNkF8e8H8TMloj5NjSMxW6rwgNiFC2prtKW1iW3KUHqVGBlIFmX8hII uEfZxmAW78IEi2L0bPjknA0ya3vrFwu4MR2Ks12iKM6A06YqQQFPb6sQOSGdymRz7mjd U42Ix4rzrvN+HxHwcB4OcjK4U9aRIe7NisphgNeOTnvMmFIaPAuOeQT/DTUgmcNaVB+V SQiomCfG2ybpig+NZIiNqnZzU24H58ZUCHNKsHZK8JTIW3tEoEUuXU/uimGzOWT+ikLc ewnw== X-Gm-Message-State: AOAM531Wl9f7d78Igz9HNiBJ7xtfE6BsKapqtZp3sBEgWO5Q4NkGWgGU gqVQuEzL41/HhBgrVn2pMgIg3MwhD1osgg== X-Google-Smtp-Source: ABdhPJyRFCr0ianEs5VvwPeWx2Crxbd9sX63CA31HIAHXXK2XFA6W4Hnfg0bm6O1kxjnks7W5aPxKw== X-Received: by 2002:a17:902:bb92:b029:d9:e9bf:b775 with SMTP id m18-20020a170902bb92b02900d9e9bfb775mr8117251pls.24.1608153201376; Wed, 16 Dec 2020 13:13:21 -0800 (PST) Received: from driver-dev1.pensando.io ([12.226.153.42]) by smtp.gmail.com with ESMTPSA id r67sm3345614pfc.82.2020.12.16.13.13.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Dec 2020 13:13:20 -0800 (PST) From: Andrew Boyer To: dev@dpdk.org Cc: Alfredo Cardigliano , Andrew Boyer Date: Wed, 16 Dec 2020 13:12:51 -0800 Message-Id: <20201216211257.37195-2-aboyer@pensando.io> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201216211257.37195-1-aboyer@pensando.io> References: <20201216211257.37195-1-aboyer@pensando.io> In-Reply-To: <20201210142231.63209-1-aboyer@pensando.io> References: <20201210142231.63209-1-aboyer@pensando.io> Subject: [dpdk-dev] [PATCH v2 1/7] net/ionic: preserve RSS state unless RETA size changes 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" This preserves settings across a LIF stop/start. This will become important when link toggling is tied to LIF stop/start. Signed-off-by: Andrew Boyer --- drivers/net/ionic/ionic_lif.c | 44 ++++++++++++++++------------------- drivers/net/ionic/ionic_lif.h | 1 + 2 files changed, 21 insertions(+), 24 deletions(-) diff --git a/drivers/net/ionic/ionic_lif.c b/drivers/net/ionic/ionic_lif.c index 28ae9dc8a..646c921b2 100644 --- a/drivers/net/ionic/ionic_lif.c +++ b/drivers/net/ionic/ionic_lif.c @@ -962,8 +962,6 @@ ionic_lif_rss_config(struct ionic_lif *lif, static int ionic_lif_rss_setup(struct ionic_lif *lif) { - size_t tbl_size = sizeof(*lif->rss_ind_tbl) * - lif->adapter->ident.lif.eth.rss_ind_tbl_sz; static const uint8_t toeplitz_symmetric_key[] = { 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, @@ -971,34 +969,35 @@ ionic_lif_rss_setup(struct ionic_lif *lif) 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, }; - uint32_t socket_id = rte_socket_id(); uint32_t i; - int err; + uint16_t tbl_sz = lif->adapter->ident.lif.eth.rss_ind_tbl_sz; IONIC_PRINT_CALL(); - lif->rss_ind_tbl_z = rte_eth_dma_zone_reserve(lif->eth_dev, - "rss_ind_tbl", - 0 /* queue_idx*/, tbl_size, IONIC_ALIGN, socket_id); - if (!lif->rss_ind_tbl_z) { - IONIC_PRINT(ERR, "OOM"); - return -ENOMEM; - } + lif->rss_ind_tbl_z = rte_eth_dma_zone_reserve(lif->eth_dev, + "rss_ind_tbl", 0 /* queue_idx */, + sizeof(*lif->rss_ind_tbl) * tbl_sz, + IONIC_ALIGN, rte_socket_id()); + if (!lif->rss_ind_tbl_z) { + IONIC_PRINT(ERR, "OOM"); + return -ENOMEM; + } - lif->rss_ind_tbl = lif->rss_ind_tbl_z->addr; - lif->rss_ind_tbl_pa = lif->rss_ind_tbl_z->iova; + lif->rss_ind_tbl = lif->rss_ind_tbl_z->addr; + lif->rss_ind_tbl_pa = lif->rss_ind_tbl_z->iova; + } - /* Fill indirection table with 'default' values */ - for (i = 0; i < lif->adapter->ident.lif.eth.rss_ind_tbl_sz; i++) - lif->rss_ind_tbl[i] = i % lif->nrxqcqs; + if (lif->rss_ind_tbl_nrxqcqs != lif->nrxqcqs) { + lif->rss_ind_tbl_nrxqcqs = lif->nrxqcqs; - err = ionic_lif_rss_config(lif, IONIC_RSS_OFFLOAD_ALL, - toeplitz_symmetric_key, NULL); - if (err) - return err; + /* Fill indirection table with 'default' values */ + for (i = 0; i < tbl_sz; i++) + lif->rss_ind_tbl[i] = i % lif->nrxqcqs; + } - return 0; + return ionic_lif_rss_config(lif, IONIC_RSS_OFFLOAD_ALL, + toeplitz_symmetric_key, NULL); } static void @@ -1578,9 +1577,6 @@ ionic_lif_start(struct ionic_lif *lif) uint32_t i; int err; - IONIC_PRINT(DEBUG, "Setting RSS configuration on port %u", - lif->port_id); - err = ionic_lif_rss_setup(lif); if (err) return err; diff --git a/drivers/net/ionic/ionic_lif.h b/drivers/net/ionic/ionic_lif.h index 8e2b42443..b80931c61 100644 --- a/drivers/net/ionic/ionic_lif.h +++ b/drivers/net/ionic/ionic_lif.h @@ -108,6 +108,7 @@ struct ionic_lif { uint8_t *rss_ind_tbl; rte_iova_t rss_ind_tbl_pa; const struct rte_memzone *rss_ind_tbl_z; + uint32_t rss_ind_tbl_nrxqcqs; uint32_t info_sz; struct ionic_lif_info *info; rte_iova_t info_pa; From patchwork Wed Dec 16 21:12:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Boyer X-Patchwork-Id: 85261 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 1D7B6A09F0; Wed, 16 Dec 2020 22:14:04 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7298EC9F8; Wed, 16 Dec 2020 22:13:28 +0100 (CET) Received: from mail-pj1-f51.google.com (mail-pj1-f51.google.com [209.85.216.51]) by dpdk.org (Postfix) with ESMTP id 58209C9F4 for ; Wed, 16 Dec 2020 22:13:26 +0100 (CET) Received: by mail-pj1-f51.google.com with SMTP id lb18so2186803pjb.5 for ; Wed, 16 Dec 2020 13:13:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pensando.io; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=gT6fDbNlBmyMYs8f4TN40mLmSI4OV6XjleSE48+xbG8=; b=A4mCMGzTpiMbVwKtnLvOuR6hqBW9drtqAFLGKjigCJBv1hWZYDj5ZJg0569VFhlNH0 X5yhfRTuHrinGdI1bWKQBXGEapul7XDAUfY3h+mDnw/P8MMLZqKJZYoS8JL9KsTjtD8t +wXYMyFw0u/cYSzkfp+37gbvO5UIH4qCSI0Ql5S21Qo+JfW5A9VZqvlsqcck542o4dYL wcaft174yWOFsNurk6hML/B7SCXOyg6yPjXFA8YmeSb/n6W0CqxMErarcvFouQSUp96P XAMnuuN7O4FCVzXe4jBXe+4E8PGgfuW/bnqByJQR6WhOlTieZqyDiPT8CDmsUqmoT8Ig YgQA== 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:in-reply-to:references; bh=gT6fDbNlBmyMYs8f4TN40mLmSI4OV6XjleSE48+xbG8=; b=lp/H6FiVjtv/QPyc6FJB2hsLa8MYFXGMLwD2mGMQrMb86GxoMDVVghB9zkuqrpN1w2 4AuQ0mqNqpf5W43tnoU/u0uRIBpSCgBI/zv4WYyPCmhjMl5NkjaqFvUI2EV1h2iuMUa7 2patS4MVR3XUtzwW4OY7SeA1I8snTEBsP8eAqIM1eD4afiLK/Cw03NffCCrlGj2oirIx exuhHytCrW7g5Tcl7I9QbbA1LVwM0OHijBgpHGFnmRQpGY6fQQSMbahsTnsbogZgyaaN eEHhyWLRQyBYmmtWWomBK6k96j8cD4BzVYK62DWGO+CcnF4E0JiJHN0g3ik/QKSWmQ8y aa+g== X-Gm-Message-State: AOAM532eauerBG378Zdn8PTDMTUxKPNK3uURd4Kg5nDmLsO+KflAf507 CKy/WHrat/ZaUSFpGK1JpIcAEZx7eY9Thg== X-Google-Smtp-Source: ABdhPJxAsI04woqWkYCNwfMWgxbxQgtZJqBMjmK2RnrfhfrKFrX9knR6MNM2h4CgfFMnTvPcErxFCg== X-Received: by 2002:a17:90a:bb83:: with SMTP id v3mr4652082pjr.28.1608153204402; Wed, 16 Dec 2020 13:13:24 -0800 (PST) Received: from driver-dev1.pensando.io ([12.226.153.42]) by smtp.gmail.com with ESMTPSA id r67sm3345614pfc.82.2020.12.16.13.13.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Dec 2020 13:13:23 -0800 (PST) From: Andrew Boyer To: dev@dpdk.org Cc: Alfredo Cardigliano , Andrew Boyer Date: Wed, 16 Dec 2020 13:12:52 -0800 Message-Id: <20201216211257.37195-3-aboyer@pensando.io> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201216211257.37195-1-aboyer@pensando.io> References: <20201216211257.37195-1-aboyer@pensando.io> In-Reply-To: <20201210142231.63209-1-aboyer@pensando.io> References: <20201210142231.63209-1-aboyer@pensando.io> Subject: [dpdk-dev] [PATCH v2 2/7] net/ionic: preserve Rx mode across LIF stop/start 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" Otherwise, non-default settings (like PROMISC) get reset. This will become important when link toggling is tied to LIF stop/start. Signed-off-by: Andrew Boyer --- drivers/net/ionic/ionic_lif.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/net/ionic/ionic_lif.c b/drivers/net/ionic/ionic_lif.c index 646c921b2..875c7e585 100644 --- a/drivers/net/ionic/ionic_lif.c +++ b/drivers/net/ionic/ionic_lif.c @@ -1573,7 +1573,7 @@ ionic_lif_configure(struct ionic_lif *lif) int ionic_lif_start(struct ionic_lif *lif) { - uint32_t rx_mode = 0; + uint32_t rx_mode; uint32_t i; int err; @@ -1581,16 +1581,16 @@ ionic_lif_start(struct ionic_lif *lif) if (err) return err; - IONIC_PRINT(DEBUG, "Setting RX mode on port %u", - lif->port_id); - - rx_mode |= IONIC_RX_MODE_F_UNICAST; - rx_mode |= IONIC_RX_MODE_F_MULTICAST; - rx_mode |= IONIC_RX_MODE_F_BROADCAST; + if (!lif->rx_mode) { + IONIC_PRINT(DEBUG, "Setting RX mode on %s", + lif->name); - lif->rx_mode = 0; /* set by ionic_set_rx_mode */ + rx_mode = IONIC_RX_MODE_F_UNICAST; + rx_mode |= IONIC_RX_MODE_F_MULTICAST; + rx_mode |= IONIC_RX_MODE_F_BROADCAST; - ionic_set_rx_mode(lif, rx_mode); + ionic_set_rx_mode(lif, rx_mode); + } IONIC_PRINT(DEBUG, "Starting %u RX queues and %u TX queues " "on port %u", From patchwork Wed Dec 16 21:12:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Boyer X-Patchwork-Id: 85262 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 ECF83A09F0; Wed, 16 Dec 2020 22:14:21 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id EABBECA04; Wed, 16 Dec 2020 22:13:31 +0100 (CET) Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) by dpdk.org (Postfix) with ESMTP id 0E356CA04 for ; Wed, 16 Dec 2020 22:13:29 +0100 (CET) Received: by mail-pl1-f175.google.com with SMTP id j1so13672962pld.3 for ; Wed, 16 Dec 2020 13:13:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pensando.io; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=v/GqzaXQuWJcYT0O7k5oyhD1TBiTWzbpSL5++MTgOOs=; b=xQSLNLkrjGIYFf3BAVwZnHVXh0e7JhdMj3LaObywIFHNSAdgNaOpuDaSmmirhDmxlV 4aIQ/9VsJRFi6ttLlqWR6IsiXCfw0IhCM/TpDqLnU+n9ietNpjglrdKKjsERudf+yyxq kIFPghG5cerYH5rCJ8/d2zcpsRusHJCJ1DEUJly5ThgSv1XwUKmg/IPveu4uw4LgzIPH XcokP5Edwdh9Beq6HU/q88KuVGGOR49SiPzeMVufsBZA1BRHPjAgSxFrcWqu3XrSnNKU fO8+jDN8ehhXoB6ZQkpxfXkHQ5A9KheuxcdxRiVgtcKu4yvhi2bXMfoyZKFCDnnzNoRX GUUw== 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:in-reply-to:references; bh=v/GqzaXQuWJcYT0O7k5oyhD1TBiTWzbpSL5++MTgOOs=; b=llbIO61CN1HM0u5HBZNjC+aP6PYXvtuhcMlS7rqD3sPFn44Z4G76Hvv440qA94CjpW LbIQgAoTPHWlxdL8SPsV0aMHnBoGokKt+P92tO2P2mdo2nnqm/zSwsL4igF9LDkWLFUE 69136BUijLxCioqFSF9pbJ5lCySjFODfjsw0zwI06UdsnFaeTsRj5po9qE2tG9i/OqEZ 3Q+O8TS4g6KG+wKxqmIbMUCf13KsJSm2xtc3bYZ2PqlzaPGJQ3kTiQdYb16nfEv2fCfi tVOWbiUyk+S6Ugrv77SVxUAz8/xhkVwff5NIIt5MU9ZQ3wFn325Ia528XSAGNcJ++ocS ZaAQ== X-Gm-Message-State: AOAM530nL0hunE9z688Dl7RdtMocqxEoxehns7SZzqy6RR/qssEM2wb8 CUfLHj6nAZweBkjRLhqaELGo/XB4CHseYA== X-Google-Smtp-Source: ABdhPJwg9pMVDVCX9WTylIwNdz0vivX032lgT7+38eY9bYsnFsxLeHG3sIizw8/7+L/sQyi3lfBENw== X-Received: by 2002:a17:90b:4acc:: with SMTP id mh12mr4758745pjb.54.1608153206886; Wed, 16 Dec 2020 13:13:26 -0800 (PST) Received: from driver-dev1.pensando.io ([12.226.153.42]) by smtp.gmail.com with ESMTPSA id r67sm3345614pfc.82.2020.12.16.13.13.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Dec 2020 13:13:26 -0800 (PST) From: Andrew Boyer To: dev@dpdk.org Cc: Alfredo Cardigliano , Andrew Boyer Date: Wed, 16 Dec 2020 13:12:53 -0800 Message-Id: <20201216211257.37195-4-aboyer@pensando.io> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201216211257.37195-1-aboyer@pensando.io> References: <20201216211257.37195-1-aboyer@pensando.io> In-Reply-To: <20201210142231.63209-1-aboyer@pensando.io> References: <20201210142231.63209-1-aboyer@pensando.io> Subject: [dpdk-dev] [PATCH v2 3/7] net/ionic: remove multi-LIF support 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" This feature is unused, so remove it. There is exactly one adapter / lif / ethdev per port. Signed-off-by: Andrew Boyer --- drivers/net/ionic/ionic.h | 3 +- drivers/net/ionic/ionic_dev.c | 16 ++-------- drivers/net/ionic/ionic_dev.h | 8 ++--- drivers/net/ionic/ionic_ethdev.c | 50 ++++++++++++-------------------- drivers/net/ionic/ionic_lif.c | 24 ++++----------- drivers/net/ionic/ionic_lif.h | 1 - 6 files changed, 31 insertions(+), 71 deletions(-) diff --git a/drivers/net/ionic/ionic.h b/drivers/net/ionic/ionic.h index 7ad0ab69e..49d1fc003 100644 --- a/drivers/net/ionic/ionic.h +++ b/drivers/net/ionic/ionic.h @@ -51,9 +51,8 @@ struct ionic_adapter { const char *name; struct ionic_dev_bar bars[IONIC_BARS_MAX]; struct ionic_identity ident; - struct ionic_lif *lifs[IONIC_LIFS_MAX]; + struct ionic_lif *lif; uint32_t num_bars; - uint32_t nlifs; uint32_t max_ntxqs_per_lif; uint32_t max_nrxqs_per_lif; uint32_t max_mac_addrs; diff --git a/drivers/net/ionic/ionic_dev.c b/drivers/net/ionic/ionic_dev.c index f32966521..4b5e24f98 100644 --- a/drivers/net/ionic/ionic_dev.c +++ b/drivers/net/ionic/ionic_dev.c @@ -288,12 +288,10 @@ ionic_dev_cmd_lif_identify(struct ionic_dev *idev, uint8_t type, uint8_t ver) } void -ionic_dev_cmd_lif_init(struct ionic_dev *idev, uint16_t lif_index, - rte_iova_t info_pa) +ionic_dev_cmd_lif_init(struct ionic_dev *idev, rte_iova_t info_pa) { union ionic_dev_cmd cmd = { .lif_init.opcode = IONIC_CMD_LIF_INIT, - .lif_init.index = lif_index, .lif_init.info_pa = info_pa, }; @@ -301,11 +299,10 @@ ionic_dev_cmd_lif_init(struct ionic_dev *idev, uint16_t lif_index, } void -ionic_dev_cmd_lif_reset(struct ionic_dev *idev, uint16_t lif_index) +ionic_dev_cmd_lif_reset(struct ionic_dev *idev) { union ionic_dev_cmd cmd = { .lif_init.opcode = IONIC_CMD_LIF_RESET, - .lif_init.index = lif_index, }; ionic_dev_cmd_go(idev, &cmd); @@ -317,12 +314,6 @@ ionic_db_map(struct ionic_lif *lif, struct ionic_queue *q) return lif->kern_dbpage + q->hw_type; } -int -ionic_db_page_num(struct ionic_lif *lif, int pid) -{ - return (lif->index * 0) + pid; -} - void ionic_intr_init(struct ionic_dev *idev, struct ionic_intr_info *intr, unsigned long index) @@ -334,14 +325,13 @@ ionic_intr_init(struct ionic_dev *idev, struct ionic_intr_info *intr, void ionic_dev_cmd_adminq_init(struct ionic_dev *idev, struct ionic_qcq *qcq, - uint16_t lif_index, uint16_t intr_index) + uint16_t intr_index) { struct ionic_queue *q = &qcq->q; struct ionic_cq *cq = &qcq->cq; union ionic_dev_cmd cmd = { .q_init.opcode = IONIC_CMD_Q_INIT, - .q_init.lif_index = lif_index, .q_init.type = q->type, .q_init.index = q->index, .q_init.flags = IONIC_QINIT_F_ENA, diff --git a/drivers/net/ionic/ionic_dev.h b/drivers/net/ionic/ionic_dev.h index 026c4a9f3..6588a373f 100644 --- a/drivers/net/ionic/ionic_dev.h +++ b/drivers/net/ionic/ionic_dev.h @@ -232,15 +232,13 @@ void ionic_dev_cmd_port_loopback(struct ionic_dev *idev, void ionic_dev_cmd_lif_identify(struct ionic_dev *idev, uint8_t type, uint8_t ver); -void ionic_dev_cmd_lif_init(struct ionic_dev *idev, uint16_t lif_index, - rte_iova_t addr); -void ionic_dev_cmd_lif_reset(struct ionic_dev *idev, uint16_t lif_index); +void ionic_dev_cmd_lif_init(struct ionic_dev *idev, rte_iova_t addr); +void ionic_dev_cmd_lif_reset(struct ionic_dev *idev); void ionic_dev_cmd_adminq_init(struct ionic_dev *idev, struct ionic_qcq *qcq, - uint16_t lif_index, uint16_t intr_index); + uint16_t intr_index); struct ionic_doorbell __iomem *ionic_db_map(struct ionic_lif *lif, struct ionic_queue *q); -int ionic_db_page_num(struct ionic_lif *lif, int pid); int ionic_cq_init(struct ionic_lif *lif, struct ionic_cq *cq, struct ionic_intr_info *intr, uint32_t num_descs, diff --git a/drivers/net/ionic/ionic_ethdev.c b/drivers/net/ionic/ionic_ethdev.c index 5a360ac08..54d7a6cad 100644 --- a/drivers/net/ionic/ionic_ethdev.c +++ b/drivers/net/ionic/ionic_ethdev.c @@ -339,14 +339,11 @@ static void ionic_dev_interrupt_handler(void *param) { struct ionic_adapter *adapter = (struct ionic_adapter *)param; - uint32_t i; IONIC_PRINT(DEBUG, "->"); - for (i = 0; i < adapter->nlifs; i++) { - if (adapter->lifs[i]) - ionic_notifyq_handler(adapter->lifs[i], -1); - } + if (adapter->lif) + ionic_notifyq_handler(adapter->lif, -1); } static int @@ -1008,10 +1005,9 @@ eth_ionic_dev_init(struct rte_eth_dev *eth_dev, void *init_params) rte_eth_copy_pci_info(eth_dev, pci_dev); eth_dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS; - lif->index = adapter->nlifs; lif->eth_dev = eth_dev; lif->adapter = adapter; - adapter->lifs[adapter->nlifs] = lif; + adapter->lif = lif; IONIC_PRINT(DEBUG, "Up to %u MAC addresses supported", adapter->max_mac_addrs); @@ -1066,7 +1062,7 @@ eth_ionic_dev_uninit(struct rte_eth_dev *eth_dev) if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; - adapter->lifs[lif->index] = NULL; + adapter->lif = NULL; ionic_lif_deinit(lif); ionic_lif_free(lif); @@ -1243,22 +1239,19 @@ eth_ionic_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, adapter->max_mac_addrs = adapter->ident.lif.eth.max_ucast_filters; - adapter->nlifs = 0; - for (i = 0; i < adapter->ident.dev.nlifs; i++) { - snprintf(name, sizeof(name), "net_%s_lif_%lu", - pci_dev->device.name, i); - - err = rte_eth_dev_create(&pci_dev->device, name, - sizeof(struct ionic_lif), - NULL, NULL, - eth_ionic_dev_init, adapter); - if (err) { - IONIC_PRINT(ERR, "Cannot create eth device for " - "ionic lif %s", name); - break; - } + if (adapter->ident.dev.nlifs != 1) { + IONIC_PRINT(ERR, "Unexpected request for %d LIFs", + adapter->ident.dev.nlifs); + goto err_free_adapter; + } - adapter->nlifs++; + snprintf(name, sizeof(name), "%s_lif", pci_dev->device.name); + err = rte_eth_dev_create(&pci_dev->device, + name, sizeof(struct ionic_lif), + NULL, NULL, eth_ionic_dev_init, adapter); + if (err) { + IONIC_PRINT(ERR, "Cannot create eth device for %s", name); + goto err_free_adapter; } err = ionic_configure_intr(adapter); @@ -1283,11 +1276,9 @@ eth_ionic_pci_remove(struct rte_pci_device *pci_dev __rte_unused) struct ionic_adapter *adapter = NULL; struct rte_eth_dev *eth_dev; struct ionic_lif *lif; - uint32_t i; - /* Adapter lookup is using (the first) eth_dev name */ - snprintf(name, sizeof(name), "net_%s_lif_0", - pci_dev->device.name); + /* Adapter lookup is using the eth_dev name */ + snprintf(name, sizeof(name), "%s_lif", pci_dev->device.name); eth_dev = rte_eth_dev_allocated(name); if (eth_dev) { @@ -1298,10 +1289,7 @@ eth_ionic_pci_remove(struct rte_pci_device *pci_dev __rte_unused) if (adapter) { ionic_unconfigure_intr(adapter); - for (i = 0; i < adapter->nlifs; i++) { - lif = adapter->lifs[i]; - rte_eth_dev_destroy(lif->eth_dev, eth_ionic_dev_uninit); - } + rte_eth_dev_destroy(eth_dev, eth_ionic_dev_uninit); rte_free(adapter); } diff --git a/drivers/net/ionic/ionic_lif.c b/drivers/net/ionic/ionic_lif.c index 875c7e585..4b5221b83 100644 --- a/drivers/net/ionic/ionic_lif.c +++ b/drivers/net/ionic/ionic_lif.c @@ -25,7 +25,6 @@ ionic_qcq_enable(struct ionic_qcq *qcq) .pending_work = true, .cmd.q_control = { .opcode = IONIC_CMD_Q_CONTROL, - .lif_index = lif->index, .type = q->type, .index = q->index, .oper = IONIC_Q_ENABLE, @@ -50,7 +49,6 @@ ionic_qcq_disable(struct ionic_qcq *qcq) .pending_work = true, .cmd.q_control = { .opcode = IONIC_CMD_Q_CONTROL, - .lif_index = lif->index, .type = q->type, .index = q->index, .oper = IONIC_Q_DISABLE, @@ -81,7 +79,7 @@ ionic_lif_reset(struct ionic_lif *lif) IONIC_PRINT_CALL(); - ionic_dev_cmd_lif_reset(idev, lif->index); + ionic_dev_cmd_lif_reset(idev); err = ionic_dev_cmd_wait_check(idev, IONIC_DEVCMD_TIMEOUT); if (err) IONIC_PRINT(WARNING, "Failed to reset %s", lif->name); @@ -438,7 +436,6 @@ ionic_lif_rx_mode(struct ionic_lif *lif, uint32_t rx_mode) .pending_work = true, .cmd.rx_mode_set = { .opcode = IONIC_CMD_RX_MODE_SET, - .lif_index = lif->index, .rx_mode = rx_mode, }, }; @@ -530,7 +527,6 @@ ionic_lif_change_mtu(struct ionic_lif *lif, int new_mtu) .pending_work = true, .cmd.lif_setattr = { .opcode = IONIC_CMD_LIF_SETATTR, - .index = lif->index, .attr = IONIC_LIF_ATTR_MTU, .mtu = new_mtu, }, @@ -824,7 +820,6 @@ ionic_lif_alloc(struct ionic_lif *lif) { struct ionic_adapter *adapter = lif->adapter; uint32_t socket_id = rte_socket_id(); - int dbpage_num; int err; /* @@ -840,9 +835,7 @@ ionic_lif_alloc(struct ionic_lif *lif) rte_spinlock_init(&lif->adminq_lock); rte_spinlock_init(&lif->adminq_service_lock); - dbpage_num = ionic_db_page_num(lif, 0); - - lif->kern_dbpage = ionic_bus_map_dbpage(adapter, dbpage_num); + lif->kern_dbpage = ionic_bus_map_dbpage(adapter, 0); if (!lif->kern_dbpage) { IONIC_PRINT(ERR, "Cannot map dbpage, aborting"); return -ENOMEM; @@ -1174,7 +1167,7 @@ ionic_lif_adminq_init(struct ionic_lif *lif) struct ionic_q_init_comp comp; int err; - ionic_dev_cmd_adminq_init(idev, qcq, lif->index, qcq->intr.index); + ionic_dev_cmd_adminq_init(idev, qcq, qcq->intr.index); err = ionic_dev_cmd_wait_check(idev, IONIC_DEVCMD_TIMEOUT); if (err) return err; @@ -1210,7 +1203,6 @@ ionic_lif_notifyq_init(struct ionic_lif *lif) .pending_work = true, .cmd.q_init = { .opcode = IONIC_CMD_Q_INIT, - .lif_index = lif->index, .type = q->type, .index = q->index, .flags = (IONIC_QINIT_F_IRQ | IONIC_QINIT_F_ENA), @@ -1256,7 +1248,6 @@ ionic_lif_set_features(struct ionic_lif *lif) .pending_work = true, .cmd.lif_setattr = { .opcode = IONIC_CMD_LIF_SETATTR, - .index = lif->index, .attr = IONIC_LIF_ATTR_FEATURES, .features = lif->features, }, @@ -1318,7 +1309,6 @@ ionic_lif_txq_init(struct ionic_qcq *qcq) .pending_work = true, .cmd.q_init = { .opcode = IONIC_CMD_Q_INIT, - .lif_index = lif->index, .type = q->type, .index = q->index, .flags = IONIC_QINIT_F_SG, @@ -1365,7 +1355,6 @@ ionic_lif_rxq_init(struct ionic_qcq *qcq) .pending_work = true, .cmd.q_init = { .opcode = IONIC_CMD_Q_INIT, - .lif_index = lif->index, .type = q->type, .index = q->index, .flags = IONIC_QINIT_F_SG, @@ -1409,7 +1398,6 @@ ionic_station_set(struct ionic_lif *lif) .pending_work = true, .cmd.lif_getattr = { .opcode = IONIC_CMD_LIF_GETATTR, - .index = lif->index, .attr = IONIC_LIF_ATTR_MAC, }, }; @@ -1449,7 +1437,6 @@ ionic_lif_set_name(struct ionic_lif *lif) .pending_work = true, .cmd.lif_setattr = { .opcode = IONIC_CMD_LIF_SETATTR, - .index = lif->index, .attr = IONIC_LIF_ATTR_NAME, }, }; @@ -1469,7 +1456,7 @@ ionic_lif_init(struct ionic_lif *lif) memset(&lif->stats_base, 0, sizeof(lif->stats_base)); - ionic_dev_cmd_lif_init(idev, lif->index, lif->info_pa); + ionic_dev_cmd_lif_init(idev, lif->info_pa); err = ionic_dev_cmd_wait_check(idev, IONIC_DEVCMD_TIMEOUT); ionic_dev_cmd_comp(idev, &comp); if (err) @@ -1672,7 +1659,6 @@ int ionic_lifs_size(struct ionic_adapter *adapter) { struct ionic_identity *ident = &adapter->ident; - uint32_t nlifs = ident->dev.nlifs; uint32_t nintrs, dev_nintrs = ident->dev.nintrs; adapter->max_ntxqs_per_lif = @@ -1680,7 +1666,7 @@ ionic_lifs_size(struct ionic_adapter *adapter) adapter->max_nrxqs_per_lif = ident->lif.eth.config.queue_count[IONIC_QTYPE_RXQ]; - nintrs = nlifs * 1 /* notifyq */; + nintrs = 1 /* notifyq */; if (nintrs > dev_nintrs) { IONIC_PRINT(ERR, diff --git a/drivers/net/ionic/ionic_lif.h b/drivers/net/ionic/ionic_lif.h index b80931c61..c1d15dca6 100644 --- a/drivers/net/ionic/ionic_lif.h +++ b/drivers/net/ionic/ionic_lif.h @@ -84,7 +84,6 @@ struct ionic_lif { struct ionic_adapter *adapter; struct rte_eth_dev *eth_dev; uint16_t port_id; /**< Device port identifier */ - uint32_t index; uint32_t hw_index; uint32_t state; uint32_t ntxqcqs; From patchwork Wed Dec 16 21:12:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Boyer X-Patchwork-Id: 85263 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 B97E7A09F0; Wed, 16 Dec 2020 22:14:38 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7E3DECA0E; Wed, 16 Dec 2020 22:13:34 +0100 (CET) Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) by dpdk.org (Postfix) with ESMTP id 0B5C0C9CA for ; Wed, 16 Dec 2020 22:13:31 +0100 (CET) Received: by mail-pl1-f180.google.com with SMTP id x12so13190255plr.10 for ; Wed, 16 Dec 2020 13:13:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pensando.io; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=Bgvg/pp9ubxXqJY5qXM2NXJg+EIPe1bg5yUXhpJ88og=; b=xWEZWUyseJ1E9ntB+4bIhti8erETRI2jOhFzZkoN53ZTHYFP1UZStT+jEIYuX2+5Vk FRN2J7DnZoGGdwJl2GRUO/7AebdM5evOA+MIJTQHMkOlo1XRsJFDAf3tCxD8wrSkPA6w LQ6mr9XkpetZFTaTbhCHxPkHF/LAztQJjDytcRL7EpdKWHfnGLgK7NfvRUWzVWW21zuO tI4eKHySmCoIzRIczN3nVrKytWO26KG2y56RVQAauSvXWKbMg0F+LxF75vd+lZvCEC2Z It6DB51chs7pXSK9qVc5/UR4Aq2Nuk4Cc59GP9FOaoW47+aqOmLY7QMK9R67zxKdynKt szHg== 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:in-reply-to:references; bh=Bgvg/pp9ubxXqJY5qXM2NXJg+EIPe1bg5yUXhpJ88og=; b=NJCuKuLeSsAd2sHOw3AtBBkhNZJOBhEHJo8iQFC514L+8b2nDI0zuXMKBn7lNDyROM ud/wRSev5FMdZ9178d0T2adZk4Qyh4gMrZrZhktE6PugW7TuYePNNbUcHTyquwpNQkiT ycBjrsg2AiO0OHwzWs9PgNFinjm3J/FnHtBli9uPnB26dJNUPg1mbouvUQWw/Avl/QjH 6SQ50/zeDJYa5H5u1RIK630zLnV/zK0Fb77WgYZZXB4TesjMMSRAy/Bmu892rLVcAL1i ZPY5WoYDiXKGbk8pHcy7b+MmNNEMCDv/pMrzVhUs287gi/NWmnnIep6qvyHgm5x9thzX HgrA== X-Gm-Message-State: AOAM531rmy3kSU1sddQ3LpI4JP3OEN7TSWcG/STHo4SRqVD17eD5od7l cZTQRvr/LpD6tthNZiuCslCWndZNQDHiGg== X-Google-Smtp-Source: ABdhPJy3kMipxKvtiV2UQ3uQzMs68w9VkE2vHMahPr8oIYPDr3v1cc7k+cNkarRxCQBtf0u586DB/Q== X-Received: by 2002:a17:90a:fb8a:: with SMTP id cp10mr4658297pjb.136.1608153209007; Wed, 16 Dec 2020 13:13:29 -0800 (PST) Received: from driver-dev1.pensando.io ([12.226.153.42]) by smtp.gmail.com with ESMTPSA id r67sm3345614pfc.82.2020.12.16.13.13.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Dec 2020 13:13:28 -0800 (PST) From: Andrew Boyer To: dev@dpdk.org Cc: Alfredo Cardigliano , Andrew Boyer Date: Wed, 16 Dec 2020 13:12:54 -0800 Message-Id: <20201216211257.37195-5-aboyer@pensando.io> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201216211257.37195-1-aboyer@pensando.io> References: <20201216211257.37195-1-aboyer@pensando.io> In-Reply-To: <20201210142231.63209-1-aboyer@pensando.io> References: <20201210142231.63209-1-aboyer@pensando.io> Subject: [dpdk-dev] [PATCH v2 4/7] net/ionic: fully implement remove-on-close 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" ionic_dev_close() is responsible for destroying the ethdev, lif, and adapter. eth_ionic_dev_remove() calls ionic_dev_close(). Remove-on-close is now required behavior for a PMD. Remove the UNMAINTAINED flag. Signed-off-by: Andrew Boyer --- MAINTAINERS | 2 +- drivers/net/ionic/ionic_ethdev.c | 40 ++++++++++++++++---------------- drivers/net/ionic/ionic_lif.c | 15 ++++++++++++ drivers/net/ionic/ionic_lif.h | 1 + 4 files changed, 37 insertions(+), 21 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 6787b15dc..76ed473e4 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -841,7 +841,7 @@ F: doc/guides/nics/pfe.rst F: drivers/net/pfe/ F: doc/guides/nics/features/pfe.ini -Pensando ionic - UNMAINTAINED +Pensando ionic M: Andrew Boyer F: drivers/net/ionic/ F: doc/guides/nics/ionic.rst diff --git a/drivers/net/ionic/ionic_ethdev.c b/drivers/net/ionic/ionic_ethdev.c index 54d7a6cad..7ab32a0d7 100644 --- a/drivers/net/ionic/ionic_ethdev.c +++ b/drivers/net/ionic/ionic_ethdev.c @@ -955,6 +955,8 @@ ionic_dev_stop(struct rte_eth_dev *eth_dev) return err; } +static void ionic_unconfigure_intr(struct ionic_adapter *adapter); + /* * Reset and stop device. */ @@ -962,6 +964,7 @@ static int ionic_dev_close(struct rte_eth_dev *eth_dev) { struct ionic_lif *lif = IONIC_ETH_DEV_TO_LIF(eth_dev); + struct ionic_adapter *adapter = lif->adapter; int err; IONIC_PRINT_CALL(); @@ -974,11 +977,17 @@ ionic_dev_close(struct rte_eth_dev *eth_dev) return -1; } - err = eth_ionic_dev_uninit(eth_dev); - if (err) { - IONIC_PRINT(ERR, "Cannot destroy LIF: %d", err); - return -1; - } + ionic_lif_free_queues(lif); + + IONIC_PRINT(NOTICE, "Removing device %s", eth_dev->device->name); + ionic_unconfigure_intr(adapter); + + rte_eth_dev_destroy(eth_dev, eth_ionic_dev_uninit); + + ionic_port_reset(adapter); + ionic_reset(adapter); + + rte_free(adapter); return 0; } @@ -1270,29 +1279,20 @@ eth_ionic_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, } static int -eth_ionic_pci_remove(struct rte_pci_device *pci_dev __rte_unused) +eth_ionic_pci_remove(struct rte_pci_device *pci_dev) { char name[RTE_ETH_NAME_MAX_LEN]; - struct ionic_adapter *adapter = NULL; struct rte_eth_dev *eth_dev; - struct ionic_lif *lif; /* Adapter lookup is using the eth_dev name */ snprintf(name, sizeof(name), "%s_lif", pci_dev->device.name); eth_dev = rte_eth_dev_allocated(name); - if (eth_dev) { - lif = IONIC_ETH_DEV_TO_LIF(eth_dev); - adapter = lif->adapter; - } - - if (adapter) { - ionic_unconfigure_intr(adapter); - - rte_eth_dev_destroy(eth_dev, eth_ionic_dev_uninit); - - rte_free(adapter); - } + if (eth_dev) + ionic_dev_close(eth_dev); + else + IONIC_PRINT(DEBUG, "Cannot find device %s", + pci_dev->device.name); return 0; } diff --git a/drivers/net/ionic/ionic_lif.c b/drivers/net/ionic/ionic_lif.c index 4b5221b83..9b11e6310 100644 --- a/drivers/net/ionic/ionic_lif.c +++ b/drivers/net/ionic/ionic_lif.c @@ -920,6 +920,21 @@ ionic_lif_free(struct ionic_lif *lif) } } +void +ionic_lif_free_queues(struct ionic_lif *lif) +{ + uint32_t i; + + for (i = 0; i < lif->ntxqcqs; i++) { + ionic_dev_tx_queue_release(lif->eth_dev->data->tx_queues[i]); + lif->eth_dev->data->tx_queues[i] = NULL; + } + for (i = 0; i < lif->nrxqcqs; i++) { + ionic_dev_rx_queue_release(lif->eth_dev->data->rx_queues[i]); + lif->eth_dev->data->rx_queues[i] = NULL; + } +} + int ionic_lif_rss_config(struct ionic_lif *lif, const uint16_t types, const uint8_t *key, const uint32_t *indir) diff --git a/drivers/net/ionic/ionic_lif.h b/drivers/net/ionic/ionic_lif.h index c1d15dca6..cc0e4f04e 100644 --- a/drivers/net/ionic/ionic_lif.h +++ b/drivers/net/ionic/ionic_lif.h @@ -121,6 +121,7 @@ int ionic_lifs_size(struct ionic_adapter *ionic); int ionic_lif_alloc(struct ionic_lif *lif); void ionic_lif_free(struct ionic_lif *lif); +void ionic_lif_free_queues(struct ionic_lif *lif); int ionic_lif_init(struct ionic_lif *lif); void ionic_lif_deinit(struct ionic_lif *lif); From patchwork Wed Dec 16 21:12:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Boyer X-Patchwork-Id: 85264 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 3F49FA09F0; Wed, 16 Dec 2020 22:14:55 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 268B8C9E8; Wed, 16 Dec 2020 22:13:36 +0100 (CET) Received: from mail-pj1-f51.google.com (mail-pj1-f51.google.com [209.85.216.51]) by dpdk.org (Postfix) with ESMTP id 00A87CA0E for ; Wed, 16 Dec 2020 22:13:31 +0100 (CET) Received: by mail-pj1-f51.google.com with SMTP id f14so2195341pju.4 for ; Wed, 16 Dec 2020 13:13:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pensando.io; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=kYLnHUD3svzutdwSn45+QKRtbE5B3RBjd4Qlgv7CvC8=; b=vGTD6NnM4IbQ3AWPzqLZ84bKSoVa/3sjYOzgfi0sCzl1vrPbfMG/F+cwQ4rcxLP9zs Pu27ed9L9FtuF+6LQhPQ6aWyAlK18f2/rkxByomYZeJ1yDxG42RU3WIdfzmYWKmL/o7N Dn07+A+I16vVhWRbfNBv5rRsNlOFIl/QCOGoVUu+hc1hnIuHVlvd8jBP7Liw/Udn10Hj Cg43LxNHdr4eXXncZh+oNdwf5AP3Ql7D1sH/zDv/x107qiJZstiWaJffDWoA/YsdQvxl R0b10Fj2AQ14qVomfqu4YAjBHaMcVJC4CJFlFfWUIuIpV31ZVU4iZaMXJI0T8bKSeVFl pd3g== 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:in-reply-to:references; bh=kYLnHUD3svzutdwSn45+QKRtbE5B3RBjd4Qlgv7CvC8=; b=TG48As8ENsYKs2NxBQ89Ycb5uDBdQAfLqrg0MujYntEW9qBdjl2I87xgOHWKkty+wJ vkFZEDfJ+zft5Sqjrqj8mOylS2ipsrXoruo4t6CZN8buaeMH+KBb2MkOAN0z4vmJRIB8 bWGsnidweyqMsgZHOzdHCqpEQ+DM24sx5bSiKQ5iyrGbCBWrBwDM8IHa4GuBNAhdE3Qw iJGVKS66cgEg4kTrX0+P0Qt+JKSNobta8VmJcCJ5On9vhd3d962OYR4OfSJSAWs+XikW RnBHZDQb/9iexijW9KPNkIhhQeASXwy0OtVVk9tmQA21JMqciZu4K9OgiF1ckOhDs2F/ /p3w== X-Gm-Message-State: AOAM532AkdNmx7yDWtkqL2MjISXBWZTjiP+Wn7lktzndjaKyn7RxINQw 3KGsh7HGw00leurzlWtFIvp9/b7VRoi0mg== X-Google-Smtp-Source: ABdhPJzscfbx2fTfs3izZMlLUU3mPCVo6ESir25D56lnd18a0dqT8BgBzkFHqzsvN+CgEb6nU254UA== X-Received: by 2002:a17:90a:b395:: with SMTP id e21mr4647815pjr.197.1608153210946; Wed, 16 Dec 2020 13:13:30 -0800 (PST) Received: from driver-dev1.pensando.io ([12.226.153.42]) by smtp.gmail.com with ESMTPSA id r67sm3345614pfc.82.2020.12.16.13.13.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Dec 2020 13:13:30 -0800 (PST) From: Andrew Boyer To: dev@dpdk.org Cc: Alfredo Cardigliano , Andrew Boyer Date: Wed, 16 Dec 2020 13:12:55 -0800 Message-Id: <20201216211257.37195-6-aboyer@pensando.io> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201216211257.37195-1-aboyer@pensando.io> References: <20201216211257.37195-1-aboyer@pensando.io> In-Reply-To: <20201210142231.63209-1-aboyer@pensando.io> References: <20201210142231.63209-1-aboyer@pensando.io> Subject: [dpdk-dev] [PATCH v2 5/7] net/ionic: improve link state handling 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" Add UP and FW_RESET state flags. Update the stack info when the link state changes. Convert set_link_up/set_link_down to lif_start/lif_stop. Condition reported link state on UP flag. Signed-off-by: Andrew Boyer --- drivers/net/ionic/ionic_ethdev.c | 49 ++++++++++--------------------- drivers/net/ionic/ionic_ethdev.h | 4 +++ drivers/net/ionic/ionic_lif.c | 50 ++++++++++++++++++++++++++------ drivers/net/ionic/ionic_lif.h | 4 ++- 4 files changed, 64 insertions(+), 43 deletions(-) diff --git a/drivers/net/ionic/ionic_ethdev.c b/drivers/net/ionic/ionic_ethdev.c index 7ab32a0d7..fd7cd510e 100644 --- a/drivers/net/ionic/ionic_ethdev.c +++ b/drivers/net/ionic/ionic_ethdev.c @@ -28,8 +28,6 @@ static int ionic_dev_stop(struct rte_eth_dev *dev); static int ionic_dev_close(struct rte_eth_dev *dev); static int ionic_dev_set_link_up(struct rte_eth_dev *dev); static int ionic_dev_set_link_down(struct rte_eth_dev *dev); -static int ionic_dev_link_update(struct rte_eth_dev *eth_dev, - int wait_to_complete); static int ionic_flow_ctrl_get(struct rte_eth_dev *eth_dev, struct rte_eth_fc_conf *fc_conf); static int ionic_flow_ctrl_set(struct rte_eth_dev *eth_dev, @@ -236,21 +234,17 @@ static int ionic_dev_set_link_up(struct rte_eth_dev *eth_dev) { struct ionic_lif *lif = IONIC_ETH_DEV_TO_LIF(eth_dev); - struct ionic_adapter *adapter = lif->adapter; - struct ionic_dev *idev = &adapter->idev; int err; IONIC_PRINT_CALL(); - ionic_dev_cmd_port_state(idev, IONIC_PORT_ADMIN_STATE_UP); + err = ionic_lif_start(lif); + if (err) + IONIC_PRINT(ERR, "Could not start lif to set link up"); - err = ionic_dev_cmd_wait_check(idev, IONIC_DEVCMD_TIMEOUT); - if (err) { - IONIC_PRINT(WARNING, "Failed to bring port UP"); - return err; - } + ionic_dev_link_update(lif->eth_dev, 0); - return 0; + return err; } /* @@ -260,24 +254,17 @@ static int ionic_dev_set_link_down(struct rte_eth_dev *eth_dev) { struct ionic_lif *lif = IONIC_ETH_DEV_TO_LIF(eth_dev); - struct ionic_adapter *adapter = lif->adapter; - struct ionic_dev *idev = &adapter->idev; - int err; IONIC_PRINT_CALL(); - ionic_dev_cmd_port_state(idev, IONIC_PORT_ADMIN_STATE_DOWN); + ionic_lif_stop(lif); - err = ionic_dev_cmd_wait_check(idev, IONIC_DEVCMD_TIMEOUT); - if (err) { - IONIC_PRINT(WARNING, "Failed to bring port DOWN"); - return err; - } + ionic_dev_link_update(lif->eth_dev, 0); return 0; } -static int +int ionic_dev_link_update(struct rte_eth_dev *eth_dev, int wait_to_complete __rte_unused) { @@ -291,7 +278,8 @@ ionic_dev_link_update(struct rte_eth_dev *eth_dev, memset(&link, 0, sizeof(link)); link.link_autoneg = ETH_LINK_AUTONEG; - if (!adapter->link_up) { + if (!adapter->link_up || + !(lif->state & IONIC_LIF_F_UP)) { /* Interface is down */ link.link_status = ETH_LINK_DOWN; link.link_duplex = ETH_LINK_HALF_DUPLEX; @@ -944,15 +932,12 @@ static int ionic_dev_stop(struct rte_eth_dev *eth_dev) { struct ionic_lif *lif = IONIC_ETH_DEV_TO_LIF(eth_dev); - int err; IONIC_PRINT_CALL(); - err = ionic_lif_stop(lif); - if (err) - IONIC_PRINT(ERR, "Cannot stop LIF: %d", err); + ionic_lif_stop(lif); - return err; + return 0; } static void ionic_unconfigure_intr(struct ionic_adapter *adapter); @@ -965,17 +950,12 @@ ionic_dev_close(struct rte_eth_dev *eth_dev) { struct ionic_lif *lif = IONIC_ETH_DEV_TO_LIF(eth_dev); struct ionic_adapter *adapter = lif->adapter; - int err; IONIC_PRINT_CALL(); if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; - err = ionic_lif_stop(lif); - if (err) { - IONIC_PRINT(ERR, "Cannot stop LIF: %d", err); - return -1; - } + ionic_lif_stop(lif); ionic_lif_free_queues(lif); @@ -1076,6 +1056,9 @@ eth_ionic_dev_uninit(struct rte_eth_dev *eth_dev) ionic_lif_deinit(lif); ionic_lif_free(lif); + if (!(lif->state & IONIC_LIF_F_FW_RESET)) + ionic_lif_reset(lif); + return 0; } diff --git a/drivers/net/ionic/ionic_ethdev.h b/drivers/net/ionic/ionic_ethdev.h index 578e2301f..6cbcd0f82 100644 --- a/drivers/net/ionic/ionic_ethdev.h +++ b/drivers/net/ionic/ionic_ethdev.h @@ -5,6 +5,8 @@ #ifndef _IONIC_ETHDEV_H_ #define _IONIC_ETHDEV_H_ +#include + #define IONIC_ETH_RSS_OFFLOAD_ALL ( \ ETH_RSS_IPV4 | \ ETH_RSS_NONFRAG_IPV4_TCP | \ @@ -18,5 +20,7 @@ #define IONIC_ETH_DEV_TO_ADAPTER(eth_dev) \ (IONIC_ETH_DEV_TO_LIF(eth_dev)->adapter) +int ionic_dev_link_update(struct rte_eth_dev *eth_dev, int wait_to_complete); + #endif /* _IONIC_ETHDEV_H_ */ diff --git a/drivers/net/ionic/ionic_lif.c b/drivers/net/ionic/ionic_lif.c index 9b11e6310..c1a95ca7c 100644 --- a/drivers/net/ionic/ionic_lif.c +++ b/drivers/net/ionic/ionic_lif.c @@ -63,12 +63,12 @@ ionic_qcq_disable(struct ionic_qcq *qcq) return ionic_adminq_post_wait(lif, &ctx); } -int -ionic_lif_stop(struct ionic_lif *lif __rte_unused) +void +ionic_lif_stop(struct ionic_lif *lif) { - /* Carrier OFF here */ + IONIC_PRINT_CALL(); - return 0; + lif->state &= ~IONIC_LIF_F_UP; } void @@ -1098,14 +1098,32 @@ ionic_link_status_check(struct ionic_lif *lif) return; if (link_up) { - IONIC_PRINT(DEBUG, "Link up - %d Gbps", - lif->info->status.link_speed); adapter->link_speed = lif->info->status.link_speed; + IONIC_PRINT(DEBUG, "Link up - %d Gbps", + adapter->link_speed); } else { IONIC_PRINT(DEBUG, "Link down"); } adapter->link_up = link_up; + ionic_dev_link_update(lif->eth_dev, 0); +} + +static void +ionic_lif_handle_fw_down(struct ionic_lif *lif) +{ + if (lif->state & IONIC_LIF_F_FW_RESET) + return; + + lif->state |= IONIC_LIF_F_FW_RESET; + + if (lif->state & IONIC_LIF_F_UP) { + IONIC_PRINT(NOTICE, + "Surprise FW stop, stopping %s\n", lif->name); + ionic_lif_stop(lif); + } + + IONIC_PRINT(NOTICE, "FW down, %s stopped", lif->name); } static bool @@ -1127,14 +1145,27 @@ ionic_notifyq_cb(struct ionic_cq *cq, uint32_t cq_desc_index, void *cb_arg) switch (cq_desc->event.ecode) { case IONIC_EVENT_LINK_CHANGE: IONIC_PRINT(DEBUG, - "Notifyq IONIC_EVENT_LINK_CHANGE eid=%jd link_status=%d link_speed=%d", + "Notifyq IONIC_EVENT_LINK_CHANGE %s " + "eid=%jd link_status=%d link_speed=%d", + lif->name, cq_desc->event.eid, cq_desc->link_change.link_status, cq_desc->link_change.link_speed); lif->state |= IONIC_LIF_F_LINK_CHECK_NEEDED; + break; + case IONIC_EVENT_RESET: + IONIC_PRINT(NOTICE, + "Notifyq IONIC_EVENT_RESET %s " + "eid=%jd, reset_code=%d state=%d", + lif->name, + cq_desc->event.eid, + cq_desc->reset.reset_code, + cq_desc->reset.state); + ionic_lif_handle_fw_down(lif); break; + default: IONIC_PRINT(WARNING, "Notifyq bad event ecode=%d eid=%jd", cq_desc->event.ecode, cq_desc->event.eid); @@ -1618,9 +1649,10 @@ ionic_lif_start(struct ionic_lif *lif) } } - ionic_link_status_check(lif); - /* Carrier ON here */ + lif->state |= IONIC_LIF_F_UP; + + ionic_link_status_check(lif); return 0; } diff --git a/drivers/net/ionic/ionic_lif.h b/drivers/net/ionic/ionic_lif.h index cc0e4f04e..86d933606 100644 --- a/drivers/net/ionic/ionic_lif.h +++ b/drivers/net/ionic/ionic_lif.h @@ -77,6 +77,8 @@ struct ionic_qcq { #define IONIC_LIF_F_INITED BIT(0) #define IONIC_LIF_F_LINK_CHECK_NEEDED BIT(1) +#define IONIC_LIF_F_UP BIT(2) +#define IONIC_LIF_F_FW_RESET BIT(3) #define IONIC_LIF_NAME_MAX_SZ (32) @@ -127,7 +129,7 @@ int ionic_lif_init(struct ionic_lif *lif); void ionic_lif_deinit(struct ionic_lif *lif); int ionic_lif_start(struct ionic_lif *lif); -int ionic_lif_stop(struct ionic_lif *lif); +void ionic_lif_stop(struct ionic_lif *lif); int ionic_lif_configure(struct ionic_lif *lif); void ionic_lif_reset(struct ionic_lif *lif); From patchwork Wed Dec 16 21:12:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Boyer X-Patchwork-Id: 85265 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 77340A09F0; Wed, 16 Dec 2020 22:15:15 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 20EB8CA30; Wed, 16 Dec 2020 22:13:38 +0100 (CET) Received: from mail-pg1-f175.google.com (mail-pg1-f175.google.com [209.85.215.175]) by dpdk.org (Postfix) with ESMTP id E3A02CA16 for ; Wed, 16 Dec 2020 22:13:34 +0100 (CET) Received: by mail-pg1-f175.google.com with SMTP id w16so18513418pga.9 for ; Wed, 16 Dec 2020 13:13:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pensando.io; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=BNvMlG6hvt/wHqDM4ng6uSSXIhmPdhANFyidDN2NeQU=; b=vvetOmEQVhjSohmX0YkB6ieQPlrdULqyVX6PDeWp3/17weSUspzeSVXqDV5fAg5Mpw BII29CDVzl/8PSYAIPBSqDJDTh+ooToExI5fC4qxp7WqOsiZIeIn/YBxhajVc7gvQydB T+NbWtszW4tTvPUpdRRMjJgsokZlDrn0jQIyMsc+ouua2A70GEWPtQOiInlZN9v5HCGw VJ9r2OCJG6Iwmu70FqkDHZEkc1LKmSalIxlxqZpu86EUb+Kz2XM/m/czGxhrWqbsCIc3 d5TejyHZb5W52B9Mh7X3dUDXp6Hh5ZVqrCCPmbhEGLjOjNBgh474LZVvNn+Z6C1uMyUS yutg== 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:in-reply-to:references; bh=BNvMlG6hvt/wHqDM4ng6uSSXIhmPdhANFyidDN2NeQU=; b=S/i44Y5awl8RJv953vYF6i8PDcxuK0y4bYsNe8Lp68eNTx7M3zUa164Yhfm1LeAN/H q78iKff6HuvURzgEmUBO3dyip4T9KNx0E1f9oqBpUvGKCxtIsON4YFVP1SrcMn79u2v/ 5FrHn/LnpdZXcoFsYmV5L9VfiQLbC0mJ9X98VqEfhwVt/g382kNV31kk5PTttaNM1i2n By9KKspX6FxC33UKRR/DiaKyNHs2OON+vR58SZX3nv0s5Vll3XOBICrrN/WwJcxnQmq/ hRKQYApoYQS/lrlzPxQdgIj0DswEP8bawXNsUwPPfOcGaBF9JpT4YEXzLDSg6OUw2jfu VcBA== X-Gm-Message-State: AOAM533oFo4bslwu4aYlJvXTbCWc1YqFG0kBGPn5FV6DdLdYGfyjCBUl ph+z5DonitYAvA52jAZcFMlU4I1XARN9Ww== X-Google-Smtp-Source: ABdhPJzrl0b6AicfZ1qbdffk/hNzFjCp8zpLTiBXWhwD1VHiVzs1rLQ9voIiI7UaT5gJ4buXFhT50g== X-Received: by 2002:a62:ae0c:0:b029:1a5:819d:9ac5 with SMTP id q12-20020a62ae0c0000b02901a5819d9ac5mr15318259pff.26.1608153212862; Wed, 16 Dec 2020 13:13:32 -0800 (PST) Received: from driver-dev1.pensando.io ([12.226.153.42]) by smtp.gmail.com with ESMTPSA id r67sm3345614pfc.82.2020.12.16.13.13.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Dec 2020 13:13:32 -0800 (PST) From: Andrew Boyer To: dev@dpdk.org Cc: Alfredo Cardigliano , Andrew Boyer Date: Wed, 16 Dec 2020 13:12:56 -0800 Message-Id: <20201216211257.37195-7-aboyer@pensando.io> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201216211257.37195-1-aboyer@pensando.io> References: <20201216211257.37195-1-aboyer@pensando.io> In-Reply-To: <20201210142231.63209-1-aboyer@pensando.io> References: <20201210142231.63209-1-aboyer@pensando.io> Subject: [dpdk-dev] [PATCH v2 6/7] net/ionic: improve queue state handling 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" Skip ionic_lif_[rxq|txq]_init() in queue start if it's already done. Move ionic_lif_[rxq|txq]_deinit() from queue stop to queue release. This allows the queues to be restarted. Signed-off-by: Andrew Boyer --- drivers/net/ionic/ionic_rxtx.c | 62 +++++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 20 deletions(-) diff --git a/drivers/net/ionic/ionic_rxtx.c b/drivers/net/ionic/ionic_rxtx.c index b689c8381..d06f1246c 100644 --- a/drivers/net/ionic/ionic_rxtx.c +++ b/drivers/net/ionic/ionic_rxtx.c @@ -125,6 +125,8 @@ ionic_dev_tx_queue_release(void *tx_queue) IONIC_PRINT_CALL(); + ionic_lif_txq_deinit(txq); + ionic_qcq_free(txq); } @@ -137,6 +139,9 @@ ionic_dev_tx_queue_stop(struct rte_eth_dev *eth_dev, uint16_t tx_queue_id) txq = eth_dev->data->tx_queues[tx_queue_id]; + eth_dev->data->tx_queue_state[tx_queue_id] = + RTE_ETH_QUEUE_STATE_STOPPED; + /* * Note: we should better post NOP Tx desc and wait for its completion * before disabling Tx queue @@ -146,11 +151,6 @@ ionic_dev_tx_queue_stop(struct rte_eth_dev *eth_dev, uint16_t tx_queue_id) ionic_tx_flush(&txq->cq); - ionic_lif_txq_deinit(txq); - - eth_dev->data->tx_queue_state[tx_queue_id] = - RTE_ETH_QUEUE_STATE_STOPPED; - return 0; } @@ -187,6 +187,9 @@ ionic_dev_tx_queue_setup(struct rte_eth_dev *eth_dev, uint16_t tx_queue_id, eth_dev->data->tx_queues[tx_queue_id] = NULL; } + eth_dev->data->tx_queue_state[tx_queue_id] = + RTE_ETH_QUEUE_STATE_STOPPED; + err = ionic_tx_qcq_alloc(lif, tx_queue_id, nb_desc, &txq); if (err) { IONIC_PRINT(DEBUG, "Queue allocation failure"); @@ -210,22 +213,30 @@ ionic_dev_tx_queue_setup(struct rte_eth_dev *eth_dev, uint16_t tx_queue_id, int __rte_cold ionic_dev_tx_queue_start(struct rte_eth_dev *eth_dev, uint16_t tx_queue_id) { + uint8_t *tx_queue_state = eth_dev->data->tx_queue_state; struct ionic_qcq *txq; int err; + if (tx_queue_state[tx_queue_id] == RTE_ETH_QUEUE_STATE_STARTED) { + IONIC_PRINT(DEBUG, "TX queue %u already started", + tx_queue_id); + return 0; + } + txq = eth_dev->data->tx_queues[tx_queue_id]; IONIC_PRINT(DEBUG, "Starting TX queue %u, %u descs", tx_queue_id, txq->q.num_descs); - err = ionic_lif_txq_init(txq); - if (err) - return err; + if (!(txq->flags & IONIC_QCQ_F_INITED)) { + err = ionic_lif_txq_init(txq); + if (err) + return err; + } ionic_qcq_enable(txq); - eth_dev->data->tx_queue_state[tx_queue_id] = - RTE_ETH_QUEUE_STATE_STARTED; + tx_queue_state[tx_queue_id] = RTE_ETH_QUEUE_STATE_STARTED; return 0; } @@ -634,6 +645,8 @@ ionic_dev_rx_queue_release(void *rx_queue) ionic_rx_empty(&rxq->q); + ionic_lif_rxq_deinit(rxq); + ionic_qcq_free(rxq); } @@ -682,6 +695,9 @@ ionic_dev_rx_queue_setup(struct rte_eth_dev *eth_dev, eth_dev->data->rx_queues[rx_queue_id] = NULL; } + eth_dev->data->rx_queue_state[rx_queue_id] = + RTE_ETH_QUEUE_STATE_STOPPED; + err = ionic_rx_qcq_alloc(lif, rx_queue_id, nb_desc, &rxq); if (err) { IONIC_PRINT(ERR, "Queue %d allocation failure", rx_queue_id); @@ -953,17 +969,26 @@ int __rte_cold ionic_dev_rx_queue_start(struct rte_eth_dev *eth_dev, uint16_t rx_queue_id) { uint32_t frame_size = eth_dev->data->dev_conf.rxmode.max_rx_pkt_len; + uint8_t *rx_queue_state = eth_dev->data->rx_queue_state; struct ionic_qcq *rxq; int err; + if (rx_queue_state[rx_queue_id] == RTE_ETH_QUEUE_STATE_STARTED) { + IONIC_PRINT(DEBUG, "RX queue %u already started", + rx_queue_id); + return 0; + } + rxq = eth_dev->data->rx_queues[rx_queue_id]; IONIC_PRINT(DEBUG, "Starting RX queue %u, %u descs (size: %u)", rx_queue_id, rxq->q.num_descs, frame_size); - err = ionic_lif_rxq_init(rxq); - if (err) - return err; + if (!(rxq->flags & IONIC_QCQ_F_INITED)) { + err = ionic_lif_rxq_init(rxq); + if (err) + return err; + } /* Allocate buffers for descriptor rings */ if (ionic_rx_fill(rxq, frame_size) != 0) { @@ -974,8 +999,7 @@ ionic_dev_rx_queue_start(struct rte_eth_dev *eth_dev, uint16_t rx_queue_id) ionic_qcq_enable(rxq); - eth_dev->data->rx_queue_state[rx_queue_id] = - RTE_ETH_QUEUE_STATE_STARTED; + rx_queue_state[rx_queue_id] = RTE_ETH_QUEUE_STATE_STARTED; return 0; } @@ -1044,16 +1068,14 @@ ionic_dev_rx_queue_stop(struct rte_eth_dev *eth_dev, uint16_t rx_queue_id) rxq = eth_dev->data->rx_queues[rx_queue_id]; + eth_dev->data->rx_queue_state[rx_queue_id] = + RTE_ETH_QUEUE_STATE_STOPPED; + ionic_qcq_disable(rxq); /* Flush */ ionic_rxq_service(&rxq->cq, -1, NULL); - ionic_lif_rxq_deinit(rxq); - - eth_dev->data->rx_queue_state[rx_queue_id] = - RTE_ETH_QUEUE_STATE_STOPPED; - return 0; } From patchwork Wed Dec 16 21:12:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Boyer X-Patchwork-Id: 85266 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 2EE02A09F0; Wed, 16 Dec 2020 22:15:35 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id BDC28CA36; Wed, 16 Dec 2020 22:13:39 +0100 (CET) Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) by dpdk.org (Postfix) with ESMTP id C87D4CA16 for ; Wed, 16 Dec 2020 22:13:35 +0100 (CET) Received: by mail-pj1-f50.google.com with SMTP id b5so2418263pjk.2 for ; Wed, 16 Dec 2020 13:13:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pensando.io; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=qOGh+W5URLjHmozJA4mwpTpKgx6AMBbDllT30uG7xus=; b=1BKk1G4LHjP5T4CfsuJkhcDdfP4csepTfcsjYyR6oKXhC2AwSzBqXKOFml29p/utAi uoFoqGK8oVq/8GDCdC+rjQ2LmzgbWMVKD4EWj4ELzGJZynDAq2TzZfLMAywNzyftzt1B QusXIrRi5B2T4Ihd+iApj/B5Jy6OSIp4LyAEXN/8eeVFX+YYhN9fhFFcMTtMmas20NTE Pj5QhBw5ubEIQK6aK1bdENmVb9wBT+KZI584oBqG0n9iJ2RyBumthw5KywrDC7Jn7ljY KiPn0/6AxvreSFH86egSlVi4NYbk/t0TimS4i2WVp0xDbFPk+e2ak9XByW2cSMDVUcBr J9kg== 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:in-reply-to:references; bh=qOGh+W5URLjHmozJA4mwpTpKgx6AMBbDllT30uG7xus=; b=JDGO8IhtdOV9M7D9lVnXIjaEPLXegzi1PdQBlvLLKmjft7aTM2qWkeHB/BdZP6ahdw DVFc//vg2aKQ6bXTg7clI+nfkrVAGV5DcVzmAvquv/GCFYgW42E5PW5cvFIZ2BVF7yl4 cwB7w3wWAO6H4SjLkmSh6/m6TUnEXLhHButTWd8gKh2MvnA6TNsQYStqiM0eChEYa5YW l9O/wAEah5poxPA8V70hQ4thBWjTAmbPxt3aHHyK6XrFnF0SrBC7bmfeBrr/lndzU6Pj fATQnUGvLwh0Lwa256koyxwadJiSEv+u2mKfmVKUuVsR3PILipLt8sF7vNaov5Tx5Q0m ZCVg== X-Gm-Message-State: AOAM533XIugzkdPgfNbgoaSz0+At0/BwA0KmNkadD2J6Pvvy/O4Lztnz zulrNDYpg+tS5WlztpgEQdiw6WI6Y0bQxg== X-Google-Smtp-Source: ABdhPJw76PSQki9TkpAXqQNeLl6zRL+TPv8JdYAQSM3OPgRNpWj9Za9WA74lwSir6TJM44DhGavYJQ== X-Received: by 2002:a17:90b:1811:: with SMTP id lw17mr4727052pjb.105.1608153214913; Wed, 16 Dec 2020 13:13:34 -0800 (PST) Received: from driver-dev1.pensando.io ([12.226.153.42]) by smtp.gmail.com with ESMTPSA id r67sm3345614pfc.82.2020.12.16.13.13.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Dec 2020 13:13:34 -0800 (PST) From: Andrew Boyer To: dev@dpdk.org Cc: Alfredo Cardigliano , Andrew Boyer Date: Wed, 16 Dec 2020 13:12:57 -0800 Message-Id: <20201216211257.37195-8-aboyer@pensando.io> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201216211257.37195-1-aboyer@pensando.io> References: <20201216211257.37195-1-aboyer@pensando.io> In-Reply-To: <20201210142231.63209-1-aboyer@pensando.io> References: <20201210142231.63209-1-aboyer@pensando.io> Subject: [dpdk-dev] [PATCH v2 7/7] net/ionic: stop queues when LIF is stopped 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" Otherwise they cannot be restarted, because the FW will reject INIT or ENA commands on queues which are already running. Signed-off-by: Andrew Boyer --- drivers/net/ionic/ionic_lif.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/net/ionic/ionic_lif.c b/drivers/net/ionic/ionic_lif.c index c1a95ca7c..3e643d145 100644 --- a/drivers/net/ionic/ionic_lif.c +++ b/drivers/net/ionic/ionic_lif.c @@ -66,9 +66,23 @@ ionic_qcq_disable(struct ionic_qcq *qcq) void ionic_lif_stop(struct ionic_lif *lif) { + uint32_t i; + IONIC_PRINT_CALL(); lif->state &= ~IONIC_LIF_F_UP; + + for (i = 0; i < lif->nrxqcqs; i++) { + struct ionic_qcq *rxq = lif->rxqcqs[i]; + if (rxq->flags & IONIC_QCQ_F_INITED) + (void)ionic_dev_rx_queue_stop(lif->eth_dev, i); + } + + for (i = 0; i < lif->ntxqcqs; i++) { + struct ionic_qcq *txq = lif->txqcqs[i]; + if (txq->flags & IONIC_QCQ_F_INITED) + (void)ionic_dev_tx_queue_stop(lif->eth_dev, i); + } } void