From patchwork Thu Feb 7 12:17:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50186 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id AF3D01B565; Thu, 7 Feb 2019 13:18:44 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 6D82E1B4CB; Thu, 7 Feb 2019 13:18:18 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 4363C600057; Thu, 7 Feb 2019 12:18:17 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:10 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:09 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI82v013195; Thu, 7 Feb 2019 12:18:08 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 121261613EB; Thu, 7 Feb 2019 12:18:08 +0000 (GMT) From: Andrew Rybchenko To: CC: Ivan Malov , Date: Thu, 7 Feb 2019 12:17:24 +0000 Message-ID: <1549541873-17403-2-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-1.651500-4.000000-10 X-TMASE-MatchedRID: guf1jZ5JCXCioinUBRkHmimjEOrcO6AyI9yVcHNDU7are7bPW6Vx7pAZ ruLuPa14rEyNGiLEMZyAMuqetGVetiVvu9chHp+mavP8b9lJtWr6C0ePs7A07ezHZYTfB1+Vc2X FUYw4qQXztJSsZlwmFWfmQoDuFJT5ldj01YxM7mClAH/ERZ6adAwl2zwR43tDREaHw4EMn/vhby oor+qWLG0K7YSIk0sE2kC7SwvGlKhDwb7Jglhh1lFkOwaJdCKgviPEqcclEtxVyvbTg/runA== X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10-1.651500-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541897-1Q9xrOna7GtZ Subject: [dpdk-dev] [PATCH 01/30] net/sfc: log port ID as 16-bit unsigned integer on panic 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" From: Ivan Malov Fixes: f8244c6399d9 ("ethdev: increase port id range") Cc: stable@dpdk.org Signed-off-by: Ivan Malov Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc_debug.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/sfc/sfc_debug.h b/drivers/net/sfc/sfc_debug.h index 6b600ff4d..62f3937e8 100644 --- a/drivers/net/sfc/sfc_debug.h +++ b/drivers/net/sfc/sfc_debug.h @@ -27,7 +27,8 @@ do { \ const struct sfc_adapter *_sa = (sa); \ \ - rte_panic("sfc " PCI_PRI_FMT " #%" PRIu8 ": " fmt "\n", \ + rte_panic("sfc " PCI_PRI_FMT \ + " #%" PRIu16 ": " fmt "\n", \ _sa->pci_addr.domain, _sa->pci_addr.bus, \ _sa->pci_addr.devid, _sa->pci_addr.function, \ _sa->port_id, ##args); \ From patchwork Thu Feb 7 12:17:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50163 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 66EF61B4BA; Thu, 7 Feb 2019 13:18:15 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id C6D271B4B0; Thu, 7 Feb 2019 13:18:13 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id A98A560005B; Thu, 7 Feb 2019 12:18:12 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:09 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:09 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI81S013199; Thu, 7 Feb 2019 12:18:08 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 204221613ED; Thu, 7 Feb 2019 12:18:08 +0000 (GMT) From: Andrew Rybchenko To: CC: Date: Thu, 7 Feb 2019 12:17:25 +0000 Message-ID: <1549541873-17403-3-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-0.395300-4.000000-10 X-TMASE-MatchedRID: 2NojSxm2lXM2jeY+Udg/Ip7tR0mnRAg150iUbMOUheLYpRv5miLGfNYI JSW5nrITq64l+8SGdziiR3zpi0D0Mx8TzIzimOwPlpYqKNmWxsHZs3HUcS/scCq2rl3dzGQ1svO LFGvwMZuIARAUrk1s/28JiY2hMG77cmM4i1xWTFEuwEtx1STcJpf1J9KUsMAzRwPXwQR52+ofbz 2tyePukAS3pvP/4iZ4RpAY2zGw/a84oGQUCbwY5Q+g7mdwjo656FtDZCmYBJ3KTLw/lNgw8g== X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--0.395300-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541893-hcfwQG3-PScu Subject: [dpdk-dev] [PATCH 02/30] net/sfc: remove control path logging from Rx queue count 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" Rx queue count may be used from data core and it should not generate control path logs. Fixes: 04aa6b9c5fd7 ("net/sfc: get RxQ pending descriptors count") Cc: stable@dpdk.org Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc_ethdev.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index a7322a1eb..67ce5a22f 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -1124,8 +1124,6 @@ sfc_rx_queue_count(struct rte_eth_dev *dev, uint16_t rx_queue_id) { struct sfc_adapter *sa = dev->data->dev_private; - sfc_log_init(sa, "RxQ=%u", rx_queue_id); - return sfc_rx_qdesc_npending(sa, rx_queue_id); } From patchwork Thu Feb 7 12:17:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50165 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6AFB51B4CF; Thu, 7 Feb 2019 13:18:20 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 1834B1B4B5; Thu, 7 Feb 2019 13:18:14 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id D30EB60005B; Thu, 7 Feb 2019 12:18:12 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:09 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:09 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI8UV013203; Thu, 7 Feb 2019 12:18:08 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 2E2971613E4; Thu, 7 Feb 2019 12:18:08 +0000 (GMT) From: Andrew Rybchenko To: CC: Date: Thu, 7 Feb 2019 12:17:26 +0000 Message-ID: <1549541873-17403-4-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-1.268300-4.000000-10 X-TMASE-MatchedRID: uXzBxCMCukwQDGFU4qALfh+WEMjoO9WWI9yVcHNDU7bHeIFnKQ51HO73 4x6nzMNiNA1KKQWShzTKh/M5R6nRphF4l1oN/bmOogGd8wIUGIKkWoMjFfK3Xrqln+jYe7ZhPJ0 5UREtjOWnQtykVg1isDu9e59msPtHBeXvD66vx6WJLx4p0P/u5IzjknOM+UJozsQ8iRVyD4486a y9NNiI8eLzNWBegCW2wgn7iDBesS0nRE+fI6etkg6/k+SM6LvygTxnULpEGaO6BSjFT1IR+3SPS odijB6mmkXKOcEfx3tIowWbyLJjJGgxL/bTORVlYlijIv34t+TR8CKm71x1Kr1NuKS30BZnQIFI ZLtsgG0DUH+nVLNyiCsqIP9TxvtJMb6p570ilnc= X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--1.268300-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541893-6vEMNnS3P2IM Subject: [dpdk-dev] [PATCH 03/30] net/sfc: fix logging from secondary process 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" Dynamic log type value may differ in different processes. Fixes: f28ede500c2e ("net/sfc: support multi-process") Cc: stable@dpdk.org Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc.c | 6 +++--- drivers/net/sfc/sfc.h | 2 +- drivers/net/sfc/sfc_ethdev.c | 25 ++++++++++++++++--------- drivers/net/sfc/sfc_mcdi.c | 3 ++- 4 files changed, 22 insertions(+), 14 deletions(-) diff --git a/drivers/net/sfc/sfc.c b/drivers/net/sfc/sfc.c index 6690053f2..0d7311d68 100644 --- a/drivers/net/sfc/sfc.c +++ b/drivers/net/sfc/sfc.c @@ -1071,8 +1071,8 @@ sfc_unprobe(struct sfc_adapter *sa) } uint32_t -sfc_register_logtype(struct sfc_adapter *sa, const char *lt_prefix_str, - uint32_t ll_default) +sfc_register_logtype(const struct rte_pci_addr *pci_addr, + const char *lt_prefix_str, uint32_t ll_default) { size_t lt_prefix_str_size = strlen(lt_prefix_str); size_t lt_str_size_max; @@ -1092,7 +1092,7 @@ sfc_register_logtype(struct sfc_adapter *sa, const char *lt_prefix_str, strncpy(lt_str, lt_prefix_str, lt_prefix_str_size); lt_str[lt_prefix_str_size - 1] = '.'; - rte_pci_device_name(&sa->pci_addr, lt_str + lt_prefix_str_size, + rte_pci_device_name(pci_addr, lt_str + lt_prefix_str_size, lt_str_size_max - lt_prefix_str_size); lt_str[lt_str_size_max - 1] = '\0'; diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h index a94ca8e75..f1cb83002 100644 --- a/drivers/net/sfc/sfc.h +++ b/drivers/net/sfc/sfc.h @@ -311,7 +311,7 @@ int sfc_dma_alloc(const struct sfc_adapter *sa, const char *name, uint16_t id, size_t len, int socket_id, efsys_mem_t *esmp); void sfc_dma_free(const struct sfc_adapter *sa, efsys_mem_t *esmp); -uint32_t sfc_register_logtype(struct sfc_adapter *sa, +uint32_t sfc_register_logtype(const struct rte_pci_addr *pci_addr, const char *lt_prefix_str, uint32_t ll_default); diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 67ce5a22f..10e032400 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -1875,7 +1875,7 @@ static const struct eth_dev_ops sfc_eth_dev_secondary_ops = { }; static int -sfc_eth_dev_secondary_set_ops(struct rte_eth_dev *dev) +sfc_eth_dev_secondary_set_ops(struct rte_eth_dev *dev, uint32_t logtype_main) { /* * Device private data has really many process-local pointers. @@ -1889,12 +1889,14 @@ sfc_eth_dev_secondary_set_ops(struct rte_eth_dev *dev) dp_rx = sfc_dp_find_rx_by_name(&sfc_dp_head, sa->dp_rx_name); if (dp_rx == NULL) { - sfc_err(sa, "cannot find %s Rx datapath", sa->dp_rx_name); + SFC_LOG(sa, RTE_LOG_ERR, logtype_main, + "cannot find %s Rx datapath", sa->dp_rx_name); rc = ENOENT; goto fail_dp_rx; } if (~dp_rx->features & SFC_DP_RX_FEAT_MULTI_PROCESS) { - sfc_err(sa, "%s Rx datapath does not support multi-process", + SFC_LOG(sa, RTE_LOG_ERR, logtype_main, + "%s Rx datapath does not support multi-process", sa->dp_rx_name); rc = EINVAL; goto fail_dp_rx_multi_process; @@ -1902,12 +1904,14 @@ sfc_eth_dev_secondary_set_ops(struct rte_eth_dev *dev) dp_tx = sfc_dp_find_tx_by_name(&sfc_dp_head, sa->dp_tx_name); if (dp_tx == NULL) { - sfc_err(sa, "cannot find %s Tx datapath", sa->dp_tx_name); + SFC_LOG(sa, RTE_LOG_ERR, logtype_main, + "cannot find %s Tx datapath", sa->dp_tx_name); rc = ENOENT; goto fail_dp_tx; } if (~dp_tx->features & SFC_DP_TX_FEAT_MULTI_PROCESS) { - sfc_err(sa, "%s Tx datapath does not support multi-process", + SFC_LOG(sa, RTE_LOG_ERR, logtype_main, + "%s Tx datapath does not support multi-process", sa->dp_tx_name); rc = EINVAL; goto fail_dp_tx_multi_process; @@ -1955,27 +1959,30 @@ sfc_eth_dev_init(struct rte_eth_dev *dev) { struct sfc_adapter *sa = dev->data->dev_private; struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); + uint32_t logtype_main; int rc; const efx_nic_cfg_t *encp; const struct ether_addr *from; sfc_register_dp(); + logtype_main = sfc_register_logtype(&pci_dev->addr, + SFC_LOGTYPE_MAIN_STR, + RTE_LOG_NOTICE); + if (rte_eal_process_type() != RTE_PROC_PRIMARY) - return -sfc_eth_dev_secondary_set_ops(dev); + return -sfc_eth_dev_secondary_set_ops(dev, logtype_main); /* Required for logging */ sa->pci_addr = pci_dev->addr; sa->port_id = dev->data->port_id; + sa->logtype_main = logtype_main; sa->eth_dev = dev; /* Copy PCI device info to the dev->data */ rte_eth_copy_pci_info(dev, pci_dev); - sa->logtype_main = sfc_register_logtype(sa, SFC_LOGTYPE_MAIN_STR, - RTE_LOG_NOTICE); - rc = sfc_kvargs_parse(sa); if (rc != 0) goto fail_kvargs_parse; diff --git a/drivers/net/sfc/sfc_mcdi.c b/drivers/net/sfc/sfc_mcdi.c index 007506b4e..e485e07d6 100644 --- a/drivers/net/sfc/sfc_mcdi.c +++ b/drivers/net/sfc/sfc_mcdi.c @@ -256,7 +256,8 @@ sfc_mcdi_init(struct sfc_adapter *sa) if (rc != 0) goto fail_dma_alloc; - mcdi->logtype = sfc_register_logtype(sa, SFC_LOGTYPE_MCDI_STR, + mcdi->logtype = sfc_register_logtype(&sa->pci_addr, + SFC_LOGTYPE_MCDI_STR, RTE_LOG_NOTICE); emtp = &mcdi->transport; From patchwork Thu Feb 7 12:17:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50168 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id D505D1B4DD; Thu, 7 Feb 2019 13:18:25 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 6DFFF1B4B6 for ; Thu, 7 Feb 2019 13:18:14 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 5B769600057 for ; Thu, 7 Feb 2019 12:18:13 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:09 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:09 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI8td013207 for ; Thu, 7 Feb 2019 12:18:08 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 3B4E61613EB for ; Thu, 7 Feb 2019 12:18:08 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:27 +0000 Message-ID: <1549541873-17403-5-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: Yes-6.784900-4.000000-11 X-TMASE-MatchedRID: w0BN55yLmNxKwmT1RH0TueEbUg4xvs+wSoCG4sefl8Qs/uUAk6xP7Ipb wG9fIuIThcnOL9mKiCagr80CieZqSo0GdWKgGbBhHcQQBuf4ZFuVCVhDx8tWMze7GDxzhb0QMCm LSFOvZt1tMbP5CeY5H80XtYxjZtjK+OKKp3hkzQjk7k9yXJiqqm5N71UY7eq8myiLZetSf8mfop 0ytGwvXiq2rl3dzGQ1Js2BBIj3hlTrbK8FiJhctk+3Oivgj1i39jox0c5HuN10j2YHrLbl7TmTU IrjEmPu8rCT1hjBM4QpewbKMkSUvP7xRxritJwoS4W/MRhJ1X4= X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 11-6.784900-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541894-b6D0fL3ogSpZ Subject: [dpdk-dev] [PATCH 04/30] net/sfc: avoid usage of RxQ control structure in info get 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" RxQ control structure contains primary process only data and will become primary process only. RxQ info get is supported in secondary process. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc_ethdev.c | 7 ++----- drivers/net/sfc/sfc_rx.c | 10 +++++----- drivers/net/sfc/sfc_rx.h | 4 ++-- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 10e032400..da697c134 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -1067,18 +1067,15 @@ sfc_rx_queue_info_get(struct rte_eth_dev *dev, uint16_t rx_queue_id, { struct sfc_adapter *sa = dev->data->dev_private; struct sfc_rxq_info *rxq_info; - struct sfc_rxq *rxq; sfc_adapter_lock(sa); SFC_ASSERT(rx_queue_id < sa->rxq_count); rxq_info = &sa->rxq_info[rx_queue_id]; - rxq = rxq_info->rxq; - SFC_ASSERT(rxq != NULL); - qinfo->mp = rxq->refill_mb_pool; - qinfo->conf.rx_free_thresh = rxq->refill_threshold; + qinfo->mp = rxq_info->refill_mb_pool; + qinfo->conf.rx_free_thresh = rxq_info->refill_threshold; qinfo->conf.rx_drop_en = 1; qinfo->conf.rx_deferred_start = rxq_info->deferred_start; qinfo->conf.offloads = dev->data->dev_conf.rxmode.offloads; diff --git a/drivers/net/sfc/sfc_rx.c b/drivers/net/sfc/sfc_rx.c index c792e0b2e..dcccb96b1 100644 --- a/drivers/net/sfc/sfc_rx.c +++ b/drivers/net/sfc/sfc_rx.c @@ -688,7 +688,7 @@ sfc_rx_qstart(struct sfc_adapter *sa, unsigned int sw_index) rxq_info->type_flags, evq->common, &rxq->common); break; case EFX_RXQ_TYPE_ES_SUPER_BUFFER: { - struct rte_mempool *mp = rxq->refill_mb_pool; + struct rte_mempool *mp = rxq_info->refill_mb_pool; struct rte_mempool_info mp_info; rc = rte_mempool_ops_get_info(mp, &mp_info); @@ -1033,9 +1033,9 @@ sfc_rx_qinit(struct sfc_adapter *sa, unsigned int sw_index, rxq->evq = evq; rxq->hw_index = sw_index; - rxq->refill_threshold = + rxq_info->refill_threshold = RTE_MAX(rx_conf->rx_free_thresh, SFC_RX_REFILL_BULK); - rxq->refill_mb_pool = mb_pool; + rxq_info->refill_mb_pool = mb_pool; rxq->buf_size = buf_size; rc = sfc_dma_alloc(sa, "rxq", sw_index, EFX_RXQ_SIZE(rxq_info->entries), @@ -1044,9 +1044,9 @@ sfc_rx_qinit(struct sfc_adapter *sa, unsigned int sw_index, goto fail_dma_alloc; memset(&info, 0, sizeof(info)); - info.refill_mb_pool = rxq->refill_mb_pool; + info.refill_mb_pool = rxq_info->refill_mb_pool; info.max_fill_level = rxq_max_fill_level; - info.refill_threshold = rxq->refill_threshold; + info.refill_threshold = rxq_info->refill_threshold; info.buf_size = buf_size; info.batch_max = encp->enc_rx_batch_max; info.prefix_size = encp->enc_rx_prefix_size; diff --git a/drivers/net/sfc/sfc_rx.h b/drivers/net/sfc/sfc_rx.h index 3fba7d8ac..7231379a6 100644 --- a/drivers/net/sfc/sfc_rx.h +++ b/drivers/net/sfc/sfc_rx.h @@ -58,8 +58,6 @@ struct sfc_rxq { efx_rxq_t *common; efsys_mem_t mem; unsigned int hw_index; - unsigned int refill_threshold; - struct rte_mempool *refill_mb_pool; uint16_t buf_size; struct sfc_dp_rxq *dp; unsigned int state; @@ -128,6 +126,8 @@ struct sfc_rxq_info { struct sfc_rxq *rxq; boolean_t deferred_start; boolean_t deferred_started; + unsigned int refill_threshold; + struct rte_mempool *refill_mb_pool; }; int sfc_rx_configure(struct sfc_adapter *sa); From patchwork Thu Feb 7 12:17:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50166 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 836601B4C1; Thu, 7 Feb 2019 13:18:22 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 332681B4B0 for ; Thu, 7 Feb 2019 13:18:14 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 08A0260005B for ; Thu, 7 Feb 2019 12:18:13 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:09 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:09 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI86O013210 for ; Thu, 7 Feb 2019 12:18:08 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 484431613E4 for ; Thu, 7 Feb 2019 12:18:08 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:28 +0000 Message-ID: <1549541873-17403-6-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-6.580800-4.000000-10 X-TMASE-MatchedRID: 8NOTHFHnrRlKwmT1RH0TueEbUg4xvs+wSjyMfjCRfaPny/syo1tPD6Ym f3n26fzqyQX9SM+DhXmHc7WCfeefFkN64DZ+6OgVDB+ErBr0bAPEoDEGChh7CXaMP8m6qk6SgST /J9Kk1nHE5Ckw2lIjSd/OaZPtLimjGAS4UVZrvjZN3UUbIf4esn0tCKdnhB589yM15V5aWpj6C0 ePs7A07U9hWalM11QasKX8eVaVO7IpfJBHIPIZnJ13MMdv+1U4o9X7jZKvbplWXGvUUmKP2w== X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--6.580800-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541893-wDuSsYe7xM-0 Subject: [dpdk-dev] [PATCH 05/30] net/sfc: avoid usage of TxQ control structure in info get 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" TxQ control structure contains primary process only data and will become primary process only. TxQ info get is supported in secondary process. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc.c | 2 +- drivers/net/sfc/sfc_ethdev.c | 5 ++--- drivers/net/sfc/sfc_tx.c | 16 ++++++++-------- drivers/net/sfc/sfc_tx.h | 4 ++-- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/drivers/net/sfc/sfc.c b/drivers/net/sfc/sfc.c index 0d7311d68..bead373ea 100644 --- a/drivers/net/sfc/sfc.c +++ b/drivers/net/sfc/sfc.c @@ -281,7 +281,7 @@ sfc_set_fw_subvariant(struct sfc_adapter *sa) struct sfc_txq_info *txq_info = &sa->txq_info[txq_index]; if (txq_info->txq != NULL) - tx_offloads |= txq_info->txq->offloads; + tx_offloads |= txq_info->offloads; } if (tx_offloads & (DEV_TX_OFFLOAD_IPV4_CKSUM | diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index da697c134..87a2c9431 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -1104,12 +1104,11 @@ sfc_tx_queue_info_get(struct rte_eth_dev *dev, uint16_t tx_queue_id, SFC_ASSERT(tx_queue_id < sa->txq_count); txq_info = &sa->txq_info[tx_queue_id]; - SFC_ASSERT(txq_info->txq != NULL); memset(qinfo, 0, sizeof(*qinfo)); - qinfo->conf.offloads = txq_info->txq->offloads; - qinfo->conf.tx_free_thresh = txq_info->txq->free_thresh; + qinfo->conf.offloads = txq_info->offloads; + qinfo->conf.tx_free_thresh = txq_info->free_thresh; qinfo->conf.tx_deferred_start = txq_info->deferred_start; qinfo->nb_desc = txq_info->entries; diff --git a/drivers/net/sfc/sfc_tx.c b/drivers/net/sfc/sfc_tx.c index aa73d2642..c3b089fd8 100644 --- a/drivers/net/sfc/sfc_tx.c +++ b/drivers/net/sfc/sfc_tx.c @@ -168,10 +168,10 @@ sfc_tx_qinit(struct sfc_adapter *sa, unsigned int sw_index, txq->hw_index = sw_index; txq->evq = evq; - txq->free_thresh = + txq_info->free_thresh = (tx_conf->tx_free_thresh) ? tx_conf->tx_free_thresh : SFC_TX_DEFAULT_FREE_THRESH; - txq->offloads = offloads; + txq_info->offloads = offloads; rc = sfc_dma_alloc(sa, "txq", sw_index, EFX_TXQ_SIZE(txq_info->entries), socket_id, &txq->mem); @@ -180,7 +180,7 @@ sfc_tx_qinit(struct sfc_adapter *sa, unsigned int sw_index, memset(&info, 0, sizeof(info)); info.max_fill_level = txq_max_fill_level; - info.free_thresh = txq->free_thresh; + info.free_thresh = txq_info->free_thresh; info.offloads = offloads; info.txq_entries = txq_info->entries; info.dma_desc_size_max = encp->enc_tx_dma_desc_size_max; @@ -434,21 +434,21 @@ sfc_tx_qstart(struct sfc_adapter *sa, unsigned int sw_index) if (rc != 0) goto fail_ev_qstart; - if (txq->offloads & DEV_TX_OFFLOAD_IPV4_CKSUM) + if (txq_info->offloads & DEV_TX_OFFLOAD_IPV4_CKSUM) flags |= EFX_TXQ_CKSUM_IPV4; - if (txq->offloads & DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM) + if (txq_info->offloads & DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM) flags |= EFX_TXQ_CKSUM_INNER_IPV4; - if ((txq->offloads & DEV_TX_OFFLOAD_TCP_CKSUM) || - (txq->offloads & DEV_TX_OFFLOAD_UDP_CKSUM)) { + if ((txq_info->offloads & DEV_TX_OFFLOAD_TCP_CKSUM) || + (txq_info->offloads & DEV_TX_OFFLOAD_UDP_CKSUM)) { flags |= EFX_TXQ_CKSUM_TCPUDP; if (offloads_supported & DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM) flags |= EFX_TXQ_CKSUM_INNER_TCPUDP; } - if (txq->offloads & DEV_TX_OFFLOAD_TCP_TSO) + if (txq_info->offloads & DEV_TX_OFFLOAD_TCP_TSO) flags |= EFX_TXQ_FATSOV2; rc = efx_tx_qcreate(sa->nic, txq->hw_index, 0, &txq->mem, diff --git a/drivers/net/sfc/sfc_tx.h b/drivers/net/sfc/sfc_tx.h index 146b805ca..efb486d32 100644 --- a/drivers/net/sfc/sfc_tx.h +++ b/drivers/net/sfc/sfc_tx.h @@ -57,8 +57,6 @@ struct sfc_txq { efsys_mem_t mem; struct sfc_dp_txq *dp; efx_txq_t *common; - unsigned int free_thresh; - uint64_t offloads; }; static inline unsigned int @@ -113,6 +111,8 @@ struct sfc_txq_info { struct sfc_txq *txq; boolean_t deferred_start; boolean_t deferred_started; + unsigned int free_thresh; + uint64_t offloads; }; int sfc_tx_configure(struct sfc_adapter *sa); From patchwork Thu Feb 7 12:17:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50170 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 70E781B4E9; Thu, 7 Feb 2019 13:18:28 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 121351B4AF for ; Thu, 7 Feb 2019 13:18:15 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id AF174600057 for ; Thu, 7 Feb 2019 12:18:13 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:09 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:09 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI8tb013217 for ; Thu, 7 Feb 2019 12:18:08 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 553321613ED for ; Thu, 7 Feb 2019 12:18:08 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:29 +0000 Message-ID: <1549541873-17403-7-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-1.683300-4.000000-10 X-TMASE-MatchedRID: b602RmutDtHl45tYrNr2LUf49ONH0RaSSjyMfjCRfaPfUZT83lbkEK1r wNdVdYiphcnOL9mKiCalyH+LgJssgYbzTO6asfbjt1AhvyEKdj6vvh7pqacPxjFidTBRWb28OJo zVvs5N6Hi8zVgXoAltsIJ+4gwXrEtKsmEtKMlFWbE96C6spOjALc3aRtdAX970/RyN05C7T4SAL a9PJ21gMTRZw8hLeGKSCIhtrTD0pNy3hQOAmMb26EYlVDQzHYUWD4biWWzNyCqFrt9xUgp+uq+T 0IcdvQ1BtPt5WQTZkLauEQaIW46K4YinWuMIb+inqg/VrSZEiM= X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10-1.683300-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541894-UAAjzLZ2KDku Subject: [dpdk-dev] [PATCH 06/30] net/sfc: remove wrappers around Rx descriptor count and done 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" These wrappers are used in single place and just complicate reading and understanding if these ops could be supported in secondary process. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc_ethdev.c | 12 ++++++++++-- drivers/net/sfc/sfc_rx.c | 22 ---------------------- drivers/net/sfc/sfc_rx.h | 4 ---- 3 files changed, 10 insertions(+), 28 deletions(-) diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 87a2c9431..36dc580ae 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -1119,16 +1119,24 @@ static uint32_t sfc_rx_queue_count(struct rte_eth_dev *dev, uint16_t rx_queue_id) { struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_rxq *rxq; + + SFC_ASSERT(rx_queue_id < sa->rxq_count); + rxq = sa->rxq_info[rx_queue_id].rxq; - return sfc_rx_qdesc_npending(sa, rx_queue_id); + if (rxq == NULL || (rxq->state & SFC_RXQ_STARTED) == 0) + return 0; + + return sa->dp_rx->qdesc_npending(rxq->dp); } static int sfc_rx_descriptor_done(void *queue, uint16_t offset) { struct sfc_dp_rxq *dp_rxq = queue; + struct sfc_rxq *rxq = sfc_rxq_by_dp_rxq(dp_rxq); - return sfc_rx_qdesc_done(dp_rxq, offset); + return offset < rxq->evq->sa->dp_rx->qdesc_npending(dp_rxq); } static int diff --git a/drivers/net/sfc/sfc_rx.c b/drivers/net/sfc/sfc_rx.c index dcccb96b1..44aee29e9 100644 --- a/drivers/net/sfc/sfc_rx.c +++ b/drivers/net/sfc/sfc_rx.c @@ -530,28 +530,6 @@ struct sfc_dp_rx sfc_efx_rx = { .pkt_burst = sfc_efx_recv_pkts, }; -unsigned int -sfc_rx_qdesc_npending(struct sfc_adapter *sa, unsigned int sw_index) -{ - struct sfc_rxq *rxq; - - SFC_ASSERT(sw_index < sa->rxq_count); - rxq = sa->rxq_info[sw_index].rxq; - - if (rxq == NULL || (rxq->state & SFC_RXQ_STARTED) == 0) - return 0; - - return sa->dp_rx->qdesc_npending(rxq->dp); -} - -int -sfc_rx_qdesc_done(struct sfc_dp_rxq *dp_rxq, unsigned int offset) -{ - struct sfc_rxq *rxq = sfc_rxq_by_dp_rxq(dp_rxq); - - return offset < rxq->evq->sa->dp_rx->qdesc_npending(dp_rxq); -} - static void sfc_rx_qflush(struct sfc_adapter *sa, unsigned int sw_index) { diff --git a/drivers/net/sfc/sfc_rx.h b/drivers/net/sfc/sfc_rx.h index 7231379a6..06e8eac8d 100644 --- a/drivers/net/sfc/sfc_rx.h +++ b/drivers/net/sfc/sfc_rx.h @@ -149,10 +149,6 @@ uint64_t sfc_rx_get_queue_offload_caps(struct sfc_adapter *sa); void sfc_rx_qflush_done(struct sfc_rxq *rxq); void sfc_rx_qflush_failed(struct sfc_rxq *rxq); -unsigned int sfc_rx_qdesc_npending(struct sfc_adapter *sa, - unsigned int sw_index); -int sfc_rx_qdesc_done(struct sfc_dp_rxq *dp_rxq, unsigned int offset); - int sfc_rx_hash_init(struct sfc_adapter *sa); void sfc_rx_hash_fini(struct sfc_adapter *sa); int sfc_rx_hf_rte_to_efx(struct sfc_adapter *sa, uint64_t rte, From patchwork Thu Feb 7 12:17:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50167 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 95BC81B4D6; Thu, 7 Feb 2019 13:18:24 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 56D9A1B4AF for ; Thu, 7 Feb 2019 13:18:14 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 31F82600057 for ; Thu, 7 Feb 2019 12:18:13 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:09 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:09 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI8L7013221 for ; Thu, 7 Feb 2019 12:18:08 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 628011613E4 for ; Thu, 7 Feb 2019 12:18:08 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:30 +0000 Message-ID: <1549541873-17403-8-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-1.220400-4.000000-10 X-TMASE-MatchedRID: UFAELJy4t92Ic+vz4Wow0yYRREGYqtmUTJDl9FKHbrm82TV3yRt/mqYm f3n26fzqAwade5BKaDhZ8dIoq+XBRYh1eqwd24JQYwaJXrf2IXTGYnoF/CTeZZsoi2XrUn/Jn6K dMrRsL14qtq5d3cxkNUrJnk8Tj/KR2T0Vj7hHXlFK9H5ESthoOzLBzTU+2otENxztDcXp3qMbqi 4bv1WErwOWGkF9QNFXvZi/zRe1L0IjCELN0+ElYJcKmKwj4x3aI6KkAL2A5kcMtYrw9BuTwqSmS PRgKSZMuowvJdIWQm5DDKa3G4nrLQ== X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--1.220400-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541893-dY7njkWGwj4u Subject: [dpdk-dev] [PATCH 07/30] net/sfc: make it simpler to change datapath ops location 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" Rx and Tx datapath ops should be stored in process private data since these structures are located in the data section (not allocated from shared memory). Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc_ethdev.c | 38 ++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 36dc580ae..f49a1073a 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -1735,6 +1735,8 @@ static int sfc_eth_dev_set_ops(struct rte_eth_dev *dev) { struct sfc_adapter *sa = dev->data->dev_private; + const struct sfc_dp_rx *dp_rx; + const struct sfc_dp_tx *dp_tx; const efx_nic_cfg_t *encp; unsigned int avail_caps = 0; const char *rx_name = NULL; @@ -1761,13 +1763,13 @@ sfc_eth_dev_set_ops(struct rte_eth_dev *dev) goto fail_kvarg_rx_datapath; if (rx_name != NULL) { - sa->dp_rx = sfc_dp_find_rx_by_name(&sfc_dp_head, rx_name); - if (sa->dp_rx == NULL) { + dp_rx = sfc_dp_find_rx_by_name(&sfc_dp_head, rx_name); + if (dp_rx == NULL) { sfc_err(sa, "Rx datapath %s not found", rx_name); rc = ENOENT; goto fail_dp_rx; } - if (!sfc_dp_match_hw_fw_caps(&sa->dp_rx->dp, avail_caps)) { + if (!sfc_dp_match_hw_fw_caps(&dp_rx->dp, avail_caps)) { sfc_err(sa, "Insufficient Hw/FW capabilities to use Rx datapath %s", rx_name); @@ -1775,8 +1777,8 @@ sfc_eth_dev_set_ops(struct rte_eth_dev *dev) goto fail_dp_rx_caps; } } else { - sa->dp_rx = sfc_dp_find_rx_by_caps(&sfc_dp_head, avail_caps); - if (sa->dp_rx == NULL) { + dp_rx = sfc_dp_find_rx_by_caps(&sfc_dp_head, avail_caps); + if (dp_rx == NULL) { sfc_err(sa, "Rx datapath by caps %#x not found", avail_caps); rc = ENOENT; @@ -1784,7 +1786,7 @@ sfc_eth_dev_set_ops(struct rte_eth_dev *dev) } } - sa->dp_rx_name = sfc_strdup(sa->dp_rx->dp.name); + sa->dp_rx_name = sfc_strdup(dp_rx->dp.name); if (sa->dp_rx_name == NULL) { rc = ENOMEM; goto fail_dp_rx_name; @@ -1792,21 +1794,19 @@ sfc_eth_dev_set_ops(struct rte_eth_dev *dev) sfc_notice(sa, "use %s Rx datapath", sa->dp_rx_name); - dev->rx_pkt_burst = sa->dp_rx->pkt_burst; - rc = sfc_kvargs_process(sa, SFC_KVARG_TX_DATAPATH, sfc_kvarg_string_handler, &tx_name); if (rc != 0) goto fail_kvarg_tx_datapath; if (tx_name != NULL) { - sa->dp_tx = sfc_dp_find_tx_by_name(&sfc_dp_head, tx_name); - if (sa->dp_tx == NULL) { + dp_tx = sfc_dp_find_tx_by_name(&sfc_dp_head, tx_name); + if (dp_tx == NULL) { sfc_err(sa, "Tx datapath %s not found", tx_name); rc = ENOENT; goto fail_dp_tx; } - if (!sfc_dp_match_hw_fw_caps(&sa->dp_tx->dp, avail_caps)) { + if (!sfc_dp_match_hw_fw_caps(&dp_tx->dp, avail_caps)) { sfc_err(sa, "Insufficient Hw/FW capabilities to use Tx datapath %s", tx_name); @@ -1814,8 +1814,8 @@ sfc_eth_dev_set_ops(struct rte_eth_dev *dev) goto fail_dp_tx_caps; } } else { - sa->dp_tx = sfc_dp_find_tx_by_caps(&sfc_dp_head, avail_caps); - if (sa->dp_tx == NULL) { + dp_tx = sfc_dp_find_tx_by_caps(&sfc_dp_head, avail_caps); + if (dp_tx == NULL) { sfc_err(sa, "Tx datapath by caps %#x not found", avail_caps); rc = ENOENT; @@ -1823,7 +1823,7 @@ sfc_eth_dev_set_ops(struct rte_eth_dev *dev) } } - sa->dp_tx_name = sfc_strdup(sa->dp_tx->dp.name); + sa->dp_tx_name = sfc_strdup(dp_tx->dp.name); if (sa->dp_tx_name == NULL) { rc = ENOMEM; goto fail_dp_tx_name; @@ -1831,7 +1831,11 @@ sfc_eth_dev_set_ops(struct rte_eth_dev *dev) sfc_notice(sa, "use %s Tx datapath", sa->dp_tx_name); - dev->tx_pkt_burst = sa->dp_tx->pkt_burst; + sa->dp_rx = dp_rx; + sa->dp_tx = dp_tx; + + dev->rx_pkt_burst = dp_rx->pkt_burst; + dev->tx_pkt_burst = dp_tx->pkt_burst; dev->dev_ops = &sfc_eth_dev_ops; @@ -1839,8 +1843,6 @@ sfc_eth_dev_set_ops(struct rte_eth_dev *dev) fail_dp_tx_name: fail_dp_tx_caps: - sa->dp_tx = NULL; - fail_dp_tx: fail_kvarg_tx_datapath: rte_free(sa->dp_rx_name); @@ -1848,8 +1850,6 @@ sfc_eth_dev_set_ops(struct rte_eth_dev *dev) fail_dp_rx_name: fail_dp_rx_caps: - sa->dp_rx = NULL; - fail_dp_rx: fail_kvarg_rx_datapath: return rc; From patchwork Thu Feb 7 12:17:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50171 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id AC1561B4EE; Thu, 7 Feb 2019 13:18:29 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 28B881B4B5 for ; Thu, 7 Feb 2019 13:18:15 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 84E99600067 for ; Thu, 7 Feb 2019 12:18:13 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:10 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:09 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI8n8013226 for ; Thu, 7 Feb 2019 12:18:08 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 6FD281613EB for ; Thu, 7 Feb 2019 12:18:08 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:31 +0000 Message-ID: <1549541873-17403-9-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-9.126600-4.000000-10 X-TMASE-MatchedRID: 9DtNOpOaDR8o64784+PXYhWCVBr+Ay98SoCG4sefl8Qs/uUAk6xP7NYI JSW5nrITjTAgo9OJRgVIcaw79h4a2EILcl5xUj1WDB+ErBr0bAPt/okBLaEo+E1KG1YrOQW/RDL xu3JRGrTNH2aBPej3yfOubpws5cPpAgPLSTo3umccsSroYI5AVmeCuKOf7fb1CgNjqBgJU5P5r/ N0c4ndaR3/06bOxIpgUDzJkjdTduADOqKd7r6zB7dQIb8hCnY+kZs6eeBnIM3pPECXwkmdkYNWk 9nhbJx/uloKsxl1w7TE0KAN7cl+5I0GdWKgGbBhpvwZ9GmdwDPwZGE/+dMc1qMP1fF+gQ2Oymn7 YQ8v1Om3iatEqGkBbAt1FbTRkWhlFII+ATBNwhKO0rt0LpQGeVPgO2JKQydY/NpLPdn/hpr5hKl gHqir+tp9a0LxKCm8aq5WvEbO0CUfdZs7fJ18wgs9VkfCh3uAD6C/6wX1l2K5vQ50gIH+iuGZhE v9wwOJGzCRAO5zGPXzNThJ4wFK7fL1YiTdLz7jM5vhCMb51Y9/r8x3wtvaX/lQZt0pYkhro8WMk QWv6iXBcIE78YqRWo6HM5rqDwqtFEtvPAaC1idpMD1EgzpXZNQySOyfsSgtX2Jq4goed9aNITIM nC4r1UMMprcbiest X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--9.126600-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541894-QY--BdTCTbhW Subject: [dpdk-dev] [PATCH 08/30] net/sfc: move datapath ops pointers to process private data 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" The change is required to support datapath-dependent device operations for secondary process. It is just a step in the direction. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc.c | 2 +- drivers/net/sfc/sfc.h | 24 +++++++++++-- drivers/net/sfc/sfc_ethdev.c | 68 ++++++++++++++++++++++++++---------- drivers/net/sfc/sfc_ev.c | 18 +++++----- drivers/net/sfc/sfc_flow.c | 2 +- drivers/net/sfc/sfc_rx.c | 30 ++++++++-------- drivers/net/sfc/sfc_tx.c | 26 +++++++------- 7 files changed, 112 insertions(+), 58 deletions(-) diff --git a/drivers/net/sfc/sfc.c b/drivers/net/sfc/sfc.c index bead373ea..63bc0a568 100644 --- a/drivers/net/sfc/sfc.c +++ b/drivers/net/sfc/sfc.c @@ -727,7 +727,7 @@ sfc_attach(struct sfc_adapter *sa) encp = efx_nic_cfg_get(sa->nic); - if (sa->dp_tx->features & SFC_DP_TX_FEAT_TSO) { + if (sa->priv.dp_tx->features & SFC_DP_TX_FEAT_TSO) { sa->tso = encp->enc_fw_assisted_tso_v2_enabled; if (!sa->tso) sfc_warn(sa, diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h index f1cb83002..5c836b1c3 100644 --- a/drivers/net/sfc/sfc.h +++ b/drivers/net/sfc/sfc.h @@ -171,8 +171,30 @@ struct sfc_rss { uint8_t key[EFX_RSS_KEY_SIZE]; }; +/* Adapter process private data */ +struct sfc_adapter_priv { + const struct sfc_dp_rx *dp_rx; + const struct sfc_dp_tx *dp_tx; +}; + +static inline struct sfc_adapter_priv * +sfc_adapter_priv_by_eth_dev(struct rte_eth_dev *eth_dev) +{ + struct sfc_adapter_priv *sap = eth_dev->process_private; + + SFC_ASSERT(sap != NULL); + return sap; +} + /* Adapter private data */ struct sfc_adapter { + /* + * It must be the first field of the sfc_adapter structure since + * sfc_adapter is the primary process private data (i.e. process + * private data plus additional primary process specific data). + */ + struct sfc_adapter_priv priv; + /* * PMD setup and configuration is not thread safe. Since it is not * performance sensitive, it is better to guarantee thread-safety @@ -249,14 +271,12 @@ struct sfc_adapter { * the secondary process to find Rx datapath to be used. */ char *dp_rx_name; - const struct sfc_dp_rx *dp_rx; /* * Shared memory copy of the Tx datapath name to be used by * the secondary process to find Tx datapath to be used. */ char *dp_tx_name; - const struct sfc_dp_tx *dp_tx; }; /* diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index f49a1073a..46cd36fa5 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -84,6 +84,7 @@ sfc_fw_version_get(struct rte_eth_dev *dev, char *fw_version, size_t fw_size) static void sfc_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) { + const struct sfc_adapter_priv *sap = sfc_adapter_priv_by_eth_dev(dev); struct sfc_adapter *sa = dev->data->dev_private; struct sfc_rss *rss = &sa->rss; uint64_t txq_offloads_def = 0; @@ -167,10 +168,10 @@ sfc_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) */ dev_info->tx_desc_lim.nb_align = EFX_TXQ_MINNDESCS; - if (sa->dp_rx->get_dev_info != NULL) - sa->dp_rx->get_dev_info(dev_info); - if (sa->dp_tx->get_dev_info != NULL) - sa->dp_tx->get_dev_info(dev_info); + if (sap->dp_rx->get_dev_info != NULL) + sap->dp_rx->get_dev_info(dev_info); + if (sap->dp_tx->get_dev_info != NULL) + sap->dp_tx->get_dev_info(dev_info); dev_info->dev_capa = RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP | RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP; @@ -179,11 +180,12 @@ sfc_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) static const uint32_t * sfc_dev_supported_ptypes_get(struct rte_eth_dev *dev) { + const struct sfc_adapter_priv *sap = sfc_adapter_priv_by_eth_dev(dev); struct sfc_adapter *sa = dev->data->dev_private; const efx_nic_cfg_t *encp = efx_nic_cfg_get(sa->nic); uint32_t tunnel_encaps = encp->enc_tunnel_encapsulations_supported; - return sa->dp_rx->supported_ptypes_get(tunnel_encaps); + return sap->dp_rx->supported_ptypes_get(tunnel_encaps); } static int @@ -1118,6 +1120,7 @@ sfc_tx_queue_info_get(struct rte_eth_dev *dev, uint16_t tx_queue_id, static uint32_t sfc_rx_queue_count(struct rte_eth_dev *dev, uint16_t rx_queue_id) { + const struct sfc_adapter_priv *sap = sfc_adapter_priv_by_eth_dev(dev); struct sfc_adapter *sa = dev->data->dev_private; struct sfc_rxq *rxq; @@ -1127,7 +1130,7 @@ sfc_rx_queue_count(struct rte_eth_dev *dev, uint16_t rx_queue_id) if (rxq == NULL || (rxq->state & SFC_RXQ_STARTED) == 0) return 0; - return sa->dp_rx->qdesc_npending(rxq->dp); + return sap->dp_rx->qdesc_npending(rxq->dp); } static int @@ -1136,7 +1139,7 @@ sfc_rx_descriptor_done(void *queue, uint16_t offset) struct sfc_dp_rxq *dp_rxq = queue; struct sfc_rxq *rxq = sfc_rxq_by_dp_rxq(dp_rxq); - return offset < rxq->evq->sa->dp_rx->qdesc_npending(dp_rxq); + return offset < rxq->evq->sa->priv.dp_rx->qdesc_npending(dp_rxq); } static int @@ -1145,7 +1148,7 @@ sfc_rx_descriptor_status(void *queue, uint16_t offset) struct sfc_dp_rxq *dp_rxq = queue; struct sfc_rxq *rxq = sfc_rxq_by_dp_rxq(dp_rxq); - return rxq->evq->sa->dp_rx->qdesc_status(dp_rxq, offset); + return rxq->evq->sa->priv.dp_rx->qdesc_status(dp_rxq, offset); } static int @@ -1154,7 +1157,7 @@ sfc_tx_descriptor_status(void *queue, uint16_t offset) struct sfc_dp_txq *dp_txq = queue; struct sfc_txq *txq = sfc_txq_by_dp_txq(dp_txq); - return txq->evq->sa->dp_tx->qdesc_status(dp_txq, offset); + return txq->evq->sa->priv.dp_tx->qdesc_status(dp_txq, offset); } static int @@ -1645,16 +1648,16 @@ sfc_dev_filter_ctrl(struct rte_eth_dev *dev, enum rte_filter_type filter_type, static int sfc_pool_ops_supported(struct rte_eth_dev *dev, const char *pool) { - struct sfc_adapter *sa = dev->data->dev_private; + const struct sfc_adapter_priv *sap = sfc_adapter_priv_by_eth_dev(dev); /* * If Rx datapath does not provide callback to check mempool, * all pools are supported. */ - if (sa->dp_rx->pool_ops_supported == NULL) + if (sap->dp_rx->pool_ops_supported == NULL) return 1; - return sa->dp_rx->pool_ops_supported(pool); + return sap->dp_rx->pool_ops_supported(pool); } static const struct eth_dev_ops sfc_eth_dev_ops = { @@ -1831,8 +1834,8 @@ sfc_eth_dev_set_ops(struct rte_eth_dev *dev) sfc_notice(sa, "use %s Tx datapath", sa->dp_tx_name); - sa->dp_rx = dp_rx; - sa->dp_tx = dp_tx; + sa->priv.dp_rx = dp_rx; + sa->priv.dp_tx = dp_tx; dev->rx_pkt_burst = dp_rx->pkt_burst; dev->tx_pkt_burst = dp_tx->pkt_burst; @@ -1866,11 +1869,11 @@ sfc_eth_dev_clear_ops(struct rte_eth_dev *dev) rte_free(sa->dp_tx_name); sa->dp_tx_name = NULL; - sa->dp_tx = NULL; + sa->priv.dp_tx = NULL; rte_free(sa->dp_rx_name); sa->dp_rx_name = NULL; - sa->dp_rx = NULL; + sa->priv.dp_rx = NULL; } static const struct eth_dev_ops sfc_eth_dev_secondary_ops = { @@ -1879,7 +1882,7 @@ static const struct eth_dev_ops sfc_eth_dev_secondary_ops = { }; static int -sfc_eth_dev_secondary_set_ops(struct rte_eth_dev *dev, uint32_t logtype_main) +sfc_eth_dev_secondary_init(struct rte_eth_dev *dev, uint32_t logtype_main) { /* * Device private data has really many process-local pointers. @@ -1887,10 +1890,21 @@ sfc_eth_dev_secondary_set_ops(struct rte_eth_dev *dev, uint32_t logtype_main) * in shared memory only. */ struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter_priv *sap; const struct sfc_dp_rx *dp_rx; const struct sfc_dp_tx *dp_tx; int rc; + /* + * Allocate process private data from heap, since it should not + * be located in shared memory allocated using rte_malloc() API. + */ + sap = calloc(1, sizeof(*sap)); + if (sap == NULL) { + rc = ENOMEM; + goto fail_alloc_priv; + } + dp_rx = sfc_dp_find_rx_by_name(&sfc_dp_head, sa->dp_rx_name); if (dp_rx == NULL) { SFC_LOG(sa, RTE_LOG_ERR, logtype_main, @@ -1921,6 +1935,10 @@ sfc_eth_dev_secondary_set_ops(struct rte_eth_dev *dev, uint32_t logtype_main) goto fail_dp_tx_multi_process; } + sap->dp_rx = dp_rx; + sap->dp_tx = dp_tx; + + dev->process_private = sap; dev->rx_pkt_burst = dp_rx->pkt_burst; dev->tx_pkt_burst = dp_tx->pkt_burst; dev->dev_ops = &sfc_eth_dev_secondary_ops; @@ -1931,12 +1949,17 @@ sfc_eth_dev_secondary_set_ops(struct rte_eth_dev *dev, uint32_t logtype_main) fail_dp_tx: fail_dp_rx_multi_process: fail_dp_rx: + free(sap); + +fail_alloc_priv: return rc; } static void sfc_eth_dev_secondary_clear_ops(struct rte_eth_dev *dev) { + free(dev->process_private); + dev->process_private = NULL; dev->dev_ops = NULL; dev->tx_pkt_burst = NULL; dev->rx_pkt_burst = NULL; @@ -1975,7 +1998,15 @@ sfc_eth_dev_init(struct rte_eth_dev *dev) RTE_LOG_NOTICE); if (rte_eal_process_type() != RTE_PROC_PRIMARY) - return -sfc_eth_dev_secondary_set_ops(dev, logtype_main); + return -sfc_eth_dev_secondary_init(dev, logtype_main); + + /* + * sfc_adapter is a mixture of shared and process private data. + * During transition period use it in both kinds. When the + * driver becomes ready to separate it, sfc_adapter will become + * primary process private only. + */ + dev->process_private = sa; /* Required for logging */ sa->pci_addr = pci_dev->addr; @@ -2048,6 +2079,7 @@ sfc_eth_dev_init(struct rte_eth_dev *dev) fail_kvargs_parse: sfc_log_init(sa, "failed %d", rc); + dev->process_private = NULL; SFC_ASSERT(rc > 0); return -rc; } diff --git a/drivers/net/sfc/sfc_ev.c b/drivers/net/sfc/sfc_ev.c index f93d30e5c..717835cab 100644 --- a/drivers/net/sfc/sfc_ev.c +++ b/drivers/net/sfc/sfc_ev.c @@ -158,8 +158,8 @@ sfc_ev_dp_rx(void *arg, __rte_unused uint32_t label, uint32_t id, dp_rxq = evq->dp_rxq; SFC_ASSERT(dp_rxq != NULL); - SFC_ASSERT(evq->sa->dp_rx->qrx_ev != NULL); - return evq->sa->dp_rx->qrx_ev(dp_rxq, id); + SFC_ASSERT(evq->sa->priv.dp_rx->qrx_ev != NULL); + return evq->sa->priv.dp_rx->qrx_ev(dp_rxq, id); } static boolean_t @@ -185,8 +185,8 @@ sfc_ev_dp_rx_ps(void *arg, __rte_unused uint32_t label, uint32_t id, dp_rxq = evq->dp_rxq; SFC_ASSERT(dp_rxq != NULL); - if (evq->sa->dp_rx->qrx_ps_ev != NULL) - return evq->sa->dp_rx->qrx_ps_ev(dp_rxq, id); + if (evq->sa->priv.dp_rx->qrx_ps_ev != NULL) + return evq->sa->priv.dp_rx->qrx_ps_ev(dp_rxq, id); else return B_FALSE; } @@ -239,8 +239,8 @@ sfc_ev_dp_tx(void *arg, __rte_unused uint32_t label, uint32_t id) dp_txq = evq->dp_txq; SFC_ASSERT(dp_txq != NULL); - SFC_ASSERT(evq->sa->dp_tx->qtx_ev != NULL); - return evq->sa->dp_tx->qtx_ev(dp_txq, id); + SFC_ASSERT(evq->sa->priv.dp_tx->qtx_ev != NULL); + return evq->sa->priv.dp_tx->qtx_ev(dp_txq, id); } static boolean_t @@ -609,12 +609,14 @@ sfc_ev_qstart(struct sfc_evq *evq, unsigned int hw_index) SFC_ASSERT(evq->dp_rxq == NULL || evq->dp_txq == NULL); if (evq->dp_rxq != 0) { - if (strcmp(sa->dp_rx->dp.name, SFC_KVARG_DATAPATH_EFX) == 0) + if (strcmp(sa->priv.dp_rx->dp.name, + SFC_KVARG_DATAPATH_EFX) == 0) evq->callbacks = &sfc_ev_callbacks_efx_rx; else evq->callbacks = &sfc_ev_callbacks_dp_rx; } else if (evq->dp_txq != 0) { - if (strcmp(sa->dp_tx->dp.name, SFC_KVARG_DATAPATH_EFX) == 0) + if (strcmp(sa->priv.dp_tx->dp.name, + SFC_KVARG_DATAPATH_EFX) == 0) evq->callbacks = &sfc_ev_callbacks_efx_tx; else evq->callbacks = &sfc_ev_callbacks_dp_tx; diff --git a/drivers/net/sfc/sfc_flow.c b/drivers/net/sfc/sfc_flow.c index 371648b0e..41d388735 100644 --- a/drivers/net/sfc/sfc_flow.c +++ b/drivers/net/sfc/sfc_flow.c @@ -1527,7 +1527,7 @@ sfc_flow_parse_actions(struct sfc_adapter *sa, struct rte_flow_error *error) { int rc; - const unsigned int dp_rx_features = sa->dp_rx->features; + const unsigned int dp_rx_features = sa->priv.dp_rx->features; uint32_t actions_set = 0; const uint32_t fate_actions_mask = (1UL << RTE_FLOW_ACTION_TYPE_QUEUE) | (1UL << RTE_FLOW_ACTION_TYPE_RSS) | diff --git a/drivers/net/sfc/sfc_rx.c b/drivers/net/sfc/sfc_rx.c index 44aee29e9..0ee3cfdcd 100644 --- a/drivers/net/sfc/sfc_rx.c +++ b/drivers/net/sfc/sfc_rx.c @@ -581,7 +581,7 @@ sfc_rx_qflush(struct sfc_adapter *sa, unsigned int sw_index) sfc_notice(sa, "RxQ %u flushed", sw_index); } - sa->dp_rx->qpurge(rxq->dp); + sa->priv.dp_rx->qpurge(rxq->dp); } static int @@ -695,7 +695,7 @@ sfc_rx_qstart(struct sfc_adapter *sa, unsigned int sw_index) efx_rx_qenable(rxq->common); - rc = sa->dp_rx->qstart(rxq->dp, evq->read_ptr); + rc = sa->priv.dp_rx->qstart(rxq->dp, evq->read_ptr); if (rc != 0) goto fail_dp_qstart; @@ -714,7 +714,7 @@ sfc_rx_qstart(struct sfc_adapter *sa, unsigned int sw_index) return 0; fail_mac_filter_default_rxq_set: - sa->dp_rx->qstop(rxq->dp, &rxq->evq->read_ptr); + sa->priv.dp_rx->qstop(rxq->dp, &rxq->evq->read_ptr); fail_dp_qstart: sfc_rx_qflush(sa, sw_index); @@ -749,7 +749,7 @@ sfc_rx_qstop(struct sfc_adapter *sa, unsigned int sw_index) sa->eth_dev->data->rx_queue_state[sw_index] = RTE_ETH_QUEUE_STATE_STOPPED; - sa->dp_rx->qstop(rxq->dp, &rxq->evq->read_ptr); + sa->priv.dp_rx->qstop(rxq->dp, &rxq->evq->read_ptr); if (sw_index == 0) efx_mac_filter_default_rxq_clear(sa->nic); @@ -771,14 +771,14 @@ sfc_rx_get_dev_offload_caps(struct sfc_adapter *sa) caps |= DEV_RX_OFFLOAD_JUMBO_FRAME; - if (sa->dp_rx->features & SFC_DP_RX_FEAT_CHECKSUM) { + if (sa->priv.dp_rx->features & SFC_DP_RX_FEAT_CHECKSUM) { caps |= DEV_RX_OFFLOAD_IPV4_CKSUM; caps |= DEV_RX_OFFLOAD_UDP_CKSUM; caps |= DEV_RX_OFFLOAD_TCP_CKSUM; } if (encp->enc_tunnel_encapsulations_supported && - (sa->dp_rx->features & SFC_DP_RX_FEAT_TUNNELS)) + (sa->priv.dp_rx->features & SFC_DP_RX_FEAT_TUNNELS)) caps |= DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM; return caps; @@ -789,7 +789,7 @@ sfc_rx_get_queue_offload_caps(struct sfc_adapter *sa) { uint64_t caps = 0; - if (sa->dp_rx->features & SFC_DP_RX_FEAT_SCATTER) + if (sa->priv.dp_rx->features & SFC_DP_RX_FEAT_SCATTER) caps |= DEV_RX_OFFLOAD_SCATTER; return caps; @@ -943,8 +943,8 @@ sfc_rx_qinit(struct sfc_adapter *sa, unsigned int sw_index, struct sfc_rxq *rxq; struct sfc_dp_rx_qcreate_info info; - rc = sa->dp_rx->qsize_up_rings(nb_rx_desc, mb_pool, &rxq_entries, - &evq_entries, &rxq_max_fill_level); + rc = sa->priv.dp_rx->qsize_up_rings(nb_rx_desc, mb_pool, &rxq_entries, + &evq_entries, &rxq_max_fill_level); if (rc != 0) goto fail_size_up_rings; SFC_ASSERT(rxq_entries >= EFX_RXQ_MINNDESCS); @@ -983,7 +983,7 @@ sfc_rx_qinit(struct sfc_adapter *sa, unsigned int sw_index, SFC_ASSERT(rxq_entries <= rxq_info->max_entries); rxq_info->entries = rxq_entries; - if (sa->dp_rx->dp.hw_fw_caps & SFC_DP_HW_FW_CAP_RX_ES_SUPER_BUFFER) + if (sa->priv.dp_rx->dp.hw_fw_caps & SFC_DP_HW_FW_CAP_RX_ES_SUPER_BUFFER) rxq_info->type = EFX_RXQ_TYPE_ES_SUPER_BUFFER; else rxq_info->type = EFX_RXQ_TYPE_DEFAULT; @@ -993,7 +993,7 @@ sfc_rx_qinit(struct sfc_adapter *sa, unsigned int sw_index, EFX_RXQ_FLAG_SCATTER : EFX_RXQ_FLAG_NONE; if ((encp->enc_tunnel_encapsulations_supported != 0) && - (sa->dp_rx->features & SFC_DP_RX_FEAT_TUNNELS)) + (sa->priv.dp_rx->features & SFC_DP_RX_FEAT_TUNNELS)) rxq_info->type_flags |= EFX_RXQ_FLAG_INNER_CLASSES; rc = sfc_ev_qinit(sa, SFC_EVQ_TYPE_RX, sw_index, @@ -1040,9 +1040,9 @@ sfc_rx_qinit(struct sfc_adapter *sa, unsigned int sw_index, info.mem_bar = sa->mem_bar.esb_base; info.vi_window_shift = encp->enc_vi_window_shift; - rc = sa->dp_rx->qcreate(sa->eth_dev->data->port_id, sw_index, - &RTE_ETH_DEV_TO_PCI(sa->eth_dev)->addr, - socket_id, &info, &rxq->dp); + rc = sa->priv.dp_rx->qcreate(sa->eth_dev->data->port_id, sw_index, + &RTE_ETH_DEV_TO_PCI(sa->eth_dev)->addr, + socket_id, &info, &rxq->dp); if (rc != 0) goto fail_dp_rx_qcreate; @@ -1087,7 +1087,7 @@ sfc_rx_qfini(struct sfc_adapter *sa, unsigned int sw_index) rxq = rxq_info->rxq; SFC_ASSERT(rxq->state == SFC_RXQ_INITIALIZED); - sa->dp_rx->qdestroy(rxq->dp); + sa->priv.dp_rx->qdestroy(rxq->dp); rxq->dp = NULL; rxq_info->rxq = NULL; diff --git a/drivers/net/sfc/sfc_tx.c b/drivers/net/sfc/sfc_tx.c index c3b089fd8..5d31fedbb 100644 --- a/drivers/net/sfc/sfc_tx.c +++ b/drivers/net/sfc/sfc_tx.c @@ -40,15 +40,15 @@ sfc_tx_get_dev_offload_caps(struct sfc_adapter *sa) const efx_nic_cfg_t *encp = efx_nic_cfg_get(sa->nic); uint64_t caps = 0; - if ((sa->dp_tx->features & SFC_DP_TX_FEAT_VLAN_INSERT) && + if ((sa->priv.dp_tx->features & SFC_DP_TX_FEAT_VLAN_INSERT) && encp->enc_hw_tx_insert_vlan_enabled) caps |= DEV_TX_OFFLOAD_VLAN_INSERT; - if (sa->dp_tx->features & SFC_DP_TX_FEAT_MULTI_SEG) + if (sa->priv.dp_tx->features & SFC_DP_TX_FEAT_MULTI_SEG) caps |= DEV_TX_OFFLOAD_MULTI_SEGS; - if ((~sa->dp_tx->features & SFC_DP_TX_FEAT_MULTI_POOL) && - (~sa->dp_tx->features & SFC_DP_TX_FEAT_REFCNT)) + if ((~sa->priv.dp_tx->features & SFC_DP_TX_FEAT_MULTI_POOL) && + (~sa->priv.dp_tx->features & SFC_DP_TX_FEAT_REFCNT)) caps |= DEV_TX_OFFLOAD_MBUF_FAST_FREE; return caps; @@ -134,8 +134,8 @@ sfc_tx_qinit(struct sfc_adapter *sa, unsigned int sw_index, sfc_log_init(sa, "TxQ = %u", sw_index); - rc = sa->dp_tx->qsize_up_rings(nb_tx_desc, &txq_entries, &evq_entries, - &txq_max_fill_level); + rc = sa->priv.dp_tx->qsize_up_rings(nb_tx_desc, &txq_entries, + &evq_entries, &txq_max_fill_level); if (rc != 0) goto fail_size_up_rings; SFC_ASSERT(txq_entries >= EFX_TXQ_MINNDESCS); @@ -193,9 +193,9 @@ sfc_tx_qinit(struct sfc_adapter *sa, unsigned int sw_index, info.tso_tcp_header_offset_limit = encp->enc_tx_tso_tcp_header_offset_limit; - rc = sa->dp_tx->qcreate(sa->eth_dev->data->port_id, sw_index, - &RTE_ETH_DEV_TO_PCI(sa->eth_dev)->addr, - socket_id, &info, &txq->dp); + rc = sa->priv.dp_tx->qcreate(sa->eth_dev->data->port_id, sw_index, + &RTE_ETH_DEV_TO_PCI(sa->eth_dev)->addr, + socket_id, &info, &txq->dp); if (rc != 0) goto fail_dp_tx_qinit; @@ -243,7 +243,7 @@ sfc_tx_qfini(struct sfc_adapter *sa, unsigned int sw_index) SFC_ASSERT(txq != NULL); SFC_ASSERT(txq->state == SFC_TXQ_INITIALIZED); - sa->dp_tx->qdestroy(txq->dp); + sa->priv.dp_tx->qdestroy(txq->dp); txq->dp = NULL; txq_info->txq = NULL; @@ -466,7 +466,7 @@ sfc_tx_qstart(struct sfc_adapter *sa, unsigned int sw_index) txq->state |= SFC_TXQ_STARTED; - rc = sa->dp_tx->qstart(txq->dp, evq->read_ptr, desc_index); + rc = sa->priv.dp_tx->qstart(txq->dp, evq->read_ptr, desc_index); if (rc != 0) goto fail_dp_qstart; @@ -511,7 +511,7 @@ sfc_tx_qstop(struct sfc_adapter *sa, unsigned int sw_index) SFC_ASSERT(txq->state & SFC_TXQ_STARTED); - sa->dp_tx->qstop(txq->dp, &txq->evq->read_ptr); + sa->priv.dp_tx->qstop(txq->dp, &txq->evq->read_ptr); /* * Retry TX queue flushing in case of flush failed or @@ -548,7 +548,7 @@ sfc_tx_qstop(struct sfc_adapter *sa, unsigned int sw_index) sfc_notice(sa, "TxQ %u flushed", sw_index); } - sa->dp_tx->qreap(txq->dp); + sa->priv.dp_tx->qreap(txq->dp); txq->state = SFC_TXQ_INITIALIZED; From patchwork Thu Feb 7 12:17:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50174 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9D9571B4FF; Thu, 7 Feb 2019 13:18:32 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id A03C91B4BC for ; Thu, 7 Feb 2019 13:18:15 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 61E42600067 for ; Thu, 7 Feb 2019 12:18:14 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:10 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:09 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI8Ie013231 for ; Thu, 7 Feb 2019 12:18:08 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 7DD601613E4 for ; Thu, 7 Feb 2019 12:18:08 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:32 +0000 Message-ID: <1549541873-17403-10-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-1.879800-4.000000-10 X-TMASE-MatchedRID: 4TjxhQTf5XhJ0YyoO3S+Ix+WEMjoO9WWI9yVcHNDU7are7bPW6Vx7qip 18v0DWYVhw91EYo9qbfr8OtoMyGhhTeE3zHLyrsyNs3S39zaoXbljSRvSGpq3M7EPIkVcg+O+4D mGDa9rNy9Yfxjf48xHrO9i5FesTRZGAdnzrnkM48URSScn+QSXt0H8LFZNFG76sBnwpOylLNzDP LEyMVz7YQvqvA+3pq86zoTQssakAvhoSW3D2FaK4Wwfkily/J5ybv0UzsouSRtkC08tcRcyMp8N OZM6RM9lZLmC6R7frwA5SS2XRjKFM+aZOIheolUvvUo0hZPhlzM/43UL1MJR37cGd19dSFd X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--1.879800-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541895-SYusbIa5MiCz Subject: [dpdk-dev] [PATCH 09/30] net/sfc: move main log type to process private data 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" Dynamic log type value may differ in primary and secondary processes. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc.h | 2 +- drivers/net/sfc/sfc_ethdev.c | 4 +++- drivers/net/sfc/sfc_log.h | 10 +++++----- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h index 5c836b1c3..f04127bbc 100644 --- a/drivers/net/sfc/sfc.h +++ b/drivers/net/sfc/sfc.h @@ -175,6 +175,7 @@ struct sfc_rss { struct sfc_adapter_priv { const struct sfc_dp_rx *dp_rx; const struct sfc_dp_tx *dp_tx; + uint32_t logtype_main; }; static inline struct sfc_adapter_priv * @@ -207,7 +208,6 @@ struct sfc_adapter { uint16_t port_id; struct rte_eth_dev *eth_dev; struct rte_kvargs *kvargs; - uint32_t logtype_main; int socket_id; efsys_bar_t mem_bar; efx_family_t family; diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 46cd36fa5..bb53c7d53 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -1905,6 +1905,8 @@ sfc_eth_dev_secondary_init(struct rte_eth_dev *dev, uint32_t logtype_main) goto fail_alloc_priv; } + sap->logtype_main = logtype_main; + dp_rx = sfc_dp_find_rx_by_name(&sfc_dp_head, sa->dp_rx_name); if (dp_rx == NULL) { SFC_LOG(sa, RTE_LOG_ERR, logtype_main, @@ -2011,7 +2013,7 @@ sfc_eth_dev_init(struct rte_eth_dev *dev) /* Required for logging */ sa->pci_addr = pci_dev->addr; sa->port_id = dev->data->port_id; - sa->logtype_main = logtype_main; + sa->priv.logtype_main = logtype_main; sa->eth_dev = dev; diff --git a/drivers/net/sfc/sfc_log.h b/drivers/net/sfc/sfc_log.h index b11fbfb0a..405cc2a26 100644 --- a/drivers/net/sfc/sfc_log.h +++ b/drivers/net/sfc/sfc_log.h @@ -52,7 +52,7 @@ extern uint32_t sfc_logtype_driver; do { \ const struct sfc_adapter *_sa = (sa); \ \ - SFC_LOG(_sa, RTE_LOG_ERR, _sa->logtype_main, \ + SFC_LOG(_sa, RTE_LOG_ERR, _sa->priv.logtype_main, \ __VA_ARGS__); \ } while (0) @@ -60,7 +60,7 @@ extern uint32_t sfc_logtype_driver; do { \ const struct sfc_adapter *_sa = (sa); \ \ - SFC_LOG(_sa, RTE_LOG_WARNING, _sa->logtype_main, \ + SFC_LOG(_sa, RTE_LOG_WARNING, _sa->priv.logtype_main, \ __VA_ARGS__); \ } while (0) @@ -68,7 +68,7 @@ extern uint32_t sfc_logtype_driver; do { \ const struct sfc_adapter *_sa = (sa); \ \ - SFC_LOG(_sa, RTE_LOG_NOTICE, _sa->logtype_main, \ + SFC_LOG(_sa, RTE_LOG_NOTICE, _sa->priv.logtype_main, \ __VA_ARGS__); \ } while (0) @@ -76,7 +76,7 @@ extern uint32_t sfc_logtype_driver; do { \ const struct sfc_adapter *_sa = (sa); \ \ - SFC_LOG(_sa, RTE_LOG_INFO, _sa->logtype_main, \ + SFC_LOG(_sa, RTE_LOG_INFO, _sa->priv.logtype_main, \ __VA_ARGS__); \ } while (0) @@ -84,7 +84,7 @@ extern uint32_t sfc_logtype_driver; do { \ const struct sfc_adapter *_sa = (sa); \ \ - SFC_LOG(_sa, RTE_LOG_INFO, _sa->logtype_main, \ + SFC_LOG(_sa, RTE_LOG_INFO, _sa->priv.logtype_main, \ RTE_FMT("%s(): " \ RTE_FMT_HEAD(__VA_ARGS__ ,), \ __func__, \ From patchwork Thu Feb 7 12:17:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50173 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9F6051B4F9; Thu, 7 Feb 2019 13:18:31 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id A02E51B4B0 for ; Thu, 7 Feb 2019 13:18:15 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 37B2A60005B for ; Thu, 7 Feb 2019 12:18:14 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:10 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:09 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI8TR013237 for ; Thu, 7 Feb 2019 12:18:08 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 8AE831613EB for ; Thu, 7 Feb 2019 12:18:08 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:33 +0000 Message-ID: <1549541873-17403-11-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-7.559100-4.000000-10 X-TMASE-MatchedRID: d05aAjFuRNuoI13vZ2XFy0f49ONH0RaSSjyMfjCRfaPfUZT83lbkELL3 BM+Z7Cj+X0cA+hIusNB0JhkA9J6KtcnUsvxvsR6SjtK7dC6UBnnXO6omeezMlQqiCYa6w8tvPqX dU88bkZr0rkiHJQGVHfscOUmHqruCLJiQLRvk9Yp1e7Xbb6Im2ugPC9432RKc6+6mfxThVmWYGd vqPXHl9JPTrtvqiLisdeapqLzUIQfQf/Mt4GBfb03dRRsh/h6ylHLUcNM85drwWev3ZOthaKPFj JEFr+olwXCBO/GKkVqOhzOa6g8KrfJjDRnx3t0fGDq7oZF35YyMJjxTTYisWnBl6PRSreM21xi1 Qsz/f5VDDKa3G4nrLQ== X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--7.559100-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541894-2ECZQ7JXr6KX Subject: [dpdk-dev] [PATCH 10/30] net/sfc: move RxQ state to multi-process shared location 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" Secondary process needs to know RxQ state. RxQ control structure will become primary process private. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc_ethdev.c | 6 ++-- drivers/net/sfc/sfc_ev.c | 8 +++-- drivers/net/sfc/sfc_rx.c | 67 ++++++++++++++++++++---------------- drivers/net/sfc/sfc_rx.h | 8 +++-- 4 files changed, 53 insertions(+), 36 deletions(-) diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index bb53c7d53..7118d2293 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -1122,12 +1122,14 @@ sfc_rx_queue_count(struct rte_eth_dev *dev, uint16_t rx_queue_id) { const struct sfc_adapter_priv *sap = sfc_adapter_priv_by_eth_dev(dev); struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_rxq_info *rxq_info; struct sfc_rxq *rxq; SFC_ASSERT(rx_queue_id < sa->rxq_count); - rxq = sa->rxq_info[rx_queue_id].rxq; + rxq_info = &sa->rxq_info[rx_queue_id]; + rxq = rxq_info->rxq; - if (rxq == NULL || (rxq->state & SFC_RXQ_STARTED) == 0) + if (rxq == NULL || (rxq_info->state & SFC_RXQ_STARTED) == 0) return 0; return sap->dp_rx->qdesc_npending(rxq->dp); diff --git a/drivers/net/sfc/sfc_ev.c b/drivers/net/sfc/sfc_ev.c index 717835cab..5965e2350 100644 --- a/drivers/net/sfc/sfc_ev.c +++ b/drivers/net/sfc/sfc_ev.c @@ -293,7 +293,9 @@ sfc_ev_rxq_flush_done(void *arg, __rte_unused uint32_t rxq_hw_index) SFC_ASSERT(rxq != NULL); SFC_ASSERT(rxq->hw_index == rxq_hw_index); SFC_ASSERT(rxq->evq == evq); - sfc_rx_qflush_done(rxq); + RTE_SET_USED(rxq); + + sfc_rx_qflush_done(sfc_rxq_info_by_dp_rxq(dp_rxq)); return B_FALSE; } @@ -322,7 +324,9 @@ sfc_ev_rxq_flush_failed(void *arg, __rte_unused uint32_t rxq_hw_index) SFC_ASSERT(rxq != NULL); SFC_ASSERT(rxq->hw_index == rxq_hw_index); SFC_ASSERT(rxq->evq == evq); - sfc_rx_qflush_failed(rxq); + RTE_SET_USED(rxq); + + sfc_rx_qflush_failed(sfc_rxq_info_by_dp_rxq(dp_rxq)); return B_FALSE; } diff --git a/drivers/net/sfc/sfc_rx.c b/drivers/net/sfc/sfc_rx.c index 0ee3cfdcd..130270dba 100644 --- a/drivers/net/sfc/sfc_rx.c +++ b/drivers/net/sfc/sfc_rx.c @@ -39,17 +39,17 @@ #define SFC_RX_QFLUSH_POLL_ATTEMPTS (2000) void -sfc_rx_qflush_done(struct sfc_rxq *rxq) +sfc_rx_qflush_done(struct sfc_rxq_info *rxq_info) { - rxq->state |= SFC_RXQ_FLUSHED; - rxq->state &= ~SFC_RXQ_FLUSHING; + rxq_info->state |= SFC_RXQ_FLUSHED; + rxq_info->state &= ~SFC_RXQ_FLUSHING; } void -sfc_rx_qflush_failed(struct sfc_rxq *rxq) +sfc_rx_qflush_failed(struct sfc_rxq_info *rxq_info) { - rxq->state |= SFC_RXQ_FLUSH_FAILED; - rxq->state &= ~SFC_RXQ_FLUSHING; + rxq_info->state |= SFC_RXQ_FLUSH_FAILED; + rxq_info->state &= ~SFC_RXQ_FLUSHING; } static void @@ -360,13 +360,12 @@ sfc_efx_rx_qdesc_status(struct sfc_dp_rxq *dp_rxq, uint16_t offset) return RTE_ETH_RX_DESC_UNAVAIL; } -struct sfc_rxq * -sfc_rxq_by_dp_rxq(const struct sfc_dp_rxq *dp_rxq) +struct sfc_rxq_info * +sfc_rxq_info_by_dp_rxq(const struct sfc_dp_rxq *dp_rxq) { const struct sfc_dp_queue *dpq = &dp_rxq->dpq; struct rte_eth_dev *eth_dev; struct sfc_adapter *sa; - struct sfc_rxq *rxq; SFC_ASSERT(rte_eth_dev_is_valid_port(dpq->port_id)); eth_dev = &rte_eth_devices[dpq->port_id]; @@ -374,10 +373,18 @@ sfc_rxq_by_dp_rxq(const struct sfc_dp_rxq *dp_rxq) sa = eth_dev->data->dev_private; SFC_ASSERT(dpq->queue_id < sa->rxq_count); - rxq = sa->rxq_info[dpq->queue_id].rxq; + return &sa->rxq_info[dpq->queue_id]; +} - SFC_ASSERT(rxq != NULL); - return rxq; +struct sfc_rxq * +sfc_rxq_by_dp_rxq(const struct sfc_dp_rxq *dp_rxq) +{ + struct sfc_rxq_info *rxq_info; + + rxq_info = sfc_rxq_info_by_dp_rxq(dp_rxq); + + SFC_ASSERT(rxq_info->rxq != NULL); + return rxq_info->rxq; } static sfc_dp_rx_qsize_up_rings_t sfc_efx_rx_qsize_up_rings; @@ -533,30 +540,32 @@ struct sfc_dp_rx sfc_efx_rx = { static void sfc_rx_qflush(struct sfc_adapter *sa, unsigned int sw_index) { + struct sfc_rxq_info *rxq_info; struct sfc_rxq *rxq; unsigned int retry_count; unsigned int wait_count; int rc; - rxq = sa->rxq_info[sw_index].rxq; - SFC_ASSERT(rxq->state & SFC_RXQ_STARTED); + rxq_info = &sa->rxq_info[sw_index]; + rxq = rxq_info->rxq; + SFC_ASSERT(rxq_info->state & SFC_RXQ_STARTED); /* * Retry Rx queue flushing in the case of flush failed or * timeout. In the worst case it can delay for 6 seconds. */ for (retry_count = 0; - ((rxq->state & SFC_RXQ_FLUSHED) == 0) && + ((rxq_info->state & SFC_RXQ_FLUSHED) == 0) && (retry_count < SFC_RX_QFLUSH_ATTEMPTS); ++retry_count) { rc = efx_rx_qflush(rxq->common); if (rc != 0) { - rxq->state |= (rc == EALREADY) ? + rxq_info->state |= (rc == EALREADY) ? SFC_RXQ_FLUSHED : SFC_RXQ_FLUSH_FAILED; break; } - rxq->state &= ~SFC_RXQ_FLUSH_FAILED; - rxq->state |= SFC_RXQ_FLUSHING; + rxq_info->state &= ~SFC_RXQ_FLUSH_FAILED; + rxq_info->state |= SFC_RXQ_FLUSHING; /* * Wait for Rx queue flush done or failed event at least @@ -568,16 +577,16 @@ sfc_rx_qflush(struct sfc_adapter *sa, unsigned int sw_index) do { rte_delay_ms(SFC_RX_QFLUSH_POLL_WAIT_MS); sfc_ev_qpoll(rxq->evq); - } while ((rxq->state & SFC_RXQ_FLUSHING) && + } while ((rxq_info->state & SFC_RXQ_FLUSHING) && (wait_count++ < SFC_RX_QFLUSH_POLL_ATTEMPTS)); - if (rxq->state & SFC_RXQ_FLUSHING) + if (rxq_info->state & SFC_RXQ_FLUSHING) sfc_err(sa, "RxQ %u flush timed out", sw_index); - if (rxq->state & SFC_RXQ_FLUSH_FAILED) + if (rxq_info->state & SFC_RXQ_FLUSH_FAILED) sfc_err(sa, "RxQ %u flush failed", sw_index); - if (rxq->state & SFC_RXQ_FLUSHED) + if (rxq_info->state & SFC_RXQ_FLUSHED) sfc_notice(sa, "RxQ %u flushed", sw_index); } @@ -651,7 +660,7 @@ sfc_rx_qstart(struct sfc_adapter *sa, unsigned int sw_index) rxq_info = &sa->rxq_info[sw_index]; rxq = rxq_info->rxq; SFC_ASSERT(rxq != NULL); - SFC_ASSERT(rxq->state == SFC_RXQ_INITIALIZED); + SFC_ASSERT(rxq_info->state == SFC_RXQ_INITIALIZED); evq = rxq->evq; @@ -699,7 +708,7 @@ sfc_rx_qstart(struct sfc_adapter *sa, unsigned int sw_index) if (rc != 0) goto fail_dp_qstart; - rxq->state |= SFC_RXQ_STARTED; + rxq_info->state |= SFC_RXQ_STARTED; if ((sw_index == 0) && !port->isolated) { rc = sfc_rx_default_rxq_set_filter(sa, rxq); @@ -741,9 +750,9 @@ sfc_rx_qstop(struct sfc_adapter *sa, unsigned int sw_index) rxq_info = &sa->rxq_info[sw_index]; rxq = rxq_info->rxq; - if (rxq == NULL || rxq->state == SFC_RXQ_INITIALIZED) + if (rxq == NULL || rxq_info->state == SFC_RXQ_INITIALIZED) return; - SFC_ASSERT(rxq->state & SFC_RXQ_STARTED); + SFC_ASSERT(rxq_info->state & SFC_RXQ_STARTED); /* It seems to be used by DPDK for debug purposes only ('rte_ether') */ sa->eth_dev->data->rx_queue_state[sw_index] = @@ -756,7 +765,7 @@ sfc_rx_qstop(struct sfc_adapter *sa, unsigned int sw_index) sfc_rx_qflush(sa, sw_index); - rxq->state = SFC_RXQ_INITIALIZED; + rxq_info->state = SFC_RXQ_INITIALIZED; efx_rx_qdestroy(rxq->common); @@ -1048,7 +1057,7 @@ sfc_rx_qinit(struct sfc_adapter *sa, unsigned int sw_index, evq->dp_rxq = rxq->dp; - rxq->state = SFC_RXQ_INITIALIZED; + rxq_info->state = SFC_RXQ_INITIALIZED; rxq_info->deferred_start = (rx_conf->rx_deferred_start != 0); @@ -1085,7 +1094,7 @@ sfc_rx_qfini(struct sfc_adapter *sa, unsigned int sw_index) rxq_info = &sa->rxq_info[sw_index]; rxq = rxq_info->rxq; - SFC_ASSERT(rxq->state == SFC_RXQ_INITIALIZED); + SFC_ASSERT(rxq_info->state == SFC_RXQ_INITIALIZED); sa->priv.dp_rx->qdestroy(rxq->dp); rxq->dp = NULL; diff --git a/drivers/net/sfc/sfc_rx.h b/drivers/net/sfc/sfc_rx.h index 06e8eac8d..be64004d0 100644 --- a/drivers/net/sfc/sfc_rx.h +++ b/drivers/net/sfc/sfc_rx.h @@ -60,7 +60,6 @@ struct sfc_rxq { unsigned int hw_index; uint16_t buf_size; struct sfc_dp_rxq *dp; - unsigned int state; }; static inline unsigned int @@ -119,6 +118,7 @@ sfc_efx_rxq_by_dp_rxq(struct sfc_dp_rxq *dp_rxq) * Allocated on the same socket as adapter data. */ struct sfc_rxq_info { + unsigned int state; unsigned int max_entries; unsigned int entries; efx_rxq_type_t type; @@ -130,6 +130,8 @@ struct sfc_rxq_info { struct rte_mempool *refill_mb_pool; }; +struct sfc_rxq_info *sfc_rxq_info_by_dp_rxq(const struct sfc_dp_rxq *dp_rxq); + int sfc_rx_configure(struct sfc_adapter *sa); void sfc_rx_close(struct sfc_adapter *sa); int sfc_rx_start(struct sfc_adapter *sa); @@ -146,8 +148,8 @@ void sfc_rx_qstop(struct sfc_adapter *sa, unsigned int sw_index); uint64_t sfc_rx_get_dev_offload_caps(struct sfc_adapter *sa); uint64_t sfc_rx_get_queue_offload_caps(struct sfc_adapter *sa); -void sfc_rx_qflush_done(struct sfc_rxq *rxq); -void sfc_rx_qflush_failed(struct sfc_rxq *rxq); +void sfc_rx_qflush_done(struct sfc_rxq_info *rxq_info); +void sfc_rx_qflush_failed(struct sfc_rxq_info *rxq_info); int sfc_rx_hash_init(struct sfc_adapter *sa); void sfc_rx_hash_fini(struct sfc_adapter *sa); From patchwork Thu Feb 7 12:17:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50169 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 34AA41B4E2; Thu, 7 Feb 2019 13:18:27 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 122361B4B0 for ; Thu, 7 Feb 2019 13:18:15 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id D859E600061 for ; Thu, 7 Feb 2019 12:18:13 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:10 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:09 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI83o013241 for ; Thu, 7 Feb 2019 12:18:08 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 97D721613E4 for ; Thu, 7 Feb 2019 12:18:08 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:34 +0000 Message-ID: <1549541873-17403-12-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-3.347400-4.000000-10 X-TMASE-MatchedRID: CpBUfk8vmJsfOjKSU0pCER+WEMjoO9WWTJDl9FKHbrnuaWurQfPpTaYm f3n26fzqalyDl//i2XBNkhpxJfv8GkJH8WyQMk5uliwpJdZauwdYMtqMzbYRNsA0eOJZYj7tvlJ 3+emUkhzi8zVgXoAltsIJ+4gwXrEtJ0RPnyOnrZIfCeRrCKctR4OAXlAXuAWeUQL6hgtEWgEzdf A9PWbPw80U/gfsvEKn12R8J4aRt5uAUA888eNE92WGksDODCi6n+C1jk8hv6WqFrt9xUgp+uq+T 0IcdvQ1BtPt5WQTZkLauEQaIW46K6fL1/LSJ6vL X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--3.347400-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541894-YNkbNRCNamCP Subject: [dpdk-dev] [PATCH 11/30] net/sfc: move datapath RxQ handle to shared RxQ info 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" If datapath supports multi-process, it should be possible to get its RxQ structure by the queue index. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc_ethdev.c | 8 +++----- drivers/net/sfc/sfc_rx.c | 16 ++++++++-------- drivers/net/sfc/sfc_rx.h | 2 +- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 7118d2293..71be88f3e 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -415,7 +415,7 @@ sfc_rx_queue_setup(struct rte_eth_dev *dev, uint16_t rx_queue_id, if (rc != 0) goto fail_rx_qinit; - dev->data->rx_queues[rx_queue_id] = sa->rxq_info[rx_queue_id].rxq->dp; + dev->data->rx_queues[rx_queue_id] = sa->rxq_info[rx_queue_id].dp; sfc_adapter_unlock(sa); @@ -1123,16 +1123,14 @@ sfc_rx_queue_count(struct rte_eth_dev *dev, uint16_t rx_queue_id) const struct sfc_adapter_priv *sap = sfc_adapter_priv_by_eth_dev(dev); struct sfc_adapter *sa = dev->data->dev_private; struct sfc_rxq_info *rxq_info; - struct sfc_rxq *rxq; SFC_ASSERT(rx_queue_id < sa->rxq_count); rxq_info = &sa->rxq_info[rx_queue_id]; - rxq = rxq_info->rxq; - if (rxq == NULL || (rxq_info->state & SFC_RXQ_STARTED) == 0) + if ((rxq_info->state & SFC_RXQ_STARTED) == 0) return 0; - return sap->dp_rx->qdesc_npending(rxq->dp); + return sap->dp_rx->qdesc_npending(rxq_info->dp); } static int diff --git a/drivers/net/sfc/sfc_rx.c b/drivers/net/sfc/sfc_rx.c index 130270dba..886a7a2fd 100644 --- a/drivers/net/sfc/sfc_rx.c +++ b/drivers/net/sfc/sfc_rx.c @@ -590,7 +590,7 @@ sfc_rx_qflush(struct sfc_adapter *sa, unsigned int sw_index) sfc_notice(sa, "RxQ %u flushed", sw_index); } - sa->priv.dp_rx->qpurge(rxq->dp); + sa->priv.dp_rx->qpurge(rxq_info->dp); } static int @@ -704,7 +704,7 @@ sfc_rx_qstart(struct sfc_adapter *sa, unsigned int sw_index) efx_rx_qenable(rxq->common); - rc = sa->priv.dp_rx->qstart(rxq->dp, evq->read_ptr); + rc = sa->priv.dp_rx->qstart(rxq_info->dp, evq->read_ptr); if (rc != 0) goto fail_dp_qstart; @@ -723,7 +723,7 @@ sfc_rx_qstart(struct sfc_adapter *sa, unsigned int sw_index) return 0; fail_mac_filter_default_rxq_set: - sa->priv.dp_rx->qstop(rxq->dp, &rxq->evq->read_ptr); + sa->priv.dp_rx->qstop(rxq_info->dp, &rxq->evq->read_ptr); fail_dp_qstart: sfc_rx_qflush(sa, sw_index); @@ -758,7 +758,7 @@ sfc_rx_qstop(struct sfc_adapter *sa, unsigned int sw_index) sa->eth_dev->data->rx_queue_state[sw_index] = RTE_ETH_QUEUE_STATE_STOPPED; - sa->priv.dp_rx->qstop(rxq->dp, &rxq->evq->read_ptr); + sa->priv.dp_rx->qstop(rxq_info->dp, &rxq->evq->read_ptr); if (sw_index == 0) efx_mac_filter_default_rxq_clear(sa->nic); @@ -1051,11 +1051,11 @@ sfc_rx_qinit(struct sfc_adapter *sa, unsigned int sw_index, rc = sa->priv.dp_rx->qcreate(sa->eth_dev->data->port_id, sw_index, &RTE_ETH_DEV_TO_PCI(sa->eth_dev)->addr, - socket_id, &info, &rxq->dp); + socket_id, &info, &rxq_info->dp); if (rc != 0) goto fail_dp_rx_qcreate; - evq->dp_rxq = rxq->dp; + evq->dp_rxq = rxq_info->dp; rxq_info->state = SFC_RXQ_INITIALIZED; @@ -1096,8 +1096,8 @@ sfc_rx_qfini(struct sfc_adapter *sa, unsigned int sw_index) rxq = rxq_info->rxq; SFC_ASSERT(rxq_info->state == SFC_RXQ_INITIALIZED); - sa->priv.dp_rx->qdestroy(rxq->dp); - rxq->dp = NULL; + sa->priv.dp_rx->qdestroy(rxq_info->dp); + rxq_info->dp = NULL; rxq_info->rxq = NULL; rxq_info->entries = 0; diff --git a/drivers/net/sfc/sfc_rx.h b/drivers/net/sfc/sfc_rx.h index be64004d0..9c946d7cb 100644 --- a/drivers/net/sfc/sfc_rx.h +++ b/drivers/net/sfc/sfc_rx.h @@ -59,7 +59,6 @@ struct sfc_rxq { efsys_mem_t mem; unsigned int hw_index; uint16_t buf_size; - struct sfc_dp_rxq *dp; }; static inline unsigned int @@ -124,6 +123,7 @@ struct sfc_rxq_info { efx_rxq_type_t type; unsigned int type_flags; struct sfc_rxq *rxq; + struct sfc_dp_rxq *dp; boolean_t deferred_start; boolean_t deferred_started; unsigned int refill_threshold; From patchwork Thu Feb 7 12:17:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50172 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9436F1B4F3; Thu, 7 Feb 2019 13:18:30 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 3079A1B4B6 for ; Thu, 7 Feb 2019 13:18:15 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 0D7A4600061 for ; Thu, 7 Feb 2019 12:18:14 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:10 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:09 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI8i9013245 for ; Thu, 7 Feb 2019 12:18:08 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id A45DF1613EB for ; Thu, 7 Feb 2019 12:18:08 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:35 +0000 Message-ID: <1549541873-17403-13-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-4.867600-4.000000-10 X-TMASE-MatchedRID: i/wEjRUPNdw2jeY+Udg/IrMjW/sniEQKSjyMfjCRfaPfUZT83lbkED0J SifQ1MZ59spbMCBlXHFikKk0n7J+WT1LciJB3541EhGH3CRdKUXljSRvSGpq3MNNczdXNJoiteP PVOPX6wIcdSYUJM2UOhnHvHnQkZWJwdbU3akH5Ay3UCG/IQp2PjQAp53S718HGB5fXKRWYOijxY yRBa/qJcFwgTvxipFajoczmuoPCq00aEISWnGCnaueh7gXlaRTa6/nh33aIEm4xE6RbM6JWtK3c WeOGvbhc1BSWuecgSR57oXK2H7pLDPRVOsyasgmV8mP9SzXaZE3I8DUyOoaeU+wJNKvG6HQ1PNk ozhRY3HUNR3AhwxI7LAXtf+fj2qblExlQIQeRG0= X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--4.867600-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541894-5l8mC_DVXsXh Subject: [dpdk-dev] [PATCH 12/30] net/sfc: support Rx descriptor status in secondary process 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" If Rx datapath supports multi-process, secondary process should be able to use Rx descriptor status and related API. Signed-off-by: Andrew Rybchenko --- doc/guides/rel_notes/release_19_05.rst | 7 +++++++ drivers/net/sfc/sfc_dp_rx.h | 3 +++ drivers/net/sfc/sfc_ethdev.c | 27 ++++++++++++++++++++++---- drivers/net/sfc/sfc_rx.c | 16 +++++++++++++++ 4 files changed, 49 insertions(+), 4 deletions(-) diff --git a/doc/guides/rel_notes/release_19_05.rst b/doc/guides/rel_notes/release_19_05.rst index e3a7ed22f..93f28926a 100644 --- a/doc/guides/rel_notes/release_19_05.rst +++ b/doc/guides/rel_notes/release_19_05.rst @@ -54,6 +54,13 @@ New Features Also, make sure to start the actual text at the margin. ========================================================= +* **Updated Solarflare network PMD.** + + Updated the sfc_efx driver including the following changes: + + * Added support for Rx descriptor status and related API in a secondary + process. + Removed Items ------------- diff --git a/drivers/net/sfc/sfc_dp_rx.h b/drivers/net/sfc/sfc_dp_rx.h index ce96e83f6..7e911648e 100644 --- a/drivers/net/sfc/sfc_dp_rx.h +++ b/drivers/net/sfc/sfc_dp_rx.h @@ -228,6 +228,9 @@ sfc_dp_find_rx_by_caps(struct sfc_dp_list *head, unsigned int avail_caps) return (p == NULL) ? NULL : container_of(p, struct sfc_dp_rx, dp); } +/** Get Rx datapath ops by the datapath RxQ handle */ +const struct sfc_dp_rx *sfc_dp_rx_by_dp_rxq(const struct sfc_dp_rxq *dp_rxq); + extern struct sfc_dp_rx sfc_efx_rx; extern struct sfc_dp_rx sfc_ef10_rx; extern struct sfc_dp_rx sfc_ef10_essb_rx; diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 71be88f3e..5bc73d512 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -1117,6 +1117,10 @@ sfc_tx_queue_info_get(struct rte_eth_dev *dev, uint16_t tx_queue_id, sfc_adapter_unlock(sa); } +/* + * The function is used by the secondary process as well. It must not + * use any process-local pointers from the adapter data. + */ static uint32_t sfc_rx_queue_count(struct rte_eth_dev *dev, uint16_t rx_queue_id) { @@ -1133,22 +1137,34 @@ sfc_rx_queue_count(struct rte_eth_dev *dev, uint16_t rx_queue_id) return sap->dp_rx->qdesc_npending(rxq_info->dp); } +/* + * The function is used by the secondary process as well. It must not + * use any process-local pointers from the adapter data. + */ static int sfc_rx_descriptor_done(void *queue, uint16_t offset) { struct sfc_dp_rxq *dp_rxq = queue; - struct sfc_rxq *rxq = sfc_rxq_by_dp_rxq(dp_rxq); + const struct sfc_dp_rx *dp_rx; + + dp_rx = sfc_dp_rx_by_dp_rxq(dp_rxq); - return offset < rxq->evq->sa->priv.dp_rx->qdesc_npending(dp_rxq); + return offset < dp_rx->qdesc_npending(dp_rxq); } +/* + * The function is used by the secondary process as well. It must not + * use any process-local pointers from the adapter data. + */ static int sfc_rx_descriptor_status(void *queue, uint16_t offset) { struct sfc_dp_rxq *dp_rxq = queue; - struct sfc_rxq *rxq = sfc_rxq_by_dp_rxq(dp_rxq); + const struct sfc_dp_rx *dp_rx; - return rxq->evq->sa->priv.dp_rx->qdesc_status(dp_rxq, offset); + dp_rx = sfc_dp_rx_by_dp_rxq(dp_rxq); + + return dp_rx->qdesc_status(dp_rxq, offset); } static int @@ -1877,6 +1893,9 @@ sfc_eth_dev_clear_ops(struct rte_eth_dev *dev) } static const struct eth_dev_ops sfc_eth_dev_secondary_ops = { + .rx_queue_count = sfc_rx_queue_count, + .rx_descriptor_done = sfc_rx_descriptor_done, + .rx_descriptor_status = sfc_rx_descriptor_status, .rxq_info_get = sfc_rx_queue_info_get, .txq_info_get = sfc_tx_queue_info_get, }; diff --git a/drivers/net/sfc/sfc_rx.c b/drivers/net/sfc/sfc_rx.c index 886a7a2fd..3c1e77974 100644 --- a/drivers/net/sfc/sfc_rx.c +++ b/drivers/net/sfc/sfc_rx.c @@ -360,6 +360,22 @@ sfc_efx_rx_qdesc_status(struct sfc_dp_rxq *dp_rxq, uint16_t offset) return RTE_ETH_RX_DESC_UNAVAIL; } +/** Get Rx datapath ops by the datapath RxQ handle */ +const struct sfc_dp_rx * +sfc_dp_rx_by_dp_rxq(const struct sfc_dp_rxq *dp_rxq) +{ + const struct sfc_dp_queue *dpq = &dp_rxq->dpq; + struct rte_eth_dev *eth_dev; + struct sfc_adapter_priv *sap; + + SFC_ASSERT(rte_eth_dev_is_valid_port(dpq->port_id)); + eth_dev = &rte_eth_devices[dpq->port_id]; + + sap = sfc_adapter_priv_by_eth_dev(eth_dev); + + return sap->dp_rx; +} + struct sfc_rxq_info * sfc_rxq_info_by_dp_rxq(const struct sfc_dp_rxq *dp_rxq) { From patchwork Thu Feb 7 12:17:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50177 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 823C91B513; Thu, 7 Feb 2019 13:18:35 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id DD3C41B4B6 for ; Thu, 7 Feb 2019 13:18:15 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 8B3B1600057 for ; Thu, 7 Feb 2019 12:18:14 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:10 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:10 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI8AW013250 for ; Thu, 7 Feb 2019 12:18:08 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id B2BB51613E4 for ; Thu, 7 Feb 2019 12:18:08 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:36 +0000 Message-ID: <1549541873-17403-14-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-7.086200-4.000000-10 X-TMASE-MatchedRID: 2xd9EQ8Wt06oI13vZ2XFyx+WEMjoO9WWTJDl9FKHbrlX14Hy+eYp78P/ La5NP1JvS2Wd7rYJi8EGCakwPNLse2nLMsFvdAw4Cz1WR8KHe4BYMtqMzbYRNup7wgGRqw6kfMr dD3NIUvsMB2Nzy1L1+253ydx9lOkWGXJM4GwoDq+e7UdJp0QINZqCl1R34jDPCqIJhrrDy29hcJ qAtNJYSH9dRB2q7pOorQK+QUFQiw8YB2fOueQzjxRFJJyf5BJe3QfwsVk0UbuGrPnef/I+eqJuU QbS4Jfh36Cyl6U5Hv51IrtLjdG6u/gkRT4XtS1dN+XOQZygrvY= X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--7.086200-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541894-gncsREl6MLfb Subject: [dpdk-dev] [PATCH 13/30] net/sfc: move TxQ state to multi-process shared location 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" Secondary process needs to know TxQ state. TxQ control structure will become primary process private. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc_ev.c | 4 +++- drivers/net/sfc/sfc_tx.c | 51 +++++++++++++++++++++++----------------- drivers/net/sfc/sfc_tx.h | 6 +++-- 3 files changed, 36 insertions(+), 25 deletions(-) diff --git a/drivers/net/sfc/sfc_ev.c b/drivers/net/sfc/sfc_ev.c index 5965e2350..0ca502ea2 100644 --- a/drivers/net/sfc/sfc_ev.c +++ b/drivers/net/sfc/sfc_ev.c @@ -355,7 +355,9 @@ sfc_ev_txq_flush_done(void *arg, __rte_unused uint32_t txq_hw_index) SFC_ASSERT(txq != NULL); SFC_ASSERT(txq->hw_index == txq_hw_index); SFC_ASSERT(txq->evq == evq); - sfc_tx_qflush_done(txq); + RTE_SET_USED(txq); + + sfc_tx_qflush_done(sfc_txq_info_by_dp_txq(dp_txq)); return B_FALSE; } diff --git a/drivers/net/sfc/sfc_tx.c b/drivers/net/sfc/sfc_tx.c index 5d31fedbb..f4fbffe0a 100644 --- a/drivers/net/sfc/sfc_tx.c +++ b/drivers/net/sfc/sfc_tx.c @@ -110,10 +110,10 @@ sfc_tx_qcheck_conf(struct sfc_adapter *sa, unsigned int txq_max_fill_level, } void -sfc_tx_qflush_done(struct sfc_txq *txq) +sfc_tx_qflush_done(struct sfc_txq_info *txq_info) { - txq->state |= SFC_TXQ_FLUSHED; - txq->state &= ~SFC_TXQ_FLUSHING; + txq_info->state |= SFC_TXQ_FLUSHED; + txq_info->state &= ~SFC_TXQ_FLUSHING; } int @@ -201,7 +201,7 @@ sfc_tx_qinit(struct sfc_adapter *sa, unsigned int sw_index, evq->dp_txq = txq->dp; - txq->state = SFC_TXQ_INITIALIZED; + txq_info->state = SFC_TXQ_INITIALIZED; txq_info->deferred_start = (tx_conf->tx_deferred_start != 0); @@ -241,7 +241,7 @@ sfc_tx_qfini(struct sfc_adapter *sa, unsigned int sw_index) txq = txq_info->txq; SFC_ASSERT(txq != NULL); - SFC_ASSERT(txq->state == SFC_TXQ_INITIALIZED); + SFC_ASSERT(txq_info->state == SFC_TXQ_INITIALIZED); sa->priv.dp_tx->qdestroy(txq->dp); txq->dp = NULL; @@ -426,7 +426,7 @@ sfc_tx_qstart(struct sfc_adapter *sa, unsigned int sw_index) txq = txq_info->txq; SFC_ASSERT(txq != NULL); - SFC_ASSERT(txq->state == SFC_TXQ_INITIALIZED); + SFC_ASSERT(txq_info->state == SFC_TXQ_INITIALIZED); evq = txq->evq; @@ -464,7 +464,7 @@ sfc_tx_qstart(struct sfc_adapter *sa, unsigned int sw_index) efx_tx_qenable(txq->common); - txq->state |= SFC_TXQ_STARTED; + txq_info->state |= SFC_TXQ_STARTED; rc = sa->priv.dp_tx->qstart(txq->dp, evq->read_ptr, desc_index); if (rc != 0) @@ -479,7 +479,7 @@ sfc_tx_qstart(struct sfc_adapter *sa, unsigned int sw_index) return 0; fail_dp_qstart: - txq->state = SFC_TXQ_INITIALIZED; + txq_info->state = SFC_TXQ_INITIALIZED; efx_tx_qdestroy(txq->common); fail_tx_qcreate: @@ -506,10 +506,10 @@ sfc_tx_qstop(struct sfc_adapter *sa, unsigned int sw_index) txq = txq_info->txq; - if (txq == NULL || txq->state == SFC_TXQ_INITIALIZED) + if (txq == NULL || txq_info->state == SFC_TXQ_INITIALIZED) return; - SFC_ASSERT(txq->state & SFC_TXQ_STARTED); + SFC_ASSERT(txq_info->state & SFC_TXQ_STARTED); sa->priv.dp_tx->qstop(txq->dp, &txq->evq->read_ptr); @@ -518,12 +518,12 @@ sfc_tx_qstop(struct sfc_adapter *sa, unsigned int sw_index) * timeout; in the worst case it can delay for 6 seconds */ for (retry_count = 0; - ((txq->state & SFC_TXQ_FLUSHED) == 0) && + ((txq_info->state & SFC_TXQ_FLUSHED) == 0) && (retry_count < SFC_TX_QFLUSH_ATTEMPTS); ++retry_count) { rc = efx_tx_qflush(txq->common); if (rc != 0) { - txq->state |= (rc == EALREADY) ? + txq_info->state |= (rc == EALREADY) ? SFC_TXQ_FLUSHED : SFC_TXQ_FLUSH_FAILED; break; } @@ -538,19 +538,19 @@ sfc_tx_qstop(struct sfc_adapter *sa, unsigned int sw_index) do { rte_delay_ms(SFC_TX_QFLUSH_POLL_WAIT_MS); sfc_ev_qpoll(txq->evq); - } while ((txq->state & SFC_TXQ_FLUSHING) && + } while ((txq_info->state & SFC_TXQ_FLUSHING) && wait_count++ < SFC_TX_QFLUSH_POLL_ATTEMPTS); - if (txq->state & SFC_TXQ_FLUSHING) + if (txq_info->state & SFC_TXQ_FLUSHING) sfc_err(sa, "TxQ %u flush timed out", sw_index); - if (txq->state & SFC_TXQ_FLUSHED) + if (txq_info->state & SFC_TXQ_FLUSHED) sfc_notice(sa, "TxQ %u flushed", sw_index); } sa->priv.dp_tx->qreap(txq->dp); - txq->state = SFC_TXQ_INITIALIZED; + txq_info->state = SFC_TXQ_INITIALIZED; efx_tx_qdestroy(txq->common); @@ -854,13 +854,12 @@ sfc_efx_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) return pkts_sent; } -struct sfc_txq * -sfc_txq_by_dp_txq(const struct sfc_dp_txq *dp_txq) +struct sfc_txq_info * +sfc_txq_info_by_dp_txq(const struct sfc_dp_txq *dp_txq) { const struct sfc_dp_queue *dpq = &dp_txq->dpq; struct rte_eth_dev *eth_dev; struct sfc_adapter *sa; - struct sfc_txq *txq; SFC_ASSERT(rte_eth_dev_is_valid_port(dpq->port_id)); eth_dev = &rte_eth_devices[dpq->port_id]; @@ -868,10 +867,18 @@ sfc_txq_by_dp_txq(const struct sfc_dp_txq *dp_txq) sa = eth_dev->data->dev_private; SFC_ASSERT(dpq->queue_id < sa->txq_count); - txq = sa->txq_info[dpq->queue_id].txq; + return &sa->txq_info[dpq->queue_id]; +} - SFC_ASSERT(txq != NULL); - return txq; +struct sfc_txq * +sfc_txq_by_dp_txq(const struct sfc_dp_txq *dp_txq) +{ + struct sfc_txq_info *txq_info; + + txq_info = sfc_txq_info_by_dp_txq(dp_txq); + + SFC_ASSERT(txq_info->txq != NULL); + return txq_info->txq; } static sfc_dp_tx_qsize_up_rings_t sfc_efx_tx_qsize_up_rings; diff --git a/drivers/net/sfc/sfc_tx.h b/drivers/net/sfc/sfc_tx.h index efb486d32..c3edd3a58 100644 --- a/drivers/net/sfc/sfc_tx.h +++ b/drivers/net/sfc/sfc_tx.h @@ -51,7 +51,6 @@ enum sfc_txq_state_bit { * Allocated on the socket specified on the queue setup. */ struct sfc_txq { - unsigned int state; unsigned int hw_index; struct sfc_evq *evq; efsys_mem_t mem; @@ -107,6 +106,7 @@ sfc_efx_txq_by_dp_txq(struct sfc_dp_txq *dp_txq) } struct sfc_txq_info { + unsigned int state; unsigned int entries; struct sfc_txq *txq; boolean_t deferred_start; @@ -115,6 +115,8 @@ struct sfc_txq_info { uint64_t offloads; }; +struct sfc_txq_info *sfc_txq_info_by_dp_txq(const struct sfc_dp_txq *dp_txq); + int sfc_tx_configure(struct sfc_adapter *sa); void sfc_tx_close(struct sfc_adapter *sa); @@ -123,7 +125,7 @@ int sfc_tx_qinit(struct sfc_adapter *sa, unsigned int sw_index, const struct rte_eth_txconf *tx_conf); void sfc_tx_qfini(struct sfc_adapter *sa, unsigned int sw_index); -void sfc_tx_qflush_done(struct sfc_txq *txq); +void sfc_tx_qflush_done(struct sfc_txq_info *txq_info); int sfc_tx_qstart(struct sfc_adapter *sa, unsigned int sw_index); void sfc_tx_qstop(struct sfc_adapter *sa, unsigned int sw_index); int sfc_tx_start(struct sfc_adapter *sa); From patchwork Thu Feb 7 12:17:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50175 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id ACDDD1B506; Thu, 7 Feb 2019 13:18:33 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id BC8961B4AF for ; Thu, 7 Feb 2019 13:18:15 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id DE37A600067 for ; Thu, 7 Feb 2019 12:18:14 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:10 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:10 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI8DN013254 for ; Thu, 7 Feb 2019 12:18:08 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id C10FA1613EB for ; Thu, 7 Feb 2019 12:18:08 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:37 +0000 Message-ID: <1549541873-17403-15-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-3.225500-4.000000-10 X-TMASE-MatchedRID: h1YlLWfQ7n4ccv8Iwgzq2gPZZctd3P4B/qxRV3rLqo3eQHDLQMNFIw4W I34Fe9tzIBOyfIQG7lIyy1N8n/3eDGAvsLJmtsvTzfqlpbtmcWh9LQinZ4QefPcjNeVeWlqY+gt Hj7OwNO3DBRxZClZqwR6SK66/9c8eONw4z/gbKYJQdpJuKAVCSjl11XV393EV2UEzoo87bqVgun AAv9r7L3+B6ElP9OOAFEVS5Eh4mLaJyoXRieO2+wAD0FqlZdom0b4rJ92tmtF/d7a9VsfzMGYfz Nl+uie3wL6SxPpr1/I= X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--3.225500-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541895-FK5K4CMSO1Pk Subject: [dpdk-dev] [PATCH 14/30] net/sfc: move datapath TxQ handle to shared TxQ info 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" If datapath supports multi-process, it should be possible to get its TxQ structure by the queue index. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc_ethdev.c | 2 +- drivers/net/sfc/sfc_tx.c | 14 +++++++------- drivers/net/sfc/sfc_tx.h | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 5bc73d512..80a1d7a3d 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -468,7 +468,7 @@ sfc_tx_queue_setup(struct rte_eth_dev *dev, uint16_t tx_queue_id, if (rc != 0) goto fail_tx_qinit; - dev->data->tx_queues[tx_queue_id] = sa->txq_info[tx_queue_id].txq->dp; + dev->data->tx_queues[tx_queue_id] = sa->txq_info[tx_queue_id].dp; sfc_adapter_unlock(sa); return 0; diff --git a/drivers/net/sfc/sfc_tx.c b/drivers/net/sfc/sfc_tx.c index f4fbffe0a..1ee4e78a1 100644 --- a/drivers/net/sfc/sfc_tx.c +++ b/drivers/net/sfc/sfc_tx.c @@ -195,11 +195,11 @@ sfc_tx_qinit(struct sfc_adapter *sa, unsigned int sw_index, rc = sa->priv.dp_tx->qcreate(sa->eth_dev->data->port_id, sw_index, &RTE_ETH_DEV_TO_PCI(sa->eth_dev)->addr, - socket_id, &info, &txq->dp); + socket_id, &info, &txq_info->dp); if (rc != 0) goto fail_dp_tx_qinit; - evq->dp_txq = txq->dp; + evq->dp_txq = txq_info->dp; txq_info->state = SFC_TXQ_INITIALIZED; @@ -243,8 +243,8 @@ sfc_tx_qfini(struct sfc_adapter *sa, unsigned int sw_index) SFC_ASSERT(txq != NULL); SFC_ASSERT(txq_info->state == SFC_TXQ_INITIALIZED); - sa->priv.dp_tx->qdestroy(txq->dp); - txq->dp = NULL; + sa->priv.dp_tx->qdestroy(txq_info->dp); + txq_info->dp = NULL; txq_info->txq = NULL; txq_info->entries = 0; @@ -466,7 +466,7 @@ sfc_tx_qstart(struct sfc_adapter *sa, unsigned int sw_index) txq_info->state |= SFC_TXQ_STARTED; - rc = sa->priv.dp_tx->qstart(txq->dp, evq->read_ptr, desc_index); + rc = sa->priv.dp_tx->qstart(txq_info->dp, evq->read_ptr, desc_index); if (rc != 0) goto fail_dp_qstart; @@ -511,7 +511,7 @@ sfc_tx_qstop(struct sfc_adapter *sa, unsigned int sw_index) SFC_ASSERT(txq_info->state & SFC_TXQ_STARTED); - sa->priv.dp_tx->qstop(txq->dp, &txq->evq->read_ptr); + sa->priv.dp_tx->qstop(txq_info->dp, &txq->evq->read_ptr); /* * Retry TX queue flushing in case of flush failed or @@ -548,7 +548,7 @@ sfc_tx_qstop(struct sfc_adapter *sa, unsigned int sw_index) sfc_notice(sa, "TxQ %u flushed", sw_index); } - sa->priv.dp_tx->qreap(txq->dp); + sa->priv.dp_tx->qreap(txq_info->dp); txq_info->state = SFC_TXQ_INITIALIZED; diff --git a/drivers/net/sfc/sfc_tx.h b/drivers/net/sfc/sfc_tx.h index c3edd3a58..e5ea6df75 100644 --- a/drivers/net/sfc/sfc_tx.h +++ b/drivers/net/sfc/sfc_tx.h @@ -54,7 +54,6 @@ struct sfc_txq { unsigned int hw_index; struct sfc_evq *evq; efsys_mem_t mem; - struct sfc_dp_txq *dp; efx_txq_t *common; }; @@ -109,6 +108,7 @@ struct sfc_txq_info { unsigned int state; unsigned int entries; struct sfc_txq *txq; + struct sfc_dp_txq *dp; boolean_t deferred_start; boolean_t deferred_started; unsigned int free_thresh; From patchwork Thu Feb 7 12:17:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50182 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 1D9101B540; Thu, 7 Feb 2019 13:18:41 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id E66511B4BD for ; Thu, 7 Feb 2019 13:18:16 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 15EB4600053 for ; Thu, 7 Feb 2019 12:18:15 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:10 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:10 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI8rF013258 for ; Thu, 7 Feb 2019 12:18:08 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id CE9821613E4 for ; Thu, 7 Feb 2019 12:18:08 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:38 +0000 Message-ID: <1549541873-17403-16-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-5.194900-4.000000-10 X-TMASE-MatchedRID: TCPSmmY0AVPMHUInqqZ02h+WEMjoO9WWTJDl9FKHbrkaK6XhXABo9yH3 fZSwSQ1serb3e1hTuhFzZI042SBkozW+K/PcvqBrsTcWkxuDrdKVKmGUZ/WnkQqiCYa6w8tvWTF H84r4cDQEvqH635UJYlgVldL/B76CHxPMjOKY7A8LbigRnpKlKWxlRJiH4397u4y55aOoCkxkvt xnu2htzA+6zRbgLa/kIooLu5Vi3hvMvnwwvXCXZw== X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--5.194900-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541895-fApsC92lcLzo Subject: [dpdk-dev] [PATCH 15/30] net/sfc: support Tx descriptor status in secondary process 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" If Tx datapath supports multi-process, secondary process should be able to use Tx descriptor status API. Signed-off-by: Andrew Rybchenko --- doc/guides/rel_notes/release_19_05.rst | 1 + drivers/net/sfc/sfc_dp_tx.h | 3 +++ drivers/net/sfc/sfc_ethdev.c | 11 +++++++++-- drivers/net/sfc/sfc_tx.c | 15 +++++++++++++++ 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/doc/guides/rel_notes/release_19_05.rst b/doc/guides/rel_notes/release_19_05.rst index 93f28926a..6d65c8eae 100644 --- a/doc/guides/rel_notes/release_19_05.rst +++ b/doc/guides/rel_notes/release_19_05.rst @@ -60,6 +60,7 @@ New Features * Added support for Rx descriptor status and related API in a secondary process. + * Added support for Tx descriptor status API in a secondary process. Removed Items diff --git a/drivers/net/sfc/sfc_dp_tx.h b/drivers/net/sfc/sfc_dp_tx.h index c246871cd..fd492f21f 100644 --- a/drivers/net/sfc/sfc_dp_tx.h +++ b/drivers/net/sfc/sfc_dp_tx.h @@ -182,6 +182,9 @@ sfc_dp_find_tx_by_caps(struct sfc_dp_list *head, unsigned int avail_caps) return (p == NULL) ? NULL : container_of(p, struct sfc_dp_tx, dp); } +/** Get Tx datapath ops by the datapath TxQ handle */ +const struct sfc_dp_tx *sfc_dp_tx_by_dp_txq(const struct sfc_dp_txq *dp_txq); + extern struct sfc_dp_tx sfc_efx_tx; extern struct sfc_dp_tx sfc_ef10_tx; extern struct sfc_dp_tx sfc_ef10_simple_tx; diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 80a1d7a3d..c6e1e87ce 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -1167,13 +1167,19 @@ sfc_rx_descriptor_status(void *queue, uint16_t offset) return dp_rx->qdesc_status(dp_rxq, offset); } +/* + * The function is used by the secondary process as well. It must not + * use any process-local pointers from the adapter data. + */ static int sfc_tx_descriptor_status(void *queue, uint16_t offset) { struct sfc_dp_txq *dp_txq = queue; - struct sfc_txq *txq = sfc_txq_by_dp_txq(dp_txq); + const struct sfc_dp_tx *dp_tx; + + dp_tx = sfc_dp_tx_by_dp_txq(dp_txq); - return txq->evq->sa->priv.dp_tx->qdesc_status(dp_txq, offset); + return dp_tx->qdesc_status(dp_txq, offset); } static int @@ -1896,6 +1902,7 @@ static const struct eth_dev_ops sfc_eth_dev_secondary_ops = { .rx_queue_count = sfc_rx_queue_count, .rx_descriptor_done = sfc_rx_descriptor_done, .rx_descriptor_status = sfc_rx_descriptor_status, + .tx_descriptor_status = sfc_tx_descriptor_status, .rxq_info_get = sfc_rx_queue_info_get, .txq_info_get = sfc_tx_queue_info_get, }; diff --git a/drivers/net/sfc/sfc_tx.c b/drivers/net/sfc/sfc_tx.c index 1ee4e78a1..4357dbfd8 100644 --- a/drivers/net/sfc/sfc_tx.c +++ b/drivers/net/sfc/sfc_tx.c @@ -854,6 +854,21 @@ sfc_efx_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) return pkts_sent; } +const struct sfc_dp_tx * +sfc_dp_tx_by_dp_txq(const struct sfc_dp_txq *dp_txq) +{ + const struct sfc_dp_queue *dpq = &dp_txq->dpq; + struct rte_eth_dev *eth_dev; + struct sfc_adapter_priv *sap; + + SFC_ASSERT(rte_eth_dev_is_valid_port(dpq->port_id)); + eth_dev = &rte_eth_devices[dpq->port_id]; + + sap = sfc_adapter_priv_by_eth_dev(eth_dev); + + return sap->dp_tx; +} + struct sfc_txq_info * sfc_txq_info_by_dp_txq(const struct sfc_dp_txq *dp_txq) { From patchwork Thu Feb 7 12:17:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50176 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 95F961B50D; Thu, 7 Feb 2019 13:18:34 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 084D21B4BD for ; Thu, 7 Feb 2019 13:18:16 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id B4C7B60006A for ; Thu, 7 Feb 2019 12:18:14 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:10 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:10 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI84I013263 for ; Thu, 7 Feb 2019 12:18:08 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id DC1741613EB for ; Thu, 7 Feb 2019 12:18:08 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:39 +0000 Message-ID: <1549541873-17403-17-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-2.335600-4.000000-10 X-TMASE-MatchedRID: jW2Old1ajwBCl433rXObADXNObtCvUotcbniFtnyrsitj24Xqh0yXFYW wxB9tw0TEk5OvCnFzcr1ukgDazrcP294Ipa1otxouIwLnB3Aqp06rtY7v1CJp2TnlM+KC6GlpiJ Y/dpHPXz5/Z1kTsFBHhnHvHnQkZWJwdbU3akH5AzhuXUWQoMQt+8lj2kHOCDUEvoxTu3fj1vysw /jwA1LXeLzNWBegCW2wgn7iDBesS0nRE+fI6etkrxd5d1IIcBVDKONFoYunvoG8/bMQJi8MLSAU WmDyO3p2J2xLNpCZqlZbo1eArmwRiCpcCrEKiEKBpQppdOGWqaBkjjO2FNZ+KoWu33FSCn66r5P Qhx29DUG0+3lZBNmQtq4RBohbjorp8vX8tInq8s= X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--2.335600-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541895-DHn1uZZAvtJR Subject: [dpdk-dev] [PATCH 16/30] net/sfc: support RSS RETA and hash config get in secondary 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" RSS RETA query and hash configuration get functions use shared adapter data only. No libefx functions are called. Signed-off-by: Andrew Rybchenko --- doc/guides/rel_notes/release_19_05.rst | 2 ++ drivers/net/sfc/sfc_ethdev.c | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/doc/guides/rel_notes/release_19_05.rst b/doc/guides/rel_notes/release_19_05.rst index 6d65c8eae..1b7f14cb2 100644 --- a/doc/guides/rel_notes/release_19_05.rst +++ b/doc/guides/rel_notes/release_19_05.rst @@ -61,6 +61,8 @@ New Features * Added support for Rx descriptor status and related API in a secondary process. * Added support for Tx descriptor status API in a secondary process. + * Added support for RSS RETA and hash configuration get API in a secondary + process. Removed Items diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index c6e1e87ce..47450f6b2 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -1403,6 +1403,10 @@ sfc_dev_udp_tunnel_port_del(struct rte_eth_dev *dev, return sfc_dev_udp_tunnel_op(dev, tunnel_udp, SFC_UDP_TUNNEL_DEL_PORT); } +/* + * The function is used by the secondary process as well. It must not + * use any process-local pointers from the adapter data. + */ static int sfc_dev_rss_hash_conf_get(struct rte_eth_dev *dev, struct rte_eth_rss_conf *rss_conf) @@ -1503,6 +1507,10 @@ sfc_dev_rss_hash_update(struct rte_eth_dev *dev, return -rc; } +/* + * The function is used by the secondary process as well. It must not + * use any process-local pointers from the adapter data. + */ static int sfc_dev_rss_reta_query(struct rte_eth_dev *dev, struct rte_eth_rss_reta_entry64 *reta_conf, @@ -1903,6 +1911,8 @@ static const struct eth_dev_ops sfc_eth_dev_secondary_ops = { .rx_descriptor_done = sfc_rx_descriptor_done, .rx_descriptor_status = sfc_rx_descriptor_status, .tx_descriptor_status = sfc_tx_descriptor_status, + .reta_query = sfc_dev_rss_reta_query, + .rss_hash_conf_get = sfc_dev_rss_hash_conf_get, .rxq_info_get = sfc_rx_queue_info_get, .txq_info_get = sfc_tx_queue_info_get, }; From patchwork Thu Feb 7 12:17:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50179 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7DD1E1B51E; Thu, 7 Feb 2019 13:18:37 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 7862D1B4AF for ; Thu, 7 Feb 2019 13:18:16 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 3F439600053 for ; Thu, 7 Feb 2019 12:18:15 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:10 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:10 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI9SU013267 for ; Thu, 7 Feb 2019 12:18:09 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id E9D111613ED for ; Thu, 7 Feb 2019 12:18:08 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:40 +0000 Message-ID: <1549541873-17403-18-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-3.603300-4.000000-10 X-TMASE-MatchedRID: mvQ5OXqkleGIc+vz4Wow0yZm6wdY+F8KbnWMzHijq6TRLEyE6G4DRHB4 4IkzjfYy5pSjkyGV5DbxKVCKs1uu4vWfKuqzviIe4pdq9sdj8LV9LQinZ4QefPcjNeVeWlqY+gt Hj7OwNO0e17FnX7/0+Qyexi1g5WazxahPXKJHjIV1gViFuV4aQ3z6PkzkQA97PaIUY7EmV6/WMV D6WRl/yFbHJARRHYtX7Tae6OjOTNI5ViEUZxoy4wAD0FqlZdom0b4rJ92tmtF/d7a9VsfzMGYfz Nl+uie3wL6SxPpr1/I= X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--3.603300-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541895-gONXnM5TOIV9 Subject: [dpdk-dev] [PATCH 17/30] net/sfc: remove unnecessary functions to get RxQ index 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" RxQ index is stored in generic datapath queue structure. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc_ethdev.c | 2 +- drivers/net/sfc/sfc_rx.h | 12 ------------ 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 47450f6b2..f3316e143 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -442,7 +442,7 @@ sfc_rx_queue_release(void *queue) sa = rxq->evq->sa; sfc_adapter_lock(sa); - sw_index = sfc_rxq_sw_index(rxq); + sw_index = dp_rxq->dpq.queue_id; sfc_log_init(sa, "RxQ=%u", sw_index); diff --git a/drivers/net/sfc/sfc_rx.h b/drivers/net/sfc/sfc_rx.h index 9c946d7cb..963d487c0 100644 --- a/drivers/net/sfc/sfc_rx.h +++ b/drivers/net/sfc/sfc_rx.h @@ -61,18 +61,6 @@ struct sfc_rxq { uint16_t buf_size; }; -static inline unsigned int -sfc_rxq_sw_index_by_hw_index(unsigned int hw_index) -{ - return hw_index; -} - -static inline unsigned int -sfc_rxq_sw_index(const struct sfc_rxq *rxq) -{ - return sfc_rxq_sw_index_by_hw_index(rxq->hw_index); -} - struct sfc_rxq *sfc_rxq_by_dp_rxq(const struct sfc_dp_rxq *dp_rxq); /** From patchwork Thu Feb 7 12:17:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50180 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id BE33F1B52A; Thu, 7 Feb 2019 13:18:38 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id CB9921B4BC for ; Thu, 7 Feb 2019 13:18:16 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 921FE600061 for ; Thu, 7 Feb 2019 12:18:15 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:10 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:10 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI9C8013271 for ; Thu, 7 Feb 2019 12:18:09 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 04C971613E4 for ; Thu, 7 Feb 2019 12:18:09 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:41 +0000 Message-ID: <1549541873-17403-19-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-4.282400-4.000000-10 X-TMASE-MatchedRID: ELLiHzyDwZOIc+vz4Wow0yZm6wdY+F8KbveZreOw8zYs/uUAk6xP7Gb6 PphVtfZgalyDl//i2XClEtDJyVR88h8TzIzimOwPC24oEZ6SpSmb4wHqRpnaDsnuTpXv+72pI/v VEZo8Qh8hq3dQI+BC5z7cnUCd9EG2NAfrWmy3pC6Rh4r3P9Fhzj+hiCfgPxnCt/wseoOdvKO32T gkNV8OKy85Kr6fERC1qB48aYgTBc7/hQLifsPe5YmXq2KC9h8vC8XKjsVbJjU= X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--4.282400-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541896-k2_ynuLmOkNH Subject: [dpdk-dev] [PATCH 18/30] net/sfc: remove unnecessary functions to get TxQ index 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" TxQ index is stored in generic datapath queue structure. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc_ethdev.c | 2 +- drivers/net/sfc/sfc_tx.h | 12 ------------ 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index f3316e143..a00ea9ce4 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -491,7 +491,7 @@ sfc_tx_queue_release(void *queue) return; txq = sfc_txq_by_dp_txq(dp_txq); - sw_index = sfc_txq_sw_index(txq); + sw_index = dp_txq->dpq.queue_id; SFC_ASSERT(txq->evq != NULL); sa = txq->evq->sa; diff --git a/drivers/net/sfc/sfc_tx.h b/drivers/net/sfc/sfc_tx.h index e5ea6df75..2d21e6e83 100644 --- a/drivers/net/sfc/sfc_tx.h +++ b/drivers/net/sfc/sfc_tx.h @@ -57,18 +57,6 @@ struct sfc_txq { efx_txq_t *common; }; -static inline unsigned int -sfc_txq_sw_index_by_hw_index(unsigned int hw_index) -{ - return hw_index; -} - -static inline unsigned int -sfc_txq_sw_index(const struct sfc_txq *txq) -{ - return sfc_txq_sw_index_by_hw_index(txq->hw_index); -} - struct sfc_txq *sfc_txq_by_dp_txq(const struct sfc_dp_txq *dp_txq); /** From patchwork Thu Feb 7 12:17:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50184 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 273E61B55A; Thu, 7 Feb 2019 13:18:43 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 289981B4C7 for ; Thu, 7 Feb 2019 13:18:18 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id E107860005C for ; Thu, 7 Feb 2019 12:18:16 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:10 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:10 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI9Z2013275 for ; Thu, 7 Feb 2019 12:18:09 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 15E0D1613EB for ; Thu, 7 Feb 2019 12:18:09 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:42 +0000 Message-ID: <1549541873-17403-20-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-2.380400-4.000000-10 X-TMASE-MatchedRID: nUPEeKf28usX/ky8TX34Oh+WEMjoO9WWTJDl9FKHbrnuaWurQfPpTfXE AIDW+JUPreNj5HHxl211Wshy4GROjd+rqUqQYDChsK+WWVTsOXXt/okBLaEo+G3D6f6IpbLI0EE 528uys4VJY8AYrJ6k6NcmFD18waF5v94QsDvR6Nx2hM5Lw8u+sBNtTUpgahCnCgNjqBgJU5PSjo JfgzSjg5+A2XixGIT0bX/IR8wWTaiR9GF2J2xqMxRFJJyf5BJe3QfwsVk0UbsIoUKaF27lxYE97 keJJuFzRK5SdGVqESNnKoStUC3zJMXaFiL66EzD9bGrhXv6MUdC6+63YyX4NIMdvQ+VPga4UOdk T47j5bABOKNjaZ7b3ADlJLZdGMoUz5pk4iF6iVS+9SjSFk+GXMz/jdQvUwlH+rL5VW+ofZc= X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10-2.380400-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541897-3m02Uq8ULGXQ Subject: [dpdk-dev] [PATCH 19/30] net/sfc: remove RxQ control from shared RxQ info 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" libefx is not multi-process aware and all related structures should be moved to primary process only. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc.h | 3 ++ drivers/net/sfc/sfc_ethdev.c | 2 +- drivers/net/sfc/sfc_flow.c | 8 ++-- drivers/net/sfc/sfc_rx.c | 77 ++++++++++++++++++++++-------------- drivers/net/sfc/sfc_rx.h | 4 +- 5 files changed, 57 insertions(+), 37 deletions(-) diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h index f04127bbc..f19a9dafb 100644 --- a/drivers/net/sfc/sfc.h +++ b/drivers/net/sfc/sfc.h @@ -110,6 +110,8 @@ struct sfc_intr { boolean_t lsc_intr; }; +struct sfc_rxq; + struct sfc_rxq_info; struct sfc_txq_info; struct sfc_dp_rx; @@ -256,6 +258,7 @@ struct sfc_adapter { unsigned int rxq_count; struct sfc_rxq_info *rxq_info; + struct sfc_rxq *rxq_ctrl; unsigned int txq_count; struct sfc_txq_info *txq_info; diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index a00ea9ce4..3d38bf661 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -1196,7 +1196,7 @@ sfc_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id) if (sa->state != SFC_ADAPTER_STARTED) goto fail_not_started; - if (sa->rxq_info[rx_queue_id].rxq == NULL) + if (sa->rxq_info[rx_queue_id].state != SFC_RXQ_INITIALIZED) goto fail_not_setup; rc = sfc_rx_qstart(sa, rx_queue_id); diff --git a/drivers/net/sfc/sfc_flow.c b/drivers/net/sfc/sfc_flow.c index 41d388735..e20c2e612 100644 --- a/drivers/net/sfc/sfc_flow.c +++ b/drivers/net/sfc/sfc_flow.c @@ -1244,7 +1244,7 @@ sfc_flow_parse_queue(struct sfc_adapter *sa, if (queue->index >= sa->rxq_count) return -EINVAL; - rxq = sa->rxq_info[queue->index].rxq; + rxq = &sa->rxq_ctrl[queue->index]; flow->spec.template.efs_dmaq_id = (uint16_t)rxq->hw_index; return 0; @@ -1269,7 +1269,7 @@ sfc_flow_parse_rss(struct sfc_adapter *sa, return -EINVAL; rxq_sw_index = sa->rxq_count - 1; - rxq = sa->rxq_info[rxq_sw_index].rxq; + rxq = &sa->rxq_ctrl[rxq_sw_index]; rxq_hw_index_min = rxq->hw_index; rxq_hw_index_max = 0; @@ -1279,7 +1279,7 @@ sfc_flow_parse_rss(struct sfc_adapter *sa, if (rxq_sw_index >= sa->rxq_count) return -EINVAL; - rxq = sa->rxq_info[rxq_sw_index].rxq; + rxq = &sa->rxq_ctrl[rxq_sw_index]; if (rxq->hw_index < rxq_hw_index_min) rxq_hw_index_min = rxq->hw_index; @@ -1344,7 +1344,7 @@ sfc_flow_parse_rss(struct sfc_adapter *sa, for (i = 0; i < RTE_DIM(sfc_rss_conf->rss_tbl); ++i) { unsigned int nb_queues = action_rss->queue_num; unsigned int rxq_sw_index = action_rss->queue[i % nb_queues]; - struct sfc_rxq *rxq = sa->rxq_info[rxq_sw_index].rxq; + struct sfc_rxq *rxq = &sa->rxq_ctrl[rxq_sw_index]; sfc_rss_conf->rss_tbl[i] = rxq->hw_index - rxq_hw_index_min; } diff --git a/drivers/net/sfc/sfc_rx.c b/drivers/net/sfc/sfc_rx.c index 3c1e77974..eb4875fec 100644 --- a/drivers/net/sfc/sfc_rx.c +++ b/drivers/net/sfc/sfc_rx.c @@ -395,12 +395,17 @@ sfc_rxq_info_by_dp_rxq(const struct sfc_dp_rxq *dp_rxq) struct sfc_rxq * sfc_rxq_by_dp_rxq(const struct sfc_dp_rxq *dp_rxq) { - struct sfc_rxq_info *rxq_info; + const struct sfc_dp_queue *dpq = &dp_rxq->dpq; + struct rte_eth_dev *eth_dev; + struct sfc_adapter *sa; - rxq_info = sfc_rxq_info_by_dp_rxq(dp_rxq); + SFC_ASSERT(rte_eth_dev_is_valid_port(dpq->port_id)); + eth_dev = &rte_eth_devices[dpq->port_id]; + + sa = eth_dev->data->dev_private; - SFC_ASSERT(rxq_info->rxq != NULL); - return rxq_info->rxq; + SFC_ASSERT(dpq->queue_id < sa->rxq_count); + return &sa->rxq_ctrl[dpq->queue_id]; } static sfc_dp_rx_qsize_up_rings_t sfc_efx_rx_qsize_up_rings; @@ -563,9 +568,10 @@ sfc_rx_qflush(struct sfc_adapter *sa, unsigned int sw_index) int rc; rxq_info = &sa->rxq_info[sw_index]; - rxq = rxq_info->rxq; SFC_ASSERT(rxq_info->state & SFC_RXQ_STARTED); + rxq = &sa->rxq_ctrl[sw_index]; + /* * Retry Rx queue flushing in the case of flush failed or * timeout. In the worst case it can delay for 6 seconds. @@ -674,10 +680,9 @@ sfc_rx_qstart(struct sfc_adapter *sa, unsigned int sw_index) SFC_ASSERT(sw_index < sa->rxq_count); rxq_info = &sa->rxq_info[sw_index]; - rxq = rxq_info->rxq; - SFC_ASSERT(rxq != NULL); SFC_ASSERT(rxq_info->state == SFC_RXQ_INITIALIZED); + rxq = &sa->rxq_ctrl[sw_index]; evq = rxq->evq; rc = sfc_ev_qstart(evq, sfc_evq_index_by_rxq_sw_index(sa, sw_index)); @@ -764,9 +769,8 @@ sfc_rx_qstop(struct sfc_adapter *sa, unsigned int sw_index) SFC_ASSERT(sw_index < sa->rxq_count); rxq_info = &sa->rxq_info[sw_index]; - rxq = rxq_info->rxq; - if (rxq == NULL || rxq_info->state == SFC_RXQ_INITIALIZED) + if (rxq_info->state == SFC_RXQ_INITIALIZED) return; SFC_ASSERT(rxq_info->state & SFC_RXQ_STARTED); @@ -774,6 +778,7 @@ sfc_rx_qstop(struct sfc_adapter *sa, unsigned int sw_index) sa->eth_dev->data->rx_queue_state[sw_index] = RTE_ETH_QUEUE_STATE_STOPPED; + rxq = &sa->rxq_ctrl[sw_index]; sa->priv.dp_rx->qstop(rxq_info->dp, &rxq->evq->read_ptr); if (sw_index == 0) @@ -1026,14 +1031,7 @@ sfc_rx_qinit(struct sfc_adapter *sa, unsigned int sw_index, if (rc != 0) goto fail_ev_qinit; - rc = ENOMEM; - rxq = rte_zmalloc_socket("sfc-rxq", sizeof(*rxq), RTE_CACHE_LINE_SIZE, - socket_id); - if (rxq == NULL) - goto fail_rxq_alloc; - - rxq_info->rxq = rxq; - + rxq = &sa->rxq_ctrl[sw_index]; rxq->evq = evq; rxq->hw_index = sw_index; rxq_info->refill_threshold = @@ -1083,10 +1081,6 @@ sfc_rx_qinit(struct sfc_adapter *sa, unsigned int sw_index, sfc_dma_free(sa, &rxq->mem); fail_dma_alloc: - rxq_info->rxq = NULL; - rte_free(rxq); - -fail_rxq_alloc: sfc_ev_qfini(evq); fail_ev_qinit: @@ -1109,21 +1103,20 @@ sfc_rx_qfini(struct sfc_adapter *sa, unsigned int sw_index) rxq_info = &sa->rxq_info[sw_index]; - rxq = rxq_info->rxq; SFC_ASSERT(rxq_info->state == SFC_RXQ_INITIALIZED); sa->priv.dp_rx->qdestroy(rxq_info->dp); rxq_info->dp = NULL; - rxq_info->rxq = NULL; + rxq_info->state &= ~SFC_RXQ_INITIALIZED; rxq_info->entries = 0; + rxq = &sa->rxq_ctrl[sw_index]; + sfc_dma_free(sa, &rxq->mem); sfc_ev_qfini(rxq->evq); rxq->evq = NULL; - - rte_free(rxq); } /* @@ -1366,7 +1359,7 @@ sfc_rx_start(struct sfc_adapter *sa) goto fail_rss_config; for (sw_index = 0; sw_index < sa->rxq_count; ++sw_index) { - if (sa->rxq_info[sw_index].rxq != NULL && + if (sa->rxq_info[sw_index].state == SFC_RXQ_INITIALIZED && (!sa->rxq_info[sw_index].deferred_start || sa->rxq_info[sw_index].deferred_started)) { rc = sfc_rx_qstart(sa, sw_index); @@ -1398,7 +1391,7 @@ sfc_rx_stop(struct sfc_adapter *sa) sw_index = sa->rxq_count; while (sw_index-- > 0) { - if (sa->rxq_info[sw_index].rxq != NULL) + if (sa->rxq_info[sw_index].state & SFC_RXQ_STARTED) sfc_rx_qstop(sa, sw_index); } @@ -1476,7 +1469,7 @@ sfc_rx_fini_queues(struct sfc_adapter *sa, unsigned int nb_rx_queues) sw_index = sa->rxq_count; while (--sw_index >= (int)nb_rx_queues) { - if (sa->rxq_info[sw_index].rxq != NULL) + if (sa->rxq_info[sw_index].state & SFC_RXQ_INITIALIZED) sfc_rx_qfini(sa, sw_index); } @@ -1516,8 +1509,18 @@ sfc_rx_configure(struct sfc_adapter *sa) sa->socket_id); if (sa->rxq_info == NULL) goto fail_rxqs_alloc; + + /* + * Allocate primary process only RxQ control from heap + * since it should not be shared. + */ + rc = ENOMEM; + sa->rxq_ctrl = calloc(nb_rx_queues, sizeof(sa->rxq_ctrl[0])); + if (sa->rxq_ctrl == NULL) + goto fail_rxqs_ctrl_alloc; } else { struct sfc_rxq_info *new_rxq_info; + struct sfc_rxq *new_rxq_ctrl; if (nb_rx_queues < sa->rxq_count) sfc_rx_fini_queues(sa, nb_rx_queues); @@ -1529,11 +1532,22 @@ sfc_rx_configure(struct sfc_adapter *sa) if (new_rxq_info == NULL && nb_rx_queues > 0) goto fail_rxqs_realloc; + rc = ENOMEM; + new_rxq_ctrl = realloc(sa->rxq_ctrl, + nb_rx_queues * sizeof(sa->rxq_ctrl[0])); + if (new_rxq_ctrl == NULL && nb_rx_queues > 0) + goto fail_rxqs_ctrl_realloc; + sa->rxq_info = new_rxq_info; - if (nb_rx_queues > sa->rxq_count) + sa->rxq_ctrl = new_rxq_ctrl; + if (nb_rx_queues > sa->rxq_count) { memset(&sa->rxq_info[sa->rxq_count], 0, (nb_rx_queues - sa->rxq_count) * sizeof(sa->rxq_info[0])); + memset(&sa->rxq_ctrl[sa->rxq_count], 0, + (nb_rx_queues - sa->rxq_count) * + sizeof(sa->rxq_ctrl[0])); + } } while (sa->rxq_count < nb_rx_queues) { @@ -1565,7 +1579,9 @@ sfc_rx_configure(struct sfc_adapter *sa) fail_rx_process_adv_conf_rss: fail_rx_qinit_info: +fail_rxqs_ctrl_realloc: fail_rxqs_realloc: +fail_rxqs_ctrl_alloc: fail_rxqs_alloc: sfc_rx_close(sa); @@ -1588,6 +1604,9 @@ sfc_rx_close(struct sfc_adapter *sa) rss->channels = 0; + free(sa->rxq_ctrl); + sa->rxq_ctrl = NULL; + rte_free(sa->rxq_info); sa->rxq_info = NULL; } diff --git a/drivers/net/sfc/sfc_rx.h b/drivers/net/sfc/sfc_rx.h index 963d487c0..73b70249c 100644 --- a/drivers/net/sfc/sfc_rx.h +++ b/drivers/net/sfc/sfc_rx.h @@ -50,8 +50,7 @@ enum sfc_rxq_state_bit { }; /** - * Receive queue control information. - * Allocated on the socket specified on the queue setup. + * Receive queue control primary process-only information. */ struct sfc_rxq { struct sfc_evq *evq; @@ -110,7 +109,6 @@ struct sfc_rxq_info { unsigned int entries; efx_rxq_type_t type; unsigned int type_flags; - struct sfc_rxq *rxq; struct sfc_dp_rxq *dp; boolean_t deferred_start; boolean_t deferred_started; From patchwork Thu Feb 7 12:17:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50183 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 594131B555; Thu, 7 Feb 2019 13:18:42 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id E6C0F1B4B6 for ; Thu, 7 Feb 2019 13:18:17 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id A29D5600067 for ; Thu, 7 Feb 2019 12:18:16 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:10 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:10 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI9M5013280 for ; Thu, 7 Feb 2019 12:18:09 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 244C61613E4 for ; Thu, 7 Feb 2019 12:18:09 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:43 +0000 Message-ID: <1549541873-17403-21-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-2.889200-4.000000-10 X-TMASE-MatchedRID: 15UE9zINTirW5rPMDq6HbwPZZctd3P4BlSphlGf1p5ES+jFO7d+PWyxV Tnd/2+hkO9d867AEK2j+qrXTNqMyZjd/MTfApr+s5O5PclyYqqrt/okBLaEo+HPBWZjlMys2ixP 77M1esQwrVPAnGHaZeJ6uWrWgXC9Fsk3Xm9yiC75pR7+L0B6mE30tCKdnhB589yM15V5aWpj6C0 ePs7A07QkL5VmLaBARtxJbZoBvHP/6fTliHLjX1gh/V/SaZNkXdeSoST5RxXKoIpMziCqFxj7gC +SVb7ZITseBaeP9VOyH2wUPSfLYyj+terldlHrIAAPQWqVl2ibRvisn3a2a0X93tr1Wx/MwKa3j 8X0o5Xs= X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--2.889200-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541897-frLjBHmD_EcN Subject: [dpdk-dev] [PATCH 20/30] net/sfc: remove TxQ control from shared TxQ info 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" libefx is not multi-process aware and all related structures should be moved to primary process only. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc.c | 2 +- drivers/net/sfc/sfc.h | 2 + drivers/net/sfc/sfc_ethdev.c | 2 +- drivers/net/sfc/sfc_tx.c | 75 +++++++++++++++++++++--------------- drivers/net/sfc/sfc_tx.h | 5 +-- 5 files changed, 51 insertions(+), 35 deletions(-) diff --git a/drivers/net/sfc/sfc.c b/drivers/net/sfc/sfc.c index 63bc0a568..dd662df0d 100644 --- a/drivers/net/sfc/sfc.c +++ b/drivers/net/sfc/sfc.c @@ -280,7 +280,7 @@ sfc_set_fw_subvariant(struct sfc_adapter *sa) for (txq_index = 0; txq_index < sa->txq_count; ++txq_index) { struct sfc_txq_info *txq_info = &sa->txq_info[txq_index]; - if (txq_info->txq != NULL) + if (txq_info->state & SFC_TXQ_INITIALIZED) tx_offloads |= txq_info->offloads; } diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h index f19a9dafb..7e95170bc 100644 --- a/drivers/net/sfc/sfc.h +++ b/drivers/net/sfc/sfc.h @@ -111,6 +111,7 @@ struct sfc_intr { }; struct sfc_rxq; +struct sfc_txq; struct sfc_rxq_info; struct sfc_txq_info; @@ -262,6 +263,7 @@ struct sfc_adapter { unsigned int txq_count; struct sfc_txq_info *txq_info; + struct sfc_txq *txq_ctrl; boolean_t tso; diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 3d38bf661..aa857ec74 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -1248,7 +1248,7 @@ sfc_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id) if (sa->state != SFC_ADAPTER_STARTED) goto fail_not_started; - if (sa->txq_info[tx_queue_id].txq == NULL) + if (sa->txq_info[tx_queue_id].state != SFC_TXQ_INITIALIZED) goto fail_not_setup; rc = sfc_tx_qstart(sa, tx_queue_id); diff --git a/drivers/net/sfc/sfc_tx.c b/drivers/net/sfc/sfc_tx.c index 4357dbfd8..94baf4530 100644 --- a/drivers/net/sfc/sfc_tx.c +++ b/drivers/net/sfc/sfc_tx.c @@ -159,13 +159,7 @@ sfc_tx_qinit(struct sfc_adapter *sa, unsigned int sw_index, if (rc != 0) goto fail_ev_qinit; - rc = ENOMEM; - txq = rte_zmalloc_socket("sfc-txq", sizeof(*txq), 0, socket_id); - if (txq == NULL) - goto fail_txq_alloc; - - txq_info->txq = txq; - + txq = &sa->txq_ctrl[sw_index]; txq->hw_index = sw_index; txq->evq = evq; txq_info->free_thresh = @@ -211,10 +205,6 @@ sfc_tx_qinit(struct sfc_adapter *sa, unsigned int sw_index, sfc_dma_free(sa, &txq->mem); fail_dma_alloc: - txq_info->txq = NULL; - rte_free(txq); - -fail_txq_alloc: sfc_ev_qfini(evq); fail_ev_qinit: @@ -239,22 +229,20 @@ sfc_tx_qfini(struct sfc_adapter *sa, unsigned int sw_index) txq_info = &sa->txq_info[sw_index]; - txq = txq_info->txq; - SFC_ASSERT(txq != NULL); SFC_ASSERT(txq_info->state == SFC_TXQ_INITIALIZED); sa->priv.dp_tx->qdestroy(txq_info->dp); txq_info->dp = NULL; - txq_info->txq = NULL; + txq_info->state &= ~SFC_TXQ_INITIALIZED; txq_info->entries = 0; + txq = &sa->txq_ctrl[sw_index]; + sfc_dma_free(sa, &txq->mem); sfc_ev_qfini(txq->evq); txq->evq = NULL; - - rte_free(txq); } static int @@ -314,7 +302,7 @@ sfc_tx_fini_queues(struct sfc_adapter *sa, unsigned int nb_tx_queues) sw_index = sa->txq_count; while (--sw_index >= (int)nb_tx_queues) { - if (sa->txq_info[sw_index].txq != NULL) + if (sa->txq_info[sw_index].state & SFC_TXQ_INITIALIZED) sfc_tx_qfini(sa, sw_index); } @@ -355,8 +343,18 @@ sfc_tx_configure(struct sfc_adapter *sa) sa->socket_id); if (sa->txq_info == NULL) goto fail_txqs_alloc; + + /* + * Allocate primary process only TxQ control from heap + * since it should not be shared. + */ + rc = ENOMEM; + sa->txq_ctrl = calloc(nb_tx_queues, sizeof(sa->txq_ctrl[0])); + if (sa->txq_ctrl == NULL) + goto fail_txqs_ctrl_alloc; } else { struct sfc_txq_info *new_txq_info; + struct sfc_txq *new_txq_ctrl; if (nb_tx_queues < sa->txq_count) sfc_tx_fini_queues(sa, nb_tx_queues); @@ -367,11 +365,21 @@ sfc_tx_configure(struct sfc_adapter *sa) if (new_txq_info == NULL && nb_tx_queues > 0) goto fail_txqs_realloc; + new_txq_ctrl = realloc(sa->txq_ctrl, + nb_tx_queues * sizeof(sa->txq_ctrl[0])); + if (new_txq_ctrl == NULL && nb_tx_queues > 0) + goto fail_txqs_ctrl_realloc; + sa->txq_info = new_txq_info; - if (nb_tx_queues > sa->txq_count) + sa->txq_ctrl = new_txq_ctrl; + if (nb_tx_queues > sa->txq_count) { memset(&sa->txq_info[sa->txq_count], 0, (nb_tx_queues - sa->txq_count) * sizeof(sa->txq_info[0])); + memset(&sa->txq_ctrl[sa->txq_count], 0, + (nb_tx_queues - sa->txq_count) * + sizeof(sa->txq_ctrl[0])); + } } while (sa->txq_count < nb_tx_queues) { @@ -386,7 +394,9 @@ sfc_tx_configure(struct sfc_adapter *sa) return 0; fail_tx_qinit_info: +fail_txqs_ctrl_realloc: fail_txqs_realloc: +fail_txqs_ctrl_alloc: fail_txqs_alloc: sfc_tx_close(sa); @@ -401,6 +411,9 @@ sfc_tx_close(struct sfc_adapter *sa) { sfc_tx_fini_queues(sa, 0); + free(sa->txq_ctrl); + sa->txq_ctrl = NULL; + rte_free(sa->txq_info); sa->txq_info = NULL; } @@ -423,11 +436,9 @@ sfc_tx_qstart(struct sfc_adapter *sa, unsigned int sw_index) SFC_ASSERT(sw_index < sa->txq_count); txq_info = &sa->txq_info[sw_index]; - txq = txq_info->txq; - - SFC_ASSERT(txq != NULL); SFC_ASSERT(txq_info->state == SFC_TXQ_INITIALIZED); + txq = &sa->txq_ctrl[sw_index]; evq = txq->evq; rc = sfc_ev_qstart(evq, sfc_evq_index_by_txq_sw_index(sa, sw_index)); @@ -504,13 +515,12 @@ sfc_tx_qstop(struct sfc_adapter *sa, unsigned int sw_index) SFC_ASSERT(sw_index < sa->txq_count); txq_info = &sa->txq_info[sw_index]; - txq = txq_info->txq; - - if (txq == NULL || txq_info->state == SFC_TXQ_INITIALIZED) + if (txq_info->state == SFC_TXQ_INITIALIZED) return; SFC_ASSERT(txq_info->state & SFC_TXQ_STARTED); + txq = &sa->txq_ctrl[sw_index]; sa->priv.dp_tx->qstop(txq_info->dp, &txq->evq->read_ptr); /* @@ -583,7 +593,7 @@ sfc_tx_start(struct sfc_adapter *sa) goto fail_efx_tx_init; for (sw_index = 0; sw_index < sa->txq_count; ++sw_index) { - if (sa->txq_info[sw_index].txq != NULL && + if (sa->txq_info[sw_index].state == SFC_TXQ_INITIALIZED && (!(sa->txq_info[sw_index].deferred_start) || sa->txq_info[sw_index].deferred_started)) { rc = sfc_tx_qstart(sa, sw_index); @@ -614,7 +624,7 @@ sfc_tx_stop(struct sfc_adapter *sa) sw_index = sa->txq_count; while (sw_index-- > 0) { - if (sa->txq_info[sw_index].txq != NULL) + if (sa->txq_info[sw_index].state & SFC_TXQ_STARTED) sfc_tx_qstop(sa, sw_index); } @@ -888,12 +898,17 @@ sfc_txq_info_by_dp_txq(const struct sfc_dp_txq *dp_txq) struct sfc_txq * sfc_txq_by_dp_txq(const struct sfc_dp_txq *dp_txq) { - struct sfc_txq_info *txq_info; + const struct sfc_dp_queue *dpq = &dp_txq->dpq; + struct rte_eth_dev *eth_dev; + struct sfc_adapter *sa; - txq_info = sfc_txq_info_by_dp_txq(dp_txq); + SFC_ASSERT(rte_eth_dev_is_valid_port(dpq->port_id)); + eth_dev = &rte_eth_devices[dpq->port_id]; - SFC_ASSERT(txq_info->txq != NULL); - return txq_info->txq; + sa = eth_dev->data->dev_private; + + SFC_ASSERT(dpq->queue_id < sa->txq_count); + return &sa->txq_ctrl[dpq->queue_id]; } static sfc_dp_tx_qsize_up_rings_t sfc_efx_tx_qsize_up_rings; diff --git a/drivers/net/sfc/sfc_tx.h b/drivers/net/sfc/sfc_tx.h index 2d21e6e83..d0e751a26 100644 --- a/drivers/net/sfc/sfc_tx.h +++ b/drivers/net/sfc/sfc_tx.h @@ -47,8 +47,8 @@ enum sfc_txq_state_bit { }; /** - * Transmit queue control information. Not used on datapath. - * Allocated on the socket specified on the queue setup. + * Transmit queue control primary process-only information. + * Not used on datapath. */ struct sfc_txq { unsigned int hw_index; @@ -95,7 +95,6 @@ sfc_efx_txq_by_dp_txq(struct sfc_dp_txq *dp_txq) struct sfc_txq_info { unsigned int state; unsigned int entries; - struct sfc_txq *txq; struct sfc_dp_txq *dp; boolean_t deferred_start; boolean_t deferred_started; From patchwork Thu Feb 7 12:17:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50178 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7A3991B518; Thu, 7 Feb 2019 13:18:36 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 55B561B4B0 for ; Thu, 7 Feb 2019 13:18:16 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 686FC600061 for ; Thu, 7 Feb 2019 12:18:15 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:10 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:10 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI9fM013284 for ; Thu, 7 Feb 2019 12:18:09 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 317631613EB for ; Thu, 7 Feb 2019 12:18:09 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:44 +0000 Message-ID: <1549541873-17403-22-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-6.274000-4.000000-10 X-TMASE-MatchedRID: 8KqAZX9NEj5JI0Xw8qTX29bVO5cqfV4RXccelkX/ubB662jkTvVLlU8f Y4SH/55suYMRq2HC5hXijpjet3oGSGoifrpIp6QYDB+ErBr0bANKgIbix5+XxGJkJOQVCIpwJpy dtKGcwJzg8KMQOpnf1hyY12ilMLMM+L/XoupUTw5c/msUC5wFQYn4DdeD/uLNBm9f7S94IJyCv2 1ERZid9cF9H9ZT7pg4opcYHG4fpAe9F7NKcWMllW3NvezwBrVmv8yqWnJhUsGYh23xcUPEK6PFj JEFr+olwXCBO/GKkVqOhzOa6g8KrQk4mnyfHyGNUcwKSziUHLx4vCemPx8ZfpBS8kEyvSV4sJuw s5L5PbRDDKa3G4nrLQ== X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--6.274000-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541896-tXDmrJ3k6B4K Subject: [dpdk-dev] [PATCH 21/30] net/sfc: start to factor out multi-process shared data 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" sfc_adapter structure will become primary process only private data. Start to factor out shared data into dedicated structure which will become separate structure finally. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc.h | 15 +++++++++++++-- drivers/net/sfc/sfc_debug.h | 9 +++++---- drivers/net/sfc/sfc_ethdev.c | 8 ++++++-- drivers/net/sfc/sfc_log.h | 13 +++++++------ drivers/net/sfc/sfc_mcdi.c | 2 +- 5 files changed, 32 insertions(+), 15 deletions(-) diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h index 7e95170bc..766336f8c 100644 --- a/drivers/net/sfc/sfc.h +++ b/drivers/net/sfc/sfc.h @@ -174,8 +174,15 @@ struct sfc_rss { uint8_t key[EFX_RSS_KEY_SIZE]; }; +/* Adapter private data shared by primary and secondary processes */ +struct sfc_adapter_shared { + struct rte_pci_addr pci_addr; + uint16_t port_id; +}; + /* Adapter process private data */ struct sfc_adapter_priv { + struct sfc_adapter_shared *shared; const struct sfc_dp_rx *dp_rx; const struct sfc_dp_tx *dp_tx; uint32_t logtype_main; @@ -199,6 +206,12 @@ struct sfc_adapter { */ struct sfc_adapter_priv priv; + /* + * Temporary placeholder for multi-process shared data for + * transition. + */ + struct sfc_adapter_shared _shared; + /* * PMD setup and configuration is not thread safe. Since it is not * performance sensitive, it is better to guarantee thread-safety @@ -207,8 +220,6 @@ struct sfc_adapter { */ rte_spinlock_t lock; enum sfc_adapter_state state; - struct rte_pci_addr pci_addr; - uint16_t port_id; struct rte_eth_dev *eth_dev; struct rte_kvargs *kvargs; int socket_id; diff --git a/drivers/net/sfc/sfc_debug.h b/drivers/net/sfc/sfc_debug.h index 62f3937e8..ea1b43295 100644 --- a/drivers/net/sfc/sfc_debug.h +++ b/drivers/net/sfc/sfc_debug.h @@ -25,13 +25,14 @@ /* Log PMD message, automatically add prefix and \n */ #define sfc_panic(sa, fmt, args...) \ do { \ - const struct sfc_adapter *_sa = (sa); \ + const struct sfc_adapter_shared *_sas; \ \ + _sas = (sa)->priv.shared; \ rte_panic("sfc " PCI_PRI_FMT \ " #%" PRIu16 ": " fmt "\n", \ - _sa->pci_addr.domain, _sa->pci_addr.bus, \ - _sa->pci_addr.devid, _sa->pci_addr.function, \ - _sa->port_id, ##args); \ + _sas->pci_addr.domain, _sas->pci_addr.bus, \ + _sas->pci_addr.devid, _sas->pci_addr.function,\ + _sas->port_id, ##args); \ } while (0) #endif /* _SFC_DEBUG_H_ */ diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index aa857ec74..88dbecd46 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -2023,6 +2023,7 @@ static int sfc_eth_dev_init(struct rte_eth_dev *dev) { struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter_shared *sas; struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); uint32_t logtype_main; int rc; @@ -2035,6 +2036,9 @@ sfc_eth_dev_init(struct rte_eth_dev *dev) SFC_LOGTYPE_MAIN_STR, RTE_LOG_NOTICE); + sa->priv.shared = &sa->_shared; + sas = sa->priv.shared; + if (rte_eal_process_type() != RTE_PROC_PRIMARY) return -sfc_eth_dev_secondary_init(dev, logtype_main); @@ -2047,8 +2051,8 @@ sfc_eth_dev_init(struct rte_eth_dev *dev) dev->process_private = sa; /* Required for logging */ - sa->pci_addr = pci_dev->addr; - sa->port_id = dev->data->port_id; + sas->pci_addr = pci_dev->addr; + sas->port_id = dev->data->port_id; sa->priv.logtype_main = logtype_main; sa->eth_dev = dev; diff --git a/drivers/net/sfc/sfc_log.h b/drivers/net/sfc/sfc_log.h index 405cc2a26..97de9ae53 100644 --- a/drivers/net/sfc/sfc_log.h +++ b/drivers/net/sfc/sfc_log.h @@ -34,17 +34,18 @@ extern uint32_t sfc_logtype_driver; /* Log PMD message, automatically add prefix and \n */ #define SFC_LOG(sa, level, type, ...) \ do { \ - const struct sfc_adapter *__sa = (sa); \ + const struct sfc_adapter_shared *_sas; \ \ + _sas = (sa)->priv.shared; \ rte_log(level, type, \ RTE_FMT("PMD: sfc_efx " \ PCI_PRI_FMT " #%" PRIu16 \ ": " RTE_FMT_HEAD(__VA_ARGS__ ,) "\n", \ - __sa->pci_addr.domain, \ - __sa->pci_addr.bus, \ - __sa->pci_addr.devid, \ - __sa->pci_addr.function, \ - __sa->port_id, \ + _sas->pci_addr.domain, \ + _sas->pci_addr.bus, \ + _sas->pci_addr.devid, \ + _sas->pci_addr.function, \ + _sas->port_id, \ RTE_FMT_TAIL(__VA_ARGS__,))); \ } while (0) diff --git a/drivers/net/sfc/sfc_mcdi.c b/drivers/net/sfc/sfc_mcdi.c index e485e07d6..dede33688 100644 --- a/drivers/net/sfc/sfc_mcdi.c +++ b/drivers/net/sfc/sfc_mcdi.c @@ -256,7 +256,7 @@ sfc_mcdi_init(struct sfc_adapter *sa) if (rc != 0) goto fail_dma_alloc; - mcdi->logtype = sfc_register_logtype(&sa->pci_addr, + mcdi->logtype = sfc_register_logtype(&sa->priv.shared->pci_addr, SFC_LOGTYPE_MCDI_STR, RTE_LOG_NOTICE); From patchwork Thu Feb 7 12:17:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50185 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id E6A081B55F; Thu, 7 Feb 2019 13:18:43 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 4B7FD1B4C9 for ; Thu, 7 Feb 2019 13:18:18 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 1927A600057 for ; Thu, 7 Feb 2019 12:18:17 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:10 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:10 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI9J9013288 for ; Thu, 7 Feb 2019 12:18:09 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 3E2E61613E4 for ; Thu, 7 Feb 2019 12:18:09 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:45 +0000 Message-ID: <1549541873-17403-23-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-0.086500-4.000000-10 X-TMASE-MatchedRID: iMP5BsV0NcrqS7G2+aV4gmO43qcJKa+vSjyMfjCRfaPfUZT83lbkEOfO AF5/z/59PYw9javfqq5jtX6mE5W/EKF5AEN4ATBvEhGH3CRdKUWPkLWPE/SFuo1OuwjPrj0Eb1W 5p1u8tFzoeKOTEZFx86IYjKg3ZP+QP6r3lv2GeEum/Bn0aZ3AM1o0Sa3mjlr+myiLZetSf8mfop 0ytGwvXiq2rl3dzGQ1FdlkKSmICRvffNov+rQxrJTVjoH/tkVbo+b+cd3HS4fTbuEI4qY0ueh5+ t5ZGjrxExB0eqs6fhOGKiQRe9M5gEeBTfuk/jFfG9gFrduzbrAjoqQAvYDmRwy1ivD0G5PCpKZI 9GApJkzQfLyY6W+8Xu90JQgW5qyr X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10-0.086500-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541897-9h0aAaFmXx07 Subject: [dpdk-dev] [PATCH 22/30] net/sfc: move Rx/Tx datapath names to shared state 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" Prepare to make sfc_adapter primary process private data. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc.h | 21 +++++++++---------- drivers/net/sfc/sfc_ethdev.c | 39 +++++++++++++++++++----------------- 2 files changed, 31 insertions(+), 29 deletions(-) diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h index 766336f8c..890a04d0e 100644 --- a/drivers/net/sfc/sfc.h +++ b/drivers/net/sfc/sfc.h @@ -178,6 +178,9 @@ struct sfc_rss { struct sfc_adapter_shared { struct rte_pci_addr pci_addr; uint16_t port_id; + + char *dp_rx_name; + char *dp_tx_name; }; /* Adapter process private data */ @@ -281,19 +284,15 @@ struct sfc_adapter { uint32_t rxd_wait_timeout_ns; struct sfc_rss rss; +}; - /* - * Shared memory copy of the Rx datapath name to be used by - * the secondary process to find Rx datapath to be used. - */ - char *dp_rx_name; +static inline struct sfc_adapter_shared * +sfc_adapter_shared_by_eth_dev(struct rte_eth_dev *eth_dev) +{ + struct sfc_adapter *sa = eth_dev->data->dev_private; - /* - * Shared memory copy of the Tx datapath name to be used by - * the secondary process to find Tx datapath to be used. - */ - char *dp_tx_name; -}; + return sa->priv.shared; +} /* * Add wrapper functions to acquire/release lock to be able to remove or diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 88dbecd46..9f0036375 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -1768,6 +1768,7 @@ static int sfc_eth_dev_set_ops(struct rte_eth_dev *dev) { struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); const struct sfc_dp_rx *dp_rx; const struct sfc_dp_tx *dp_tx; const efx_nic_cfg_t *encp; @@ -1819,13 +1820,13 @@ sfc_eth_dev_set_ops(struct rte_eth_dev *dev) } } - sa->dp_rx_name = sfc_strdup(dp_rx->dp.name); - if (sa->dp_rx_name == NULL) { + sas->dp_rx_name = sfc_strdup(dp_rx->dp.name); + if (sas->dp_rx_name == NULL) { rc = ENOMEM; goto fail_dp_rx_name; } - sfc_notice(sa, "use %s Rx datapath", sa->dp_rx_name); + sfc_notice(sa, "use %s Rx datapath", sas->dp_rx_name); rc = sfc_kvargs_process(sa, SFC_KVARG_TX_DATAPATH, sfc_kvarg_string_handler, &tx_name); @@ -1856,13 +1857,13 @@ sfc_eth_dev_set_ops(struct rte_eth_dev *dev) } } - sa->dp_tx_name = sfc_strdup(dp_tx->dp.name); - if (sa->dp_tx_name == NULL) { + sas->dp_tx_name = sfc_strdup(dp_tx->dp.name); + if (sas->dp_tx_name == NULL) { rc = ENOMEM; goto fail_dp_tx_name; } - sfc_notice(sa, "use %s Tx datapath", sa->dp_tx_name); + sfc_notice(sa, "use %s Tx datapath", sas->dp_tx_name); sa->priv.dp_rx = dp_rx; sa->priv.dp_tx = dp_tx; @@ -1878,8 +1879,8 @@ sfc_eth_dev_set_ops(struct rte_eth_dev *dev) fail_dp_tx_caps: fail_dp_tx: fail_kvarg_tx_datapath: - rte_free(sa->dp_rx_name); - sa->dp_rx_name = NULL; + rte_free(sas->dp_rx_name); + sas->dp_rx_name = NULL; fail_dp_rx_name: fail_dp_rx_caps: @@ -1892,17 +1893,18 @@ static void sfc_eth_dev_clear_ops(struct rte_eth_dev *dev) { struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); dev->dev_ops = NULL; dev->rx_pkt_burst = NULL; dev->tx_pkt_burst = NULL; - rte_free(sa->dp_tx_name); - sa->dp_tx_name = NULL; + rte_free(sas->dp_tx_name); + sas->dp_tx_name = NULL; sa->priv.dp_tx = NULL; - rte_free(sa->dp_rx_name); - sa->dp_rx_name = NULL; + rte_free(sas->dp_rx_name); + sas->dp_rx_name = NULL; sa->priv.dp_rx = NULL; } @@ -1926,6 +1928,7 @@ sfc_eth_dev_secondary_init(struct rte_eth_dev *dev, uint32_t logtype_main) * in shared memory only. */ struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); struct sfc_adapter_priv *sap; const struct sfc_dp_rx *dp_rx; const struct sfc_dp_tx *dp_tx; @@ -1943,32 +1946,32 @@ sfc_eth_dev_secondary_init(struct rte_eth_dev *dev, uint32_t logtype_main) sap->logtype_main = logtype_main; - dp_rx = sfc_dp_find_rx_by_name(&sfc_dp_head, sa->dp_rx_name); + dp_rx = sfc_dp_find_rx_by_name(&sfc_dp_head, sas->dp_rx_name); if (dp_rx == NULL) { SFC_LOG(sa, RTE_LOG_ERR, logtype_main, - "cannot find %s Rx datapath", sa->dp_rx_name); + "cannot find %s Rx datapath", sas->dp_rx_name); rc = ENOENT; goto fail_dp_rx; } if (~dp_rx->features & SFC_DP_RX_FEAT_MULTI_PROCESS) { SFC_LOG(sa, RTE_LOG_ERR, logtype_main, "%s Rx datapath does not support multi-process", - sa->dp_rx_name); + sas->dp_rx_name); rc = EINVAL; goto fail_dp_rx_multi_process; } - dp_tx = sfc_dp_find_tx_by_name(&sfc_dp_head, sa->dp_tx_name); + dp_tx = sfc_dp_find_tx_by_name(&sfc_dp_head, sas->dp_tx_name); if (dp_tx == NULL) { SFC_LOG(sa, RTE_LOG_ERR, logtype_main, - "cannot find %s Tx datapath", sa->dp_tx_name); + "cannot find %s Tx datapath", sas->dp_tx_name); rc = ENOENT; goto fail_dp_tx; } if (~dp_tx->features & SFC_DP_TX_FEAT_MULTI_PROCESS) { SFC_LOG(sa, RTE_LOG_ERR, logtype_main, "%s Tx datapath does not support multi-process", - sa->dp_tx_name); + sas->dp_tx_name); rc = EINVAL; goto fail_dp_tx_multi_process; } From patchwork Thu Feb 7 12:17:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50181 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id D667F1B535; Thu, 7 Feb 2019 13:18:39 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id A3D831B4B6 for ; Thu, 7 Feb 2019 13:18:16 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id BBD2860005B for ; Thu, 7 Feb 2019 12:18:15 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:10 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:10 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI9I5013293 for ; Thu, 7 Feb 2019 12:18:09 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 4B0651613EB for ; Thu, 7 Feb 2019 12:18:09 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:46 +0000 Message-ID: <1549541873-17403-24-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-6.139800-4.000000-10 X-TMASE-MatchedRID: kdClzEoqFPdgNTke+eoi16b8GfRpncAzlSphlGf1p5HfTFKBkQVCslzm bZmEF1O409NQNrxIpFYBtjkcfRMmqSnPugGsN3p5fuyIS1Zjfrtzd7C7BtJobvgnJH5vm2+g584 AXn/P/n2DZO9Xbndg3h2a9WLoHBurxpw//AHNLCfhG1IOMb7PsIB84MMvKlea8JGeRYYBDDrY92 Zl64JjICuvI3j+W1HBXBw41v12Ht2PaFHMfVTC4BRFJJyf5BJe3QfwsVk0UbtuRXh7bFKB7ojLw F4bPHgHBwCCt2qcoHpffZztqnsXurwBcehf5XzEH8FerAT0dJY= X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--6.139800-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541896-hn2UcaOqBnxl Subject: [dpdk-dev] [PATCH 23/30] net/sfc: make main logging macro reusable in secondary 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" Logging should be supported in secondary process and now we have everything required to share at least main logging macro. sfc_adapter is going to become primary process only. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc_ethdev.c | 14 ++++---------- drivers/net/sfc/sfc_log.h | 28 ++++++++++++++-------------- 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 9f0036375..e30217cf1 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -1922,12 +1922,6 @@ static const struct eth_dev_ops sfc_eth_dev_secondary_ops = { static int sfc_eth_dev_secondary_init(struct rte_eth_dev *dev, uint32_t logtype_main) { - /* - * Device private data has really many process-local pointers. - * Below code should be extremely careful to use data located - * in shared memory only. - */ - struct sfc_adapter *sa = dev->data->dev_private; struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); struct sfc_adapter_priv *sap; const struct sfc_dp_rx *dp_rx; @@ -1948,13 +1942,13 @@ sfc_eth_dev_secondary_init(struct rte_eth_dev *dev, uint32_t logtype_main) dp_rx = sfc_dp_find_rx_by_name(&sfc_dp_head, sas->dp_rx_name); if (dp_rx == NULL) { - SFC_LOG(sa, RTE_LOG_ERR, logtype_main, + SFC_LOG(sas, RTE_LOG_ERR, logtype_main, "cannot find %s Rx datapath", sas->dp_rx_name); rc = ENOENT; goto fail_dp_rx; } if (~dp_rx->features & SFC_DP_RX_FEAT_MULTI_PROCESS) { - SFC_LOG(sa, RTE_LOG_ERR, logtype_main, + SFC_LOG(sas, RTE_LOG_ERR, logtype_main, "%s Rx datapath does not support multi-process", sas->dp_rx_name); rc = EINVAL; @@ -1963,13 +1957,13 @@ sfc_eth_dev_secondary_init(struct rte_eth_dev *dev, uint32_t logtype_main) dp_tx = sfc_dp_find_tx_by_name(&sfc_dp_head, sas->dp_tx_name); if (dp_tx == NULL) { - SFC_LOG(sa, RTE_LOG_ERR, logtype_main, + SFC_LOG(sas, RTE_LOG_ERR, logtype_main, "cannot find %s Tx datapath", sas->dp_tx_name); rc = ENOENT; goto fail_dp_tx; } if (~dp_tx->features & SFC_DP_TX_FEAT_MULTI_PROCESS) { - SFC_LOG(sa, RTE_LOG_ERR, logtype_main, + SFC_LOG(sas, RTE_LOG_ERR, logtype_main, "%s Tx datapath does not support multi-process", sas->dp_tx_name); rc = EINVAL; diff --git a/drivers/net/sfc/sfc_log.h b/drivers/net/sfc/sfc_log.h index 97de9ae53..62c4f4dd1 100644 --- a/drivers/net/sfc/sfc_log.h +++ b/drivers/net/sfc/sfc_log.h @@ -32,11 +32,10 @@ extern uint32_t sfc_logtype_driver; #define SFC_LOG_LEVEL_MCDI RTE_LOG_INFO /* Log PMD message, automatically add prefix and \n */ -#define SFC_LOG(sa, level, type, ...) \ +#define SFC_LOG(sas, level, type, ...) \ do { \ - const struct sfc_adapter_shared *_sas; \ + const struct sfc_adapter_shared *_sas = (sas); \ \ - _sas = (sa)->priv.shared; \ rte_log(level, type, \ RTE_FMT("PMD: sfc_efx " \ PCI_PRI_FMT " #%" PRIu16 \ @@ -53,39 +52,40 @@ extern uint32_t sfc_logtype_driver; do { \ const struct sfc_adapter *_sa = (sa); \ \ - SFC_LOG(_sa, RTE_LOG_ERR, _sa->priv.logtype_main, \ - __VA_ARGS__); \ + SFC_LOG(_sa->priv.shared, RTE_LOG_ERR, \ + _sa->priv.logtype_main, __VA_ARGS__); \ } while (0) #define sfc_warn(sa, ...) \ do { \ const struct sfc_adapter *_sa = (sa); \ \ - SFC_LOG(_sa, RTE_LOG_WARNING, _sa->priv.logtype_main, \ - __VA_ARGS__); \ + SFC_LOG(_sa->priv.shared, RTE_LOG_WARNING, \ + _sa->priv.logtype_main, __VA_ARGS__); \ } while (0) #define sfc_notice(sa, ...) \ do { \ const struct sfc_adapter *_sa = (sa); \ \ - SFC_LOG(_sa, RTE_LOG_NOTICE, _sa->priv.logtype_main, \ - __VA_ARGS__); \ + SFC_LOG(_sa->priv.shared, RTE_LOG_NOTICE, \ + _sa->priv.logtype_main, __VA_ARGS__); \ } while (0) #define sfc_info(sa, ...) \ do { \ const struct sfc_adapter *_sa = (sa); \ \ - SFC_LOG(_sa, RTE_LOG_INFO, _sa->priv.logtype_main, \ - __VA_ARGS__); \ + SFC_LOG(_sa->priv.shared, RTE_LOG_INFO, \ + _sa->priv.logtype_main, __VA_ARGS__); \ } while (0) #define sfc_log_init(sa, ...) \ do { \ const struct sfc_adapter *_sa = (sa); \ \ - SFC_LOG(_sa, RTE_LOG_INFO, _sa->priv.logtype_main, \ + SFC_LOG(_sa->priv.shared, RTE_LOG_INFO, \ + _sa->priv.logtype_main, \ RTE_FMT("%s(): " \ RTE_FMT_HEAD(__VA_ARGS__ ,), \ __func__, \ @@ -96,8 +96,8 @@ extern uint32_t sfc_logtype_driver; do { \ const struct sfc_adapter *_sa = (sa); \ \ - SFC_LOG(_sa, SFC_LOG_LEVEL_MCDI, _sa->mcdi.logtype, \ - __VA_ARGS__); \ + SFC_LOG(_sa->priv.shared, SFC_LOG_LEVEL_MCDI, \ + _sa->mcdi.logtype, __VA_ARGS__); \ } while (0) From patchwork Thu Feb 7 12:17:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50189 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9BF6B1B57E; Thu, 7 Feb 2019 13:18:47 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 3AE041B4CB for ; Thu, 7 Feb 2019 13:18:19 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id EEA8360005B for ; Thu, 7 Feb 2019 12:18:17 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:10 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:10 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI9RQ013297 for ; Thu, 7 Feb 2019 12:18:09 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 5921D1613E4 for ; Thu, 7 Feb 2019 12:18:09 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:47 +0000 Message-ID: <1549541873-17403-25-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-2.425600-4.000000-10 X-TMASE-MatchedRID: 8KqAZX9NEj5JI0Xw8qTX20f49ONH0RaSSjyMfjCRfaPfUZT83lbkEGOr KvsUT0pALYh4sdP0rP1jtX6mE5W/EKF5AEN4ATBvEhGH3CRdKUUhotH7bEpEMl2VSkpYHvFvv7G DbroLG9pcbjId9W6SOXZinMYfnxA9oLWVTedAnK+QOktEo73GFJqCl1R34jDPUfLlptXrqAn/hC YJ6P1MgoaMJnQigimyHoIOUmHREgsLazoQyrpm0nV7tdtvoiba8kp9oxB/3WVeCiaGE+TES6PFj JEFr+olwXCBO/GKkVqOhzOa6g8KrRWICukF+ps2RUTchcuUKOkEns4IiXTiCWn0+qlxeH9xsIBX OmkEfwOzmxMlxBuq7D0/7W0LYmn1VZCd7X8/fE2sWHjrfIB4LzcjwNTI6hp5T7Ak0q8bodDU82S jOFFjcdQ1HcCHDEjsHkxb8IED4reUTGVAhB5EbQ== X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10-2.425600-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541898-Sf2wU4TlRAWR Subject: [dpdk-dev] [PATCH 24/30] net/sfc: move RxQ shared information to adapter shared 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" Prepare to make sfc_adapter primary process private data. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc.h | 11 +++- drivers/net/sfc/sfc_ethdev.c | 22 +++++--- drivers/net/sfc/sfc_flow.c | 6 +- drivers/net/sfc/sfc_rx.c | 105 ++++++++++++++++++----------------- 4 files changed, 80 insertions(+), 64 deletions(-) diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h index 890a04d0e..21568f959 100644 --- a/drivers/net/sfc/sfc.h +++ b/drivers/net/sfc/sfc.h @@ -176,6 +176,9 @@ struct sfc_rss { /* Adapter private data shared by primary and secondary processes */ struct sfc_adapter_shared { + unsigned int rxq_count; + struct sfc_rxq_info *rxq_info; + struct rte_pci_addr pci_addr; uint16_t port_id; @@ -271,8 +274,6 @@ struct sfc_adapter { bool mgmt_evq_running; struct sfc_evq *mgmt_evq; - unsigned int rxq_count; - struct sfc_rxq_info *rxq_info; struct sfc_rxq *rxq_ctrl; unsigned int txq_count; @@ -294,6 +295,12 @@ sfc_adapter_shared_by_eth_dev(struct rte_eth_dev *eth_dev) return sa->priv.shared; } +static inline struct sfc_adapter_shared * +sfc_sa2shared(struct sfc_adapter *sa) +{ + return sa->priv.shared; +} + /* * Add wrapper functions to acquire/release lock to be able to remove or * change the lock in one place. diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index e30217cf1..a84690bb0 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -402,6 +402,7 @@ sfc_rx_queue_setup(struct rte_eth_dev *dev, uint16_t rx_queue_id, const struct rte_eth_rxconf *rx_conf, struct rte_mempool *mb_pool) { + struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); struct sfc_adapter *sa = dev->data->dev_private; int rc; @@ -415,7 +416,7 @@ sfc_rx_queue_setup(struct rte_eth_dev *dev, uint16_t rx_queue_id, if (rc != 0) goto fail_rx_qinit; - dev->data->rx_queues[rx_queue_id] = sa->rxq_info[rx_queue_id].dp; + dev->data->rx_queues[rx_queue_id] = sas->rxq_info[rx_queue_id].dp; sfc_adapter_unlock(sa); @@ -1067,14 +1068,15 @@ static void sfc_rx_queue_info_get(struct rte_eth_dev *dev, uint16_t rx_queue_id, struct rte_eth_rxq_info *qinfo) { + struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); struct sfc_adapter *sa = dev->data->dev_private; struct sfc_rxq_info *rxq_info; sfc_adapter_lock(sa); - SFC_ASSERT(rx_queue_id < sa->rxq_count); + SFC_ASSERT(rx_queue_id < sas->rxq_count); - rxq_info = &sa->rxq_info[rx_queue_id]; + rxq_info = &sas->rxq_info[rx_queue_id]; qinfo->mp = rxq_info->refill_mb_pool; qinfo->conf.rx_free_thresh = rxq_info->refill_threshold; @@ -1125,11 +1127,11 @@ static uint32_t sfc_rx_queue_count(struct rte_eth_dev *dev, uint16_t rx_queue_id) { const struct sfc_adapter_priv *sap = sfc_adapter_priv_by_eth_dev(dev); - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); struct sfc_rxq_info *rxq_info; - SFC_ASSERT(rx_queue_id < sa->rxq_count); - rxq_info = &sa->rxq_info[rx_queue_id]; + SFC_ASSERT(rx_queue_id < sas->rxq_count); + rxq_info = &sas->rxq_info[rx_queue_id]; if ((rxq_info->state & SFC_RXQ_STARTED) == 0) return 0; @@ -1185,6 +1187,7 @@ sfc_tx_descriptor_status(void *queue, uint16_t offset) static int sfc_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id) { + struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); struct sfc_adapter *sa = dev->data->dev_private; int rc; @@ -1196,14 +1199,14 @@ sfc_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id) if (sa->state != SFC_ADAPTER_STARTED) goto fail_not_started; - if (sa->rxq_info[rx_queue_id].state != SFC_RXQ_INITIALIZED) + if (sas->rxq_info[rx_queue_id].state != SFC_RXQ_INITIALIZED) goto fail_not_setup; rc = sfc_rx_qstart(sa, rx_queue_id); if (rc != 0) goto fail_rx_qstart; - sa->rxq_info[rx_queue_id].deferred_started = B_TRUE; + sas->rxq_info[rx_queue_id].deferred_started = B_TRUE; sfc_adapter_unlock(sa); @@ -1220,6 +1223,7 @@ sfc_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id) static int sfc_rx_queue_stop(struct rte_eth_dev *dev, uint16_t rx_queue_id) { + struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); struct sfc_adapter *sa = dev->data->dev_private; sfc_log_init(sa, "RxQ=%u", rx_queue_id); @@ -1227,7 +1231,7 @@ sfc_rx_queue_stop(struct rte_eth_dev *dev, uint16_t rx_queue_id) sfc_adapter_lock(sa); sfc_rx_qstop(sa, rx_queue_id); - sa->rxq_info[rx_queue_id].deferred_started = B_FALSE; + sas->rxq_info[rx_queue_id].deferred_started = B_FALSE; sfc_adapter_unlock(sa); diff --git a/drivers/net/sfc/sfc_flow.c b/drivers/net/sfc/sfc_flow.c index e20c2e612..ab5f24f51 100644 --- a/drivers/net/sfc/sfc_flow.c +++ b/drivers/net/sfc/sfc_flow.c @@ -1241,7 +1241,7 @@ sfc_flow_parse_queue(struct sfc_adapter *sa, { struct sfc_rxq *rxq; - if (queue->index >= sa->rxq_count) + if (queue->index >= sfc_sa2shared(sa)->rxq_count) return -EINVAL; rxq = &sa->rxq_ctrl[queue->index]; @@ -1268,7 +1268,7 @@ sfc_flow_parse_rss(struct sfc_adapter *sa, if (action_rss->queue_num == 0) return -EINVAL; - rxq_sw_index = sa->rxq_count - 1; + rxq_sw_index = sfc_sa2shared(sa)->rxq_count - 1; rxq = &sa->rxq_ctrl[rxq_sw_index]; rxq_hw_index_min = rxq->hw_index; rxq_hw_index_max = 0; @@ -1276,7 +1276,7 @@ sfc_flow_parse_rss(struct sfc_adapter *sa, for (i = 0; i < action_rss->queue_num; ++i) { rxq_sw_index = action_rss->queue[i]; - if (rxq_sw_index >= sa->rxq_count) + if (rxq_sw_index >= sfc_sa2shared(sa)->rxq_count) return -EINVAL; rxq = &sa->rxq_ctrl[rxq_sw_index]; diff --git a/drivers/net/sfc/sfc_rx.c b/drivers/net/sfc/sfc_rx.c index eb4875fec..8af9d2148 100644 --- a/drivers/net/sfc/sfc_rx.c +++ b/drivers/net/sfc/sfc_rx.c @@ -381,15 +381,15 @@ sfc_rxq_info_by_dp_rxq(const struct sfc_dp_rxq *dp_rxq) { const struct sfc_dp_queue *dpq = &dp_rxq->dpq; struct rte_eth_dev *eth_dev; - struct sfc_adapter *sa; + struct sfc_adapter_shared *sas; SFC_ASSERT(rte_eth_dev_is_valid_port(dpq->port_id)); eth_dev = &rte_eth_devices[dpq->port_id]; - sa = eth_dev->data->dev_private; + sas = sfc_adapter_shared_by_eth_dev(eth_dev); - SFC_ASSERT(dpq->queue_id < sa->rxq_count); - return &sa->rxq_info[dpq->queue_id]; + SFC_ASSERT(dpq->queue_id < sas->rxq_count); + return &sas->rxq_info[dpq->queue_id]; } struct sfc_rxq * @@ -404,7 +404,7 @@ sfc_rxq_by_dp_rxq(const struct sfc_dp_rxq *dp_rxq) sa = eth_dev->data->dev_private; - SFC_ASSERT(dpq->queue_id < sa->rxq_count); + SFC_ASSERT(dpq->queue_id < sfc_sa2shared(sa)->rxq_count); return &sa->rxq_ctrl[dpq->queue_id]; } @@ -567,7 +567,7 @@ sfc_rx_qflush(struct sfc_adapter *sa, unsigned int sw_index) unsigned int wait_count; int rc; - rxq_info = &sa->rxq_info[sw_index]; + rxq_info = &sfc_sa2shared(sa)->rxq_info[sw_index]; SFC_ASSERT(rxq_info->state & SFC_RXQ_STARTED); rxq = &sa->rxq_ctrl[sw_index]; @@ -677,9 +677,9 @@ sfc_rx_qstart(struct sfc_adapter *sa, unsigned int sw_index) sfc_log_init(sa, "sw_index=%u", sw_index); - SFC_ASSERT(sw_index < sa->rxq_count); + SFC_ASSERT(sw_index < sfc_sa2shared(sa)->rxq_count); - rxq_info = &sa->rxq_info[sw_index]; + rxq_info = &sfc_sa2shared(sa)->rxq_info[sw_index]; SFC_ASSERT(rxq_info->state == SFC_RXQ_INITIALIZED); rxq = &sa->rxq_ctrl[sw_index]; @@ -766,9 +766,9 @@ sfc_rx_qstop(struct sfc_adapter *sa, unsigned int sw_index) sfc_log_init(sa, "sw_index=%u", sw_index); - SFC_ASSERT(sw_index < sa->rxq_count); + SFC_ASSERT(sw_index < sfc_sa2shared(sa)->rxq_count); - rxq_info = &sa->rxq_info[sw_index]; + rxq_info = &sfc_sa2shared(sa)->rxq_info[sw_index]; if (rxq_info->state == SFC_RXQ_INITIALIZED) return; @@ -1007,8 +1007,8 @@ sfc_rx_qinit(struct sfc_adapter *sa, unsigned int sw_index, goto fail_bad_conf; } - SFC_ASSERT(sw_index < sa->rxq_count); - rxq_info = &sa->rxq_info[sw_index]; + SFC_ASSERT(sw_index < sfc_sa2shared(sa)->rxq_count); + rxq_info = &sfc_sa2shared(sa)->rxq_info[sw_index]; SFC_ASSERT(rxq_entries <= rxq_info->max_entries); rxq_info->entries = rxq_entries; @@ -1098,10 +1098,10 @@ sfc_rx_qfini(struct sfc_adapter *sa, unsigned int sw_index) struct sfc_rxq_info *rxq_info; struct sfc_rxq *rxq; - SFC_ASSERT(sw_index < sa->rxq_count); + SFC_ASSERT(sw_index < sfc_sa2shared(sa)->rxq_count); sa->eth_dev->data->rx_queues[sw_index] = NULL; - rxq_info = &sa->rxq_info[sw_index]; + rxq_info = &sfc_sa2shared(sa)->rxq_info[sw_index]; SFC_ASSERT(rxq_info->state == SFC_RXQ_INITIALIZED); @@ -1345,10 +1345,11 @@ sfc_rx_rss_config(struct sfc_adapter *sa) int sfc_rx_start(struct sfc_adapter *sa) { + struct sfc_adapter_shared * const sas = sfc_sa2shared(sa); unsigned int sw_index; int rc; - sfc_log_init(sa, "rxq_count=%u", sa->rxq_count); + sfc_log_init(sa, "rxq_count=%u", sas->rxq_count); rc = efx_rx_init(sa->nic); if (rc != 0) @@ -1358,10 +1359,10 @@ sfc_rx_start(struct sfc_adapter *sa) if (rc != 0) goto fail_rss_config; - for (sw_index = 0; sw_index < sa->rxq_count; ++sw_index) { - if (sa->rxq_info[sw_index].state == SFC_RXQ_INITIALIZED && - (!sa->rxq_info[sw_index].deferred_start || - sa->rxq_info[sw_index].deferred_started)) { + for (sw_index = 0; sw_index < sas->rxq_count; ++sw_index) { + if (sas->rxq_info[sw_index].state == SFC_RXQ_INITIALIZED && + (!sas->rxq_info[sw_index].deferred_start || + sas->rxq_info[sw_index].deferred_started)) { rc = sfc_rx_qstart(sa, sw_index); if (rc != 0) goto fail_rx_qstart; @@ -1385,13 +1386,14 @@ sfc_rx_start(struct sfc_adapter *sa) void sfc_rx_stop(struct sfc_adapter *sa) { + struct sfc_adapter_shared * const sas = sfc_sa2shared(sa); unsigned int sw_index; - sfc_log_init(sa, "rxq_count=%u", sa->rxq_count); + sfc_log_init(sa, "rxq_count=%u", sas->rxq_count); - sw_index = sa->rxq_count; + sw_index = sas->rxq_count; while (sw_index-- > 0) { - if (sa->rxq_info[sw_index].state & SFC_RXQ_STARTED) + if (sas->rxq_info[sw_index].state & SFC_RXQ_STARTED) sfc_rx_qstop(sa, sw_index); } @@ -1401,7 +1403,8 @@ sfc_rx_stop(struct sfc_adapter *sa) static int sfc_rx_qinit_info(struct sfc_adapter *sa, unsigned int sw_index) { - struct sfc_rxq_info *rxq_info = &sa->rxq_info[sw_index]; + struct sfc_adapter_shared * const sas = sfc_sa2shared(sa); + struct sfc_rxq_info *rxq_info = &sas->rxq_info[sw_index]; unsigned int max_entries; max_entries = EFX_RXQ_MAXNDESCS; @@ -1463,17 +1466,18 @@ sfc_rx_check_mode(struct sfc_adapter *sa, struct rte_eth_rxmode *rxmode) static void sfc_rx_fini_queues(struct sfc_adapter *sa, unsigned int nb_rx_queues) { + struct sfc_adapter_shared * const sas = sfc_sa2shared(sa); int sw_index; - SFC_ASSERT(nb_rx_queues <= sa->rxq_count); + SFC_ASSERT(nb_rx_queues <= sas->rxq_count); - sw_index = sa->rxq_count; + sw_index = sas->rxq_count; while (--sw_index >= (int)nb_rx_queues) { - if (sa->rxq_info[sw_index].state & SFC_RXQ_INITIALIZED) + if (sas->rxq_info[sw_index].state & SFC_RXQ_INITIALIZED) sfc_rx_qfini(sa, sw_index); } - sa->rxq_count = nb_rx_queues; + sas->rxq_count = nb_rx_queues; } /** @@ -1487,27 +1491,28 @@ sfc_rx_fini_queues(struct sfc_adapter *sa, unsigned int nb_rx_queues) int sfc_rx_configure(struct sfc_adapter *sa) { + struct sfc_adapter_shared * const sas = sfc_sa2shared(sa); struct sfc_rss *rss = &sa->rss; struct rte_eth_conf *dev_conf = &sa->eth_dev->data->dev_conf; const unsigned int nb_rx_queues = sa->eth_dev->data->nb_rx_queues; int rc; sfc_log_init(sa, "nb_rx_queues=%u (old %u)", - nb_rx_queues, sa->rxq_count); + nb_rx_queues, sas->rxq_count); rc = sfc_rx_check_mode(sa, &dev_conf->rxmode); if (rc != 0) goto fail_check_mode; - if (nb_rx_queues == sa->rxq_count) + if (nb_rx_queues == sas->rxq_count) goto configure_rss; - if (sa->rxq_info == NULL) { + if (sas->rxq_info == NULL) { rc = ENOMEM; - sa->rxq_info = rte_calloc_socket("sfc-rxqs", nb_rx_queues, - sizeof(sa->rxq_info[0]), 0, - sa->socket_id); - if (sa->rxq_info == NULL) + sas->rxq_info = rte_calloc_socket("sfc-rxqs", nb_rx_queues, + sizeof(sas->rxq_info[0]), 0, + sa->socket_id); + if (sas->rxq_info == NULL) goto fail_rxqs_alloc; /* @@ -1522,13 +1527,13 @@ sfc_rx_configure(struct sfc_adapter *sa) struct sfc_rxq_info *new_rxq_info; struct sfc_rxq *new_rxq_ctrl; - if (nb_rx_queues < sa->rxq_count) + if (nb_rx_queues < sas->rxq_count) sfc_rx_fini_queues(sa, nb_rx_queues); rc = ENOMEM; new_rxq_info = - rte_realloc(sa->rxq_info, - nb_rx_queues * sizeof(sa->rxq_info[0]), 0); + rte_realloc(sas->rxq_info, + nb_rx_queues * sizeof(sas->rxq_info[0]), 0); if (new_rxq_info == NULL && nb_rx_queues > 0) goto fail_rxqs_realloc; @@ -1538,29 +1543,29 @@ sfc_rx_configure(struct sfc_adapter *sa) if (new_rxq_ctrl == NULL && nb_rx_queues > 0) goto fail_rxqs_ctrl_realloc; - sa->rxq_info = new_rxq_info; + sas->rxq_info = new_rxq_info; sa->rxq_ctrl = new_rxq_ctrl; - if (nb_rx_queues > sa->rxq_count) { - memset(&sa->rxq_info[sa->rxq_count], 0, - (nb_rx_queues - sa->rxq_count) * - sizeof(sa->rxq_info[0])); - memset(&sa->rxq_ctrl[sa->rxq_count], 0, - (nb_rx_queues - sa->rxq_count) * + if (nb_rx_queues > sas->rxq_count) { + memset(&sas->rxq_info[sas->rxq_count], 0, + (nb_rx_queues - sas->rxq_count) * + sizeof(sas->rxq_info[0])); + memset(&sa->rxq_ctrl[sas->rxq_count], 0, + (nb_rx_queues - sas->rxq_count) * sizeof(sa->rxq_ctrl[0])); } } - while (sa->rxq_count < nb_rx_queues) { - rc = sfc_rx_qinit_info(sa, sa->rxq_count); + while (sas->rxq_count < nb_rx_queues) { + rc = sfc_rx_qinit_info(sa, sas->rxq_count); if (rc != 0) goto fail_rx_qinit_info; - sa->rxq_count++; + sas->rxq_count++; } configure_rss: rss->channels = (dev_conf->rxmode.mq_mode == ETH_MQ_RX_RSS) ? - MIN(sa->rxq_count, EFX_MAXRSS) : 0; + MIN(sas->rxq_count, EFX_MAXRSS) : 0; if (rss->channels > 0) { struct rte_eth_rss_conf *adv_conf_rss; @@ -1607,6 +1612,6 @@ sfc_rx_close(struct sfc_adapter *sa) free(sa->rxq_ctrl); sa->rxq_ctrl = NULL; - rte_free(sa->rxq_info); - sa->rxq_info = NULL; + rte_free(sfc_sa2shared(sa)->rxq_info); + sfc_sa2shared(sa)->rxq_info = NULL; } From patchwork Thu Feb 7 12:17:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50188 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id CFEF11B579; Thu, 7 Feb 2019 13:18:46 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 1145E1B4C7 for ; Thu, 7 Feb 2019 13:18:19 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 99F67600053 for ; Thu, 7 Feb 2019 12:18:17 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:11 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:10 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI98x013302 for ; Thu, 7 Feb 2019 12:18:09 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 667AB1613EB for ; Thu, 7 Feb 2019 12:18:09 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:48 +0000 Message-ID: <1549541873-17403-26-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-6.117000-4.000000-10 X-TMASE-MatchedRID: 41Zuv9Fs6X9JI0Xw8qTX2x+WEMjoO9WWTJDl9FKHbrkKogmGusPLb2Or KvsUT0pAY41hcR3BAfw9+tfQSR/lKZEP1DrLYuL6R/j040fRFpKSiza26cvwNKMP1fF+gQ2O3k1 HMnSDPkeB2szkMVcJm4702+EF4i7Ei56y2nMsBU8HTkHUtPYzxe8lj2kHOCDUGiul4VwAaPfLSp gCPcKRJ7bYrfkZqMT1Rs2+WOzWLaTNkOxTi82/cp4CIKY/Hg3AGdQnQSTrKGPEQdG7H66TyH4gK q42LRYk6vQH/7JwmDeKxwfzyFZeD8m5pT7zN+H4Ly6mwzNRGep+3BndfXUhXQ== X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--6.117000-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541898-Wrpg01gjm0Rg Subject: [dpdk-dev] [PATCH 25/30] net/sfc: move TxQ shared information to adapter shared 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" Prepare to make sfc_adapter primary process private data. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc.c | 5 +- drivers/net/sfc/sfc.h | 6 +-- drivers/net/sfc/sfc_ethdev.c | 16 +++--- drivers/net/sfc/sfc_tx.c | 100 +++++++++++++++++++---------------- 4 files changed, 69 insertions(+), 58 deletions(-) diff --git a/drivers/net/sfc/sfc.c b/drivers/net/sfc/sfc.c index dd662df0d..4e4c4e445 100644 --- a/drivers/net/sfc/sfc.c +++ b/drivers/net/sfc/sfc.c @@ -265,6 +265,7 @@ sfc_set_drv_limits(struct sfc_adapter *sa) static int sfc_set_fw_subvariant(struct sfc_adapter *sa) { + struct sfc_adapter_shared *sas = sfc_sa2shared(sa); const efx_nic_cfg_t *encp = efx_nic_cfg_get(sa->nic); uint64_t tx_offloads = sa->eth_dev->data->dev_conf.txmode.offloads; unsigned int txq_index; @@ -277,8 +278,8 @@ sfc_set_fw_subvariant(struct sfc_adapter *sa) return 0; } - for (txq_index = 0; txq_index < sa->txq_count; ++txq_index) { - struct sfc_txq_info *txq_info = &sa->txq_info[txq_index]; + for (txq_index = 0; txq_index < sas->txq_count; ++txq_index) { + struct sfc_txq_info *txq_info = &sas->txq_info[txq_index]; if (txq_info->state & SFC_TXQ_INITIALIZED) tx_offloads |= txq_info->offloads; diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h index 21568f959..2c6715027 100644 --- a/drivers/net/sfc/sfc.h +++ b/drivers/net/sfc/sfc.h @@ -179,6 +179,9 @@ struct sfc_adapter_shared { unsigned int rxq_count; struct sfc_rxq_info *rxq_info; + unsigned int txq_count; + struct sfc_txq_info *txq_info; + struct rte_pci_addr pci_addr; uint16_t port_id; @@ -275,9 +278,6 @@ struct sfc_adapter { struct sfc_evq *mgmt_evq; struct sfc_rxq *rxq_ctrl; - - unsigned int txq_count; - struct sfc_txq_info *txq_info; struct sfc_txq *txq_ctrl; boolean_t tso; diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index a84690bb0..6572aa1a0 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -457,6 +457,7 @@ sfc_tx_queue_setup(struct rte_eth_dev *dev, uint16_t tx_queue_id, uint16_t nb_tx_desc, unsigned int socket_id, const struct rte_eth_txconf *tx_conf) { + struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); struct sfc_adapter *sa = dev->data->dev_private; int rc; @@ -469,7 +470,7 @@ sfc_tx_queue_setup(struct rte_eth_dev *dev, uint16_t tx_queue_id, if (rc != 0) goto fail_tx_qinit; - dev->data->tx_queues[tx_queue_id] = sa->txq_info[tx_queue_id].dp; + dev->data->tx_queues[tx_queue_id] = sas->txq_info[tx_queue_id].dp; sfc_adapter_unlock(sa); return 0; @@ -1100,14 +1101,15 @@ static void sfc_tx_queue_info_get(struct rte_eth_dev *dev, uint16_t tx_queue_id, struct rte_eth_txq_info *qinfo) { + struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); struct sfc_adapter *sa = dev->data->dev_private; struct sfc_txq_info *txq_info; sfc_adapter_lock(sa); - SFC_ASSERT(tx_queue_id < sa->txq_count); + SFC_ASSERT(tx_queue_id < sas->txq_count); - txq_info = &sa->txq_info[tx_queue_id]; + txq_info = &sas->txq_info[tx_queue_id]; memset(qinfo, 0, sizeof(*qinfo)); @@ -1241,6 +1243,7 @@ sfc_rx_queue_stop(struct rte_eth_dev *dev, uint16_t rx_queue_id) static int sfc_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id) { + struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); struct sfc_adapter *sa = dev->data->dev_private; int rc; @@ -1252,14 +1255,14 @@ sfc_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id) if (sa->state != SFC_ADAPTER_STARTED) goto fail_not_started; - if (sa->txq_info[tx_queue_id].state != SFC_TXQ_INITIALIZED) + if (sas->txq_info[tx_queue_id].state != SFC_TXQ_INITIALIZED) goto fail_not_setup; rc = sfc_tx_qstart(sa, tx_queue_id); if (rc != 0) goto fail_tx_qstart; - sa->txq_info[tx_queue_id].deferred_started = B_TRUE; + sas->txq_info[tx_queue_id].deferred_started = B_TRUE; sfc_adapter_unlock(sa); return 0; @@ -1276,6 +1279,7 @@ sfc_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id) static int sfc_tx_queue_stop(struct rte_eth_dev *dev, uint16_t tx_queue_id) { + struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); struct sfc_adapter *sa = dev->data->dev_private; sfc_log_init(sa, "TxQ = %u", tx_queue_id); @@ -1284,7 +1288,7 @@ sfc_tx_queue_stop(struct rte_eth_dev *dev, uint16_t tx_queue_id) sfc_tx_qstop(sa, tx_queue_id); - sa->txq_info[tx_queue_id].deferred_started = B_FALSE; + sas->txq_info[tx_queue_id].deferred_started = B_FALSE; sfc_adapter_unlock(sa); return 0; diff --git a/drivers/net/sfc/sfc_tx.c b/drivers/net/sfc/sfc_tx.c index 94baf4530..515f4afdc 100644 --- a/drivers/net/sfc/sfc_tx.c +++ b/drivers/net/sfc/sfc_tx.c @@ -149,8 +149,8 @@ sfc_tx_qinit(struct sfc_adapter *sa, unsigned int sw_index, if (rc != 0) goto fail_bad_conf; - SFC_ASSERT(sw_index < sa->txq_count); - txq_info = &sa->txq_info[sw_index]; + SFC_ASSERT(sw_index < sfc_sa2shared(sa)->txq_count); + txq_info = &sfc_sa2shared(sa)->txq_info[sw_index]; txq_info->entries = txq_entries; @@ -224,10 +224,10 @@ sfc_tx_qfini(struct sfc_adapter *sa, unsigned int sw_index) sfc_log_init(sa, "TxQ = %u", sw_index); - SFC_ASSERT(sw_index < sa->txq_count); + SFC_ASSERT(sw_index < sfc_sa2shared(sa)->txq_count); sa->eth_dev->data->tx_queues[sw_index] = NULL; - txq_info = &sa->txq_info[sw_index]; + txq_info = &sfc_sa2shared(sa)->txq_info[sw_index]; SFC_ASSERT(txq_info->state == SFC_TXQ_INITIALIZED); @@ -296,29 +296,31 @@ sfc_tx_check_mode(struct sfc_adapter *sa, const struct rte_eth_txmode *txmode) static void sfc_tx_fini_queues(struct sfc_adapter *sa, unsigned int nb_tx_queues) { + struct sfc_adapter_shared * const sas = sfc_sa2shared(sa); int sw_index; - SFC_ASSERT(nb_tx_queues <= sa->txq_count); + SFC_ASSERT(nb_tx_queues <= sas->txq_count); - sw_index = sa->txq_count; + sw_index = sas->txq_count; while (--sw_index >= (int)nb_tx_queues) { - if (sa->txq_info[sw_index].state & SFC_TXQ_INITIALIZED) + if (sas->txq_info[sw_index].state & SFC_TXQ_INITIALIZED) sfc_tx_qfini(sa, sw_index); } - sa->txq_count = nb_tx_queues; + sas->txq_count = nb_tx_queues; } int sfc_tx_configure(struct sfc_adapter *sa) { + struct sfc_adapter_shared * const sas = sfc_sa2shared(sa); const efx_nic_cfg_t *encp = efx_nic_cfg_get(sa->nic); const struct rte_eth_conf *dev_conf = &sa->eth_dev->data->dev_conf; const unsigned int nb_tx_queues = sa->eth_dev->data->nb_tx_queues; int rc = 0; sfc_log_init(sa, "nb_tx_queues=%u (old %u)", - nb_tx_queues, sa->txq_count); + nb_tx_queues, sas->txq_count); /* * The datapath implementation assumes absence of boundary @@ -334,14 +336,14 @@ sfc_tx_configure(struct sfc_adapter *sa) if (rc != 0) goto fail_check_mode; - if (nb_tx_queues == sa->txq_count) + if (nb_tx_queues == sas->txq_count) goto done; - if (sa->txq_info == NULL) { - sa->txq_info = rte_calloc_socket("sfc-txqs", nb_tx_queues, - sizeof(sa->txq_info[0]), 0, - sa->socket_id); - if (sa->txq_info == NULL) + if (sas->txq_info == NULL) { + sas->txq_info = rte_calloc_socket("sfc-txqs", nb_tx_queues, + sizeof(sas->txq_info[0]), 0, + sa->socket_id); + if (sas->txq_info == NULL) goto fail_txqs_alloc; /* @@ -356,12 +358,12 @@ sfc_tx_configure(struct sfc_adapter *sa) struct sfc_txq_info *new_txq_info; struct sfc_txq *new_txq_ctrl; - if (nb_tx_queues < sa->txq_count) + if (nb_tx_queues < sas->txq_count) sfc_tx_fini_queues(sa, nb_tx_queues); new_txq_info = - rte_realloc(sa->txq_info, - nb_tx_queues * sizeof(sa->txq_info[0]), 0); + rte_realloc(sas->txq_info, + nb_tx_queues * sizeof(sas->txq_info[0]), 0); if (new_txq_info == NULL && nb_tx_queues > 0) goto fail_txqs_realloc; @@ -370,24 +372,24 @@ sfc_tx_configure(struct sfc_adapter *sa) if (new_txq_ctrl == NULL && nb_tx_queues > 0) goto fail_txqs_ctrl_realloc; - sa->txq_info = new_txq_info; + sas->txq_info = new_txq_info; sa->txq_ctrl = new_txq_ctrl; - if (nb_tx_queues > sa->txq_count) { - memset(&sa->txq_info[sa->txq_count], 0, - (nb_tx_queues - sa->txq_count) * - sizeof(sa->txq_info[0])); - memset(&sa->txq_ctrl[sa->txq_count], 0, - (nb_tx_queues - sa->txq_count) * + if (nb_tx_queues > sas->txq_count) { + memset(&sas->txq_info[sas->txq_count], 0, + (nb_tx_queues - sas->txq_count) * + sizeof(sas->txq_info[0])); + memset(&sa->txq_ctrl[sas->txq_count], 0, + (nb_tx_queues - sas->txq_count) * sizeof(sa->txq_ctrl[0])); } } - while (sa->txq_count < nb_tx_queues) { - rc = sfc_tx_qinit_info(sa, sa->txq_count); + while (sas->txq_count < nb_tx_queues) { + rc = sfc_tx_qinit_info(sa, sas->txq_count); if (rc != 0) goto fail_tx_qinit_info; - sa->txq_count++; + sas->txq_count++; } done: @@ -414,13 +416,14 @@ sfc_tx_close(struct sfc_adapter *sa) free(sa->txq_ctrl); sa->txq_ctrl = NULL; - rte_free(sa->txq_info); - sa->txq_info = NULL; + rte_free(sfc_sa2shared(sa)->txq_info); + sfc_sa2shared(sa)->txq_info = NULL; } int sfc_tx_qstart(struct sfc_adapter *sa, unsigned int sw_index) { + struct sfc_adapter_shared * const sas = sfc_sa2shared(sa); uint64_t offloads_supported = sfc_tx_get_dev_offload_caps(sa) | sfc_tx_get_queue_offload_caps(sa); struct rte_eth_dev_data *dev_data; @@ -433,8 +436,8 @@ sfc_tx_qstart(struct sfc_adapter *sa, unsigned int sw_index) sfc_log_init(sa, "TxQ = %u", sw_index); - SFC_ASSERT(sw_index < sa->txq_count); - txq_info = &sa->txq_info[sw_index]; + SFC_ASSERT(sw_index < sas->txq_count); + txq_info = &sas->txq_info[sw_index]; SFC_ASSERT(txq_info->state == SFC_TXQ_INITIALIZED); @@ -503,6 +506,7 @@ sfc_tx_qstart(struct sfc_adapter *sa, unsigned int sw_index) void sfc_tx_qstop(struct sfc_adapter *sa, unsigned int sw_index) { + struct sfc_adapter_shared * const sas = sfc_sa2shared(sa); struct rte_eth_dev_data *dev_data; struct sfc_txq_info *txq_info; struct sfc_txq *txq; @@ -512,8 +516,8 @@ sfc_tx_qstop(struct sfc_adapter *sa, unsigned int sw_index) sfc_log_init(sa, "TxQ = %u", sw_index); - SFC_ASSERT(sw_index < sa->txq_count); - txq_info = &sa->txq_info[sw_index]; + SFC_ASSERT(sw_index < sas->txq_count); + txq_info = &sas->txq_info[sw_index]; if (txq_info->state == SFC_TXQ_INITIALIZED) return; @@ -576,10 +580,11 @@ sfc_tx_qstop(struct sfc_adapter *sa, unsigned int sw_index) int sfc_tx_start(struct sfc_adapter *sa) { + struct sfc_adapter_shared * const sas = sfc_sa2shared(sa); unsigned int sw_index; int rc = 0; - sfc_log_init(sa, "txq_count = %u", sa->txq_count); + sfc_log_init(sa, "txq_count = %u", sas->txq_count); if (sa->tso) { if (!efx_nic_cfg_get(sa->nic)->enc_fw_assisted_tso_v2_enabled) { @@ -592,10 +597,10 @@ sfc_tx_start(struct sfc_adapter *sa) if (rc != 0) goto fail_efx_tx_init; - for (sw_index = 0; sw_index < sa->txq_count; ++sw_index) { - if (sa->txq_info[sw_index].state == SFC_TXQ_INITIALIZED && - (!(sa->txq_info[sw_index].deferred_start) || - sa->txq_info[sw_index].deferred_started)) { + for (sw_index = 0; sw_index < sas->txq_count; ++sw_index) { + if (sas->txq_info[sw_index].state == SFC_TXQ_INITIALIZED && + (!(sas->txq_info[sw_index].deferred_start) || + sas->txq_info[sw_index].deferred_started)) { rc = sfc_tx_qstart(sa, sw_index); if (rc != 0) goto fail_tx_qstart; @@ -618,13 +623,14 @@ sfc_tx_start(struct sfc_adapter *sa) void sfc_tx_stop(struct sfc_adapter *sa) { + struct sfc_adapter_shared * const sas = sfc_sa2shared(sa); unsigned int sw_index; - sfc_log_init(sa, "txq_count = %u", sa->txq_count); + sfc_log_init(sa, "txq_count = %u", sas->txq_count); - sw_index = sa->txq_count; + sw_index = sas->txq_count; while (sw_index-- > 0) { - if (sa->txq_info[sw_index].state & SFC_TXQ_STARTED) + if (sas->txq_info[sw_index].state & SFC_TXQ_STARTED) sfc_tx_qstop(sa, sw_index); } @@ -884,15 +890,15 @@ sfc_txq_info_by_dp_txq(const struct sfc_dp_txq *dp_txq) { const struct sfc_dp_queue *dpq = &dp_txq->dpq; struct rte_eth_dev *eth_dev; - struct sfc_adapter *sa; + struct sfc_adapter_shared *sas; SFC_ASSERT(rte_eth_dev_is_valid_port(dpq->port_id)); eth_dev = &rte_eth_devices[dpq->port_id]; - sa = eth_dev->data->dev_private; + sas = sfc_adapter_shared_by_eth_dev(eth_dev); - SFC_ASSERT(dpq->queue_id < sa->txq_count); - return &sa->txq_info[dpq->queue_id]; + SFC_ASSERT(dpq->queue_id < sas->txq_count); + return &sas->txq_info[dpq->queue_id]; } struct sfc_txq * @@ -907,7 +913,7 @@ sfc_txq_by_dp_txq(const struct sfc_dp_txq *dp_txq) sa = eth_dev->data->dev_private; - SFC_ASSERT(dpq->queue_id < sa->txq_count); + SFC_ASSERT(dpq->queue_id < sfc_sa2shared(sa)->txq_count); return &sa->txq_ctrl[dpq->queue_id]; } From patchwork Thu Feb 7 12:17:49 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50187 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id DA7BC1B573; Thu, 7 Feb 2019 13:18:45 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id ACF551B4B6 for ; Thu, 7 Feb 2019 13:18:18 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 6E06A600057 for ; Thu, 7 Feb 2019 12:18:17 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:11 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:10 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI96g013307 for ; Thu, 7 Feb 2019 12:18:09 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 7395D1613E4 for ; Thu, 7 Feb 2019 12:18:09 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:49 +0000 Message-ID: <1549541873-17403-27-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-12.459900-4.000000-10 X-TMASE-MatchedRID: vytiu2saxpzS7nHQNTh6QWO43qcJKa+vSoCG4sefl8Qs/uUAk6xP7PlY oV6p/cSxI1/Ds5nW8XA4qledhhZLFYvTpuEjuIpkyeVujmXuYYVdxx6WRf+5sMY/Qxi9/1JcJUs sq++k8WPm1ONecb78IMKwQxLmUdi8Blb13GpBGGvUWdZik3yrYbxy3Klthorp0WncJAzpLqC3Wj IVml7BR1t69dWv4qiEgX8lJSBYjTIb+BGg6rnrdleollpgzyxAy3fMd7pCml6gtbAbUC6MPlwOq i16hG2LvIVi2kAj6e+O9NvhBeIuxAe3cFgbc4mU0Xw0ILvo/uVuTe9VGO3qvF4KJoYT5MRLo8WM kQWv6iXBcIE78YqRWo6HM5rqDwqtlgH8/iMroMsk2ojq1XuBh/3iU9vHU+r1gMJCNsAm8Y7It3h fzZp+SA== X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--12.459900-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541898-mkPNAJPylaAH Subject: [dpdk-dev] [PATCH 26/30] net/sfc: move RSS config to adapter shared 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" RSS get requests are supported in secondary process. Prepare to make sfc_adapter primary process private data. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc.c | 2 +- drivers/net/sfc/sfc.h | 4 ++-- drivers/net/sfc/sfc_ethdev.c | 15 +++++++++------ drivers/net/sfc/sfc_flow.c | 6 ++++-- drivers/net/sfc/sfc_rx.c | 26 +++++++++++++------------- drivers/net/sfc/sfc_rx.h | 3 +-- 6 files changed, 30 insertions(+), 26 deletions(-) diff --git a/drivers/net/sfc/sfc.c b/drivers/net/sfc/sfc.c index 4e4c4e445..8526a84b5 100644 --- a/drivers/net/sfc/sfc.c +++ b/drivers/net/sfc/sfc.c @@ -642,7 +642,7 @@ static const uint8_t default_rss_key[EFX_RSS_KEY_SIZE] = { static int sfc_rss_attach(struct sfc_adapter *sa) { - struct sfc_rss *rss = &sa->rss; + struct sfc_rss *rss = &sfc_sa2shared(sa)->rss; int rc; rc = efx_intr_init(sa->nic, sa->intr.type, NULL); diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h index 2c6715027..72992d68b 100644 --- a/drivers/net/sfc/sfc.h +++ b/drivers/net/sfc/sfc.h @@ -182,6 +182,8 @@ struct sfc_adapter_shared { unsigned int txq_count; struct sfc_txq_info *txq_info; + struct sfc_rss rss; + struct rte_pci_addr pci_addr; uint16_t port_id; @@ -283,8 +285,6 @@ struct sfc_adapter { boolean_t tso; uint32_t rxd_wait_timeout_ns; - - struct sfc_rss rss; }; static inline struct sfc_adapter_shared * diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 6572aa1a0..034229f37 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -85,8 +85,9 @@ static void sfc_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) { const struct sfc_adapter_priv *sap = sfc_adapter_priv_by_eth_dev(dev); + struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); struct sfc_adapter *sa = dev->data->dev_private; - struct sfc_rss *rss = &sa->rss; + struct sfc_rss *rss = &sas->rss; uint64_t txq_offloads_def = 0; sfc_log_init(sa, "entry"); @@ -1419,8 +1420,9 @@ static int sfc_dev_rss_hash_conf_get(struct rte_eth_dev *dev, struct rte_eth_rss_conf *rss_conf) { + struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); struct sfc_adapter *sa = dev->data->dev_private; - struct sfc_rss *rss = &sa->rss; + struct sfc_rss *rss = &sas->rss; if (rss->context_type != EFX_RX_SCALE_EXCLUSIVE) return -ENOTSUP; @@ -1433,7 +1435,7 @@ sfc_dev_rss_hash_conf_get(struct rte_eth_dev *dev, * flags which corresponds to the active EFX configuration stored * locally in 'sfc_adapter' and kept up-to-date */ - rss_conf->rss_hf = sfc_rx_hf_efx_to_rte(sa, rss->hash_types); + rss_conf->rss_hf = sfc_rx_hf_efx_to_rte(rss, rss->hash_types); rss_conf->rss_key_len = EFX_RSS_KEY_SIZE; if (rss_conf->rss_key != NULL) rte_memcpy(rss_conf->rss_key, rss->key, EFX_RSS_KEY_SIZE); @@ -1448,7 +1450,7 @@ sfc_dev_rss_hash_update(struct rte_eth_dev *dev, struct rte_eth_rss_conf *rss_conf) { struct sfc_adapter *sa = dev->data->dev_private; - struct sfc_rss *rss = &sa->rss; + struct sfc_rss *rss = &sfc_sa2shared(sa)->rss; struct sfc_port *port = &sa->port; unsigned int efx_hash_types; int rc = 0; @@ -1524,8 +1526,9 @@ sfc_dev_rss_reta_query(struct rte_eth_dev *dev, struct rte_eth_rss_reta_entry64 *reta_conf, uint16_t reta_size) { + struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); struct sfc_adapter *sa = dev->data->dev_private; - struct sfc_rss *rss = &sa->rss; + struct sfc_rss *rss = &sas->rss; struct sfc_port *port = &sa->port; int entry; @@ -1559,7 +1562,7 @@ sfc_dev_rss_reta_update(struct rte_eth_dev *dev, uint16_t reta_size) { struct sfc_adapter *sa = dev->data->dev_private; - struct sfc_rss *rss = &sa->rss; + struct sfc_rss *rss = &sfc_sa2shared(sa)->rss; struct sfc_port *port = &sa->port; unsigned int *rss_tbl_new; uint16_t entry; diff --git a/drivers/net/sfc/sfc_flow.c b/drivers/net/sfc/sfc_flow.c index ab5f24f51..201c6cd06 100644 --- a/drivers/net/sfc/sfc_flow.c +++ b/drivers/net/sfc/sfc_flow.c @@ -1255,7 +1255,8 @@ sfc_flow_parse_rss(struct sfc_adapter *sa, const struct rte_flow_action_rss *action_rss, struct rte_flow *flow) { - struct sfc_rss *rss = &sa->rss; + struct sfc_adapter_shared * const sas = sfc_sa2shared(sa); + struct sfc_rss *rss = &sas->rss; unsigned int rxq_sw_index; struct sfc_rxq *rxq; unsigned int rxq_hw_index_min; @@ -1400,7 +1401,8 @@ static int sfc_flow_filter_insert(struct sfc_adapter *sa, struct rte_flow *flow) { - struct sfc_rss *rss = &sa->rss; + struct sfc_adapter_shared * const sas = sfc_sa2shared(sa); + struct sfc_rss *rss = &sas->rss; struct sfc_flow_rss *flow_rss = &flow->rss_conf; uint32_t efs_rss_context = EFX_RSS_CONTEXT_DEFAULT; unsigned int i; diff --git a/drivers/net/sfc/sfc_rx.c b/drivers/net/sfc/sfc_rx.c index 8af9d2148..3b4b65f6e 100644 --- a/drivers/net/sfc/sfc_rx.c +++ b/drivers/net/sfc/sfc_rx.c @@ -618,7 +618,7 @@ sfc_rx_qflush(struct sfc_adapter *sa, unsigned int sw_index) static int sfc_rx_default_rxq_set_filter(struct sfc_adapter *sa, struct sfc_rxq *rxq) { - struct sfc_rss *rss = &sa->rss; + struct sfc_rss *rss = &sfc_sa2shared(sa)->rss; boolean_t need_rss = (rss->channels > 0) ? B_TRUE : B_FALSE; struct sfc_port *port = &sa->port; int rc; @@ -961,7 +961,7 @@ sfc_rx_qinit(struct sfc_adapter *sa, unsigned int sw_index, struct rte_mempool *mb_pool) { const efx_nic_cfg_t *encp = efx_nic_cfg_get(sa->nic); - struct sfc_rss *rss = &sa->rss; + struct sfc_rss *rss = &sfc_sa2shared(sa)->rss; int rc; unsigned int rxq_entries; unsigned int evq_entries; @@ -1176,7 +1176,7 @@ sfc_rx_hash_types_mask_supp(efx_rx_hash_type_t hash_type, int sfc_rx_hash_init(struct sfc_adapter *sa) { - struct sfc_rss *rss = &sa->rss; + struct sfc_rss *rss = &sfc_sa2shared(sa)->rss; const efx_nic_cfg_t *encp = efx_nic_cfg_get(sa->nic); uint32_t alg_mask = encp->enc_rx_scale_hash_alg_mask; efx_rx_hash_alg_t alg; @@ -1232,7 +1232,7 @@ sfc_rx_hash_init(struct sfc_adapter *sa) void sfc_rx_hash_fini(struct sfc_adapter *sa) { - struct sfc_rss *rss = &sa->rss; + struct sfc_rss *rss = &sfc_sa2shared(sa)->rss; rte_free(rss->hf_map); } @@ -1241,7 +1241,7 @@ int sfc_rx_hf_rte_to_efx(struct sfc_adapter *sa, uint64_t rte, efx_rx_hash_type_t *efx) { - struct sfc_rss *rss = &sa->rss; + struct sfc_rss *rss = &sfc_sa2shared(sa)->rss; efx_rx_hash_type_t hash_types = 0; unsigned int i; @@ -1265,9 +1265,8 @@ sfc_rx_hf_rte_to_efx(struct sfc_adapter *sa, uint64_t rte, } uint64_t -sfc_rx_hf_efx_to_rte(struct sfc_adapter *sa, efx_rx_hash_type_t efx) +sfc_rx_hf_efx_to_rte(struct sfc_rss *rss, efx_rx_hash_type_t efx) { - struct sfc_rss *rss = &sa->rss; uint64_t rte = 0; unsigned int i; @@ -1285,9 +1284,9 @@ static int sfc_rx_process_adv_conf_rss(struct sfc_adapter *sa, struct rte_eth_rss_conf *conf) { - struct sfc_rss *rss = &sa->rss; + struct sfc_rss *rss = &sfc_sa2shared(sa)->rss; efx_rx_hash_type_t efx_hash_types = rss->hash_types; - uint64_t rss_hf = sfc_rx_hf_efx_to_rte(sa, efx_hash_types); + uint64_t rss_hf = sfc_rx_hf_efx_to_rte(rss, efx_hash_types); int rc; if (rss->context_type != EFX_RX_SCALE_EXCLUSIVE) { @@ -1319,7 +1318,7 @@ sfc_rx_process_adv_conf_rss(struct sfc_adapter *sa, static int sfc_rx_rss_config(struct sfc_adapter *sa) { - struct sfc_rss *rss = &sa->rss; + struct sfc_rss *rss = &sfc_sa2shared(sa)->rss; int rc = 0; if (rss->channels > 0) { @@ -1418,9 +1417,10 @@ sfc_rx_qinit_info(struct sfc_adapter *sa, unsigned int sw_index) static int sfc_rx_check_mode(struct sfc_adapter *sa, struct rte_eth_rxmode *rxmode) { + struct sfc_adapter_shared * const sas = sfc_sa2shared(sa); uint64_t offloads_supported = sfc_rx_get_dev_offload_caps(sa) | sfc_rx_get_queue_offload_caps(sa); - struct sfc_rss *rss = &sa->rss; + struct sfc_rss *rss = &sas->rss; int rc = 0; switch (rxmode->mq_mode) { @@ -1492,7 +1492,7 @@ int sfc_rx_configure(struct sfc_adapter *sa) { struct sfc_adapter_shared * const sas = sfc_sa2shared(sa); - struct sfc_rss *rss = &sa->rss; + struct sfc_rss *rss = &sas->rss; struct rte_eth_conf *dev_conf = &sa->eth_dev->data->dev_conf; const unsigned int nb_rx_queues = sa->eth_dev->data->nb_rx_queues; int rc; @@ -1603,7 +1603,7 @@ sfc_rx_configure(struct sfc_adapter *sa) void sfc_rx_close(struct sfc_adapter *sa) { - struct sfc_rss *rss = &sa->rss; + struct sfc_rss *rss = &sfc_sa2shared(sa)->rss; sfc_rx_fini_queues(sa, 0); diff --git a/drivers/net/sfc/sfc_rx.h b/drivers/net/sfc/sfc_rx.h index 73b70249c..ee1402022 100644 --- a/drivers/net/sfc/sfc_rx.h +++ b/drivers/net/sfc/sfc_rx.h @@ -141,8 +141,7 @@ int sfc_rx_hash_init(struct sfc_adapter *sa); void sfc_rx_hash_fini(struct sfc_adapter *sa); int sfc_rx_hf_rte_to_efx(struct sfc_adapter *sa, uint64_t rte, efx_rx_hash_type_t *efx); -uint64_t sfc_rx_hf_efx_to_rte(struct sfc_adapter *sa, - efx_rx_hash_type_t efx); +uint64_t sfc_rx_hf_efx_to_rte(struct sfc_rss *rss, efx_rx_hash_type_t efx); #ifdef __cplusplus } From patchwork Thu Feb 7 12:17:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50192 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 927551B58B; Thu, 7 Feb 2019 13:18:50 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 317F51B4C9 for ; Thu, 7 Feb 2019 13:18:19 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id C493260005B for ; Thu, 7 Feb 2019 12:18:17 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:11 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:10 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI9Hi013312 for ; Thu, 7 Feb 2019 12:18:09 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 80C3F1613EB for ; Thu, 7 Feb 2019 12:18:09 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:50 +0000 Message-ID: <1549541873-17403-28-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-4.494900-4.000000-10 X-TMASE-MatchedRID: xkUsjeGIFohCR/FskDJObjj3DitIowB9VNyumldWne3RLEyE6G4DRHB4 4IkzjfYy5pSjkyGV5DZvS2YZNWphNCnixsypv8PSo65WJt1k1O9xueIW2fKuyJ0Koq3EzpuHQIG 0mTtr+QbuR/hwO2udkVbPZ6Ii5YaaMGg+wgnY/enJ5W6OZe5hhSH8kDR0dp2mACF5TKaad1/4+j JqxRaFP7mDEathwuYVsGRzEHTW2nEfE8yM4pjsDwtuKBGekqUpnH7sbImOEBT0p5l2o7bY5PZWY yK0pqmLT25rC7buOPpM65ZpS8rg94SOXWdTpNmZ53Wd/zULO/UoGZ6wXe0j6VuJm63v9t+iXAW/ kHvSW5kvOSq+nxEQtagePGmIEwXO/4UC4n7D3uWJl6tigvYfL0uFvzEYSdV+ X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--4.494900-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541898-2cQsm5O08Nbd Subject: [dpdk-dev] [PATCH 27/30] net/sfc: move isolated flag in adapter shared 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" The flag is required in default RSS RETA get which does not make sense in isolated mode. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc.h | 3 ++- drivers/net/sfc/sfc_ethdev.c | 15 ++++++--------- drivers/net/sfc/sfc_flow.c | 3 +-- drivers/net/sfc/sfc_port.c | 2 +- drivers/net/sfc/sfc_rx.c | 3 +-- 5 files changed, 11 insertions(+), 15 deletions(-) diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h index 72992d68b..e8569bbbc 100644 --- a/drivers/net/sfc/sfc.h +++ b/drivers/net/sfc/sfc.h @@ -131,7 +131,6 @@ struct sfc_port { * Flow API isolated mode overrides promisc and allmulti settings; * they won't be applied if isolated mode is active */ - boolean_t isolated; boolean_t promisc; boolean_t allmulti; @@ -184,6 +183,8 @@ struct sfc_adapter_shared { struct sfc_rss rss; + boolean_t isolated; + struct rte_pci_addr pci_addr; uint16_t port_id; diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 034229f37..c6bee09ee 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -357,7 +357,7 @@ sfc_dev_filter_set(struct rte_eth_dev *dev, enum sfc_dev_filter_mode mode, if (*toggle != enabled) { *toggle = enabled; - if (port->isolated) { + if (sfc_sa2shared(sa)->isolated) { sfc_warn(sa, "isolated mode is active on the port"); sfc_warn(sa, "the change is to be applied on the next " "start provided that isolated mode is " @@ -957,7 +957,7 @@ sfc_mac_addr_set(struct rte_eth_dev *dev, struct ether_addr *mac_addr) * on the next port start if the user prevents * isolated mode from being enabled. */ - if (port->isolated) { + if (sfc_sa2shared(sa)->isolated) { sfc_warn(sa, "isolated mode is active on the port"); sfc_warn(sa, "will not set MAC address"); goto unlock; @@ -1027,7 +1027,7 @@ sfc_set_mc_addr_list(struct rte_eth_dev *dev, struct ether_addr *mc_addr_set, int rc; unsigned int i; - if (port->isolated) { + if (sfc_sa2shared(sa)->isolated) { sfc_err(sa, "isolated mode is active on the port"); sfc_err(sa, "will not set multicast address list"); return -ENOTSUP; @@ -1451,11 +1451,10 @@ sfc_dev_rss_hash_update(struct rte_eth_dev *dev, { struct sfc_adapter *sa = dev->data->dev_private; struct sfc_rss *rss = &sfc_sa2shared(sa)->rss; - struct sfc_port *port = &sa->port; unsigned int efx_hash_types; int rc = 0; - if (port->isolated) + if (sfc_sa2shared(sa)->isolated) return -ENOTSUP; if (rss->context_type != EFX_RX_SCALE_EXCLUSIVE) { @@ -1529,10 +1528,9 @@ sfc_dev_rss_reta_query(struct rte_eth_dev *dev, struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); struct sfc_adapter *sa = dev->data->dev_private; struct sfc_rss *rss = &sas->rss; - struct sfc_port *port = &sa->port; int entry; - if (rss->context_type != EFX_RX_SCALE_EXCLUSIVE || port->isolated) + if (rss->context_type != EFX_RX_SCALE_EXCLUSIVE || sas->isolated) return -ENOTSUP; if (rss->channels == 0) @@ -1563,13 +1561,12 @@ sfc_dev_rss_reta_update(struct rte_eth_dev *dev, { struct sfc_adapter *sa = dev->data->dev_private; struct sfc_rss *rss = &sfc_sa2shared(sa)->rss; - struct sfc_port *port = &sa->port; unsigned int *rss_tbl_new; uint16_t entry; int rc = 0; - if (port->isolated) + if (sfc_sa2shared(sa)->isolated) return -ENOTSUP; if (rss->context_type != EFX_RX_SCALE_EXCLUSIVE) { diff --git a/drivers/net/sfc/sfc_flow.c b/drivers/net/sfc/sfc_flow.c index 201c6cd06..01a81eab8 100644 --- a/drivers/net/sfc/sfc_flow.c +++ b/drivers/net/sfc/sfc_flow.c @@ -2425,7 +2425,6 @@ sfc_flow_isolate(struct rte_eth_dev *dev, int enable, struct rte_flow_error *error) { struct sfc_adapter *sa = dev->data->dev_private; - struct sfc_port *port = &sa->port; int ret = 0; sfc_adapter_lock(sa); @@ -2435,7 +2434,7 @@ sfc_flow_isolate(struct rte_eth_dev *dev, int enable, NULL, "please close the port first"); ret = -rte_errno; } else { - port->isolated = (enable) ? B_TRUE : B_FALSE; + sfc_sa2shared(sa)->isolated = (enable) ? B_TRUE : B_FALSE; } sfc_adapter_unlock(sa); diff --git a/drivers/net/sfc/sfc_port.c b/drivers/net/sfc/sfc_port.c index 5eb4b3aca..1709dba4e 100644 --- a/drivers/net/sfc/sfc_port.c +++ b/drivers/net/sfc/sfc_port.c @@ -226,7 +226,7 @@ sfc_port_start(struct sfc_adapter *sa) if (rc != 0) goto fail_mac_pdu_set; - if (!port->isolated) { + if (!sfc_sa2shared(sa)->isolated) { struct ether_addr *addr = &port->default_mac_addr; sfc_log_init(sa, "set MAC address"); diff --git a/drivers/net/sfc/sfc_rx.c b/drivers/net/sfc/sfc_rx.c index 3b4b65f6e..cd8abc8ea 100644 --- a/drivers/net/sfc/sfc_rx.c +++ b/drivers/net/sfc/sfc_rx.c @@ -669,7 +669,6 @@ sfc_rx_default_rxq_set_filter(struct sfc_adapter *sa, struct sfc_rxq *rxq) int sfc_rx_qstart(struct sfc_adapter *sa, unsigned int sw_index) { - struct sfc_port *port = &sa->port; struct sfc_rxq_info *rxq_info; struct sfc_rxq *rxq; struct sfc_evq *evq; @@ -731,7 +730,7 @@ sfc_rx_qstart(struct sfc_adapter *sa, unsigned int sw_index) rxq_info->state |= SFC_RXQ_STARTED; - if ((sw_index == 0) && !port->isolated) { + if (sw_index == 0 && !sfc_sa2shared(sa)->isolated) { rc = sfc_rx_default_rxq_set_filter(sa, rxq); if (rc != 0) goto fail_mac_filter_default_rxq_set; From patchwork Thu Feb 7 12:17:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50191 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9959E1B54F; Thu, 7 Feb 2019 13:18:49 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 765A41B4CC for ; Thu, 7 Feb 2019 13:18:19 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 4FCE2600053 for ; Thu, 7 Feb 2019 12:18:18 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:11 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:10 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI9Aa013317 for ; Thu, 7 Feb 2019 12:18:09 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 8D9111613E4 for ; Thu, 7 Feb 2019 12:18:09 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:51 +0000 Message-ID: <1549541873-17403-29-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-4.329300-4.000000-10 X-TMASE-MatchedRID: jOVNzH0EbrFJI0Xw8qTX2wPZZctd3P4BSoCG4sefl8TDTXM3VzSaIoO3 HyUMPRbHk6tRP5GDNQGYxn32XFJiM9E6qTfT4wP/2KB5OR2PHeHUqhJbkmLVe0X2ZslDQzOjhdO zGiAk/+wwbOiPxFco0ESTkIUbH6rsnuh7s4XRTZY49w4rSKMAfV1eWD1gEH06JLfQYoCQHFYHDd v9igj6FeLzNWBegCW2wgn7iDBesS0nRE+fI6etkibU5Wt5382wU9ix7ZuS7j7FXO6dwKpaO4FUM YXxD85/fSyvHNsvakURRFzifX871svQ/YByG8D1vkjLk9rOmsY29rfubKVwHaoWu33FSCn66r5P Qhx29DUG0+3lZBNmQtq4RBohbjorp8vX8tInq8s= X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--4.329300-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541898-o_lnEJj45054 Subject: [dpdk-dev] [PATCH 28/30] net/sfc: remove adapter locks from secondary process ops 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" Adapter lock will become primary process only. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc_ethdev.c | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index c6bee09ee..6b00601fc 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -1071,11 +1071,8 @@ sfc_rx_queue_info_get(struct rte_eth_dev *dev, uint16_t rx_queue_id, struct rte_eth_rxq_info *qinfo) { struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); - struct sfc_adapter *sa = dev->data->dev_private; struct sfc_rxq_info *rxq_info; - sfc_adapter_lock(sa); - SFC_ASSERT(rx_queue_id < sas->rxq_count); rxq_info = &sas->rxq_info[rx_queue_id]; @@ -1090,8 +1087,6 @@ sfc_rx_queue_info_get(struct rte_eth_dev *dev, uint16_t rx_queue_id, qinfo->scattered_rx = 1; } qinfo->nb_desc = rxq_info->entries; - - sfc_adapter_unlock(sa); } /* @@ -1103,11 +1098,8 @@ sfc_tx_queue_info_get(struct rte_eth_dev *dev, uint16_t tx_queue_id, struct rte_eth_txq_info *qinfo) { struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); - struct sfc_adapter *sa = dev->data->dev_private; struct sfc_txq_info *txq_info; - sfc_adapter_lock(sa); - SFC_ASSERT(tx_queue_id < sas->txq_count); txq_info = &sas->txq_info[tx_queue_id]; @@ -1118,8 +1110,6 @@ sfc_tx_queue_info_get(struct rte_eth_dev *dev, uint16_t tx_queue_id, qinfo->conf.tx_free_thresh = txq_info->free_thresh; qinfo->conf.tx_deferred_start = txq_info->deferred_start; qinfo->nb_desc = txq_info->entries; - - sfc_adapter_unlock(sa); } /* @@ -1421,14 +1411,11 @@ sfc_dev_rss_hash_conf_get(struct rte_eth_dev *dev, struct rte_eth_rss_conf *rss_conf) { struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); - struct sfc_adapter *sa = dev->data->dev_private; struct sfc_rss *rss = &sas->rss; if (rss->context_type != EFX_RX_SCALE_EXCLUSIVE) return -ENOTSUP; - sfc_adapter_lock(sa); - /* * Mapping of hash configuration between RTE and EFX is not one-to-one, * hence, conversion is done here to derive a correct set of ETH_RSS @@ -1440,8 +1427,6 @@ sfc_dev_rss_hash_conf_get(struct rte_eth_dev *dev, if (rss_conf->rss_key != NULL) rte_memcpy(rss_conf->rss_key, rss->key, EFX_RSS_KEY_SIZE); - sfc_adapter_unlock(sa); - return 0; } @@ -1526,7 +1511,6 @@ sfc_dev_rss_reta_query(struct rte_eth_dev *dev, uint16_t reta_size) { struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); - struct sfc_adapter *sa = dev->data->dev_private; struct sfc_rss *rss = &sas->rss; int entry; @@ -1539,8 +1523,6 @@ sfc_dev_rss_reta_query(struct rte_eth_dev *dev, if (reta_size != EFX_RSS_TBL_SIZE) return -EINVAL; - sfc_adapter_lock(sa); - for (entry = 0; entry < reta_size; entry++) { int grp = entry / RTE_RETA_GROUP_SIZE; int grp_idx = entry % RTE_RETA_GROUP_SIZE; @@ -1549,8 +1531,6 @@ sfc_dev_rss_reta_query(struct rte_eth_dev *dev, reta_conf[grp].reta[grp_idx] = rss->tbl[entry]; } - sfc_adapter_unlock(sa); - return 0; } From patchwork Thu Feb 7 12:17:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50190 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6DBFA1B582; Thu, 7 Feb 2019 13:18:48 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 631821B4B6 for ; Thu, 7 Feb 2019 13:18:19 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 2512E600053 for ; Thu, 7 Feb 2019 12:18:18 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:11 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:10 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI9VA013323 for ; Thu, 7 Feb 2019 12:18:09 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 9C1BA1613EB for ; Thu, 7 Feb 2019 12:18:09 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:52 +0000 Message-ID: <1549541873-17403-30-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-6.065400-4.000000-10 X-TMASE-MatchedRID: zwBhcM7x36xJI0Xw8qTX20f49ONH0RaSSjyMfjCRfaPfUZT83lbkEEG7 u7daWKab0R+/GIIn919VwPkEBAdqgDp3zB6h4uJpDB+ErBr0bANYN1akkye0qG2/j5pTTlX79bD iOibFbr1F5VEaGsE9Ko6NvH+7P1qAS62nMBX/dwPuykw7cfAoIG73ma3jsPM2E2/97E9ezFxKJA /HeCVx74iKuCjDr3FQ/jnmNizj2lWEL5IDpFUfkjj3DitIowB9wx0jRRxcQfOrzPs85fwUk9Keu oOP1lbojsRhVFGbIhAlOzx5B5sHMKPoJzzb7KzWiS8eKdD/7uSbKpAlY2y6SSCsGR9kaG/jHOWW /Rp/isq3iatEqGkBbAt1FbTRkWhlFII+ATBNwhLN+qWlu2ZxaA3CvJ/nEe1yVI7KaIl9Nhft8rF ozbGqQLYIn04efCagModguxHirQsfE8yM4pjsDwtuKBGekqUpbGVEmIfjf3tMKRsdMWXfisBoIL ywjaRWero+W8KopJjG+U0e1G02gcm9m8IPLEre X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--6.065400-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541898-mxJDAcr_LCOJ Subject: [dpdk-dev] [PATCH 29/30] net/sfc: separate adapter primary process and shared data 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" Make sfc_adapter primary process only. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc.h | 20 ++++--- drivers/net/sfc/sfc_ethdev.c | 105 +++++++++++++++++++---------------- drivers/net/sfc/sfc_flow.c | 10 ++-- drivers/net/sfc/sfc_rx.c | 2 +- drivers/net/sfc/sfc_tx.c | 2 +- 5 files changed, 77 insertions(+), 62 deletions(-) diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h index e8569bbbc..39b4ba52c 100644 --- a/drivers/net/sfc/sfc.h +++ b/drivers/net/sfc/sfc.h @@ -218,12 +218,6 @@ struct sfc_adapter { */ struct sfc_adapter_priv priv; - /* - * Temporary placeholder for multi-process shared data for - * transition. - */ - struct sfc_adapter_shared _shared; - /* * PMD setup and configuration is not thread safe. Since it is not * performance sensitive, it is better to guarantee thread-safety @@ -291,9 +285,19 @@ struct sfc_adapter { static inline struct sfc_adapter_shared * sfc_adapter_shared_by_eth_dev(struct rte_eth_dev *eth_dev) { - struct sfc_adapter *sa = eth_dev->data->dev_private; + struct sfc_adapter_shared *sas = eth_dev->data->dev_private; - return sa->priv.shared; + return sas; +} + +static inline struct sfc_adapter * +sfc_adapter_by_eth_dev(struct rte_eth_dev *eth_dev) +{ + struct sfc_adapter_priv *sap = sfc_adapter_priv_by_eth_dev(eth_dev); + + SFC_ASSERT(rte_eal_process_type() == RTE_PROC_PRIMARY); + + return container_of(sap, struct sfc_adapter, priv); } static inline struct sfc_adapter_shared * diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 6b00601fc..a54a9e66b 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -36,7 +36,7 @@ static struct sfc_dp_list sfc_dp_head = static int sfc_fw_version_get(struct rte_eth_dev *dev, char *fw_version, size_t fw_size) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); efx_nic_fw_info_t enfi; int ret; int rc; @@ -86,7 +86,7 @@ sfc_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) { const struct sfc_adapter_priv *sap = sfc_adapter_priv_by_eth_dev(dev); struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); struct sfc_rss *rss = &sas->rss; uint64_t txq_offloads_def = 0; @@ -182,7 +182,7 @@ static const uint32_t * sfc_dev_supported_ptypes_get(struct rte_eth_dev *dev) { const struct sfc_adapter_priv *sap = sfc_adapter_priv_by_eth_dev(dev); - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); const efx_nic_cfg_t *encp = efx_nic_cfg_get(sa->nic); uint32_t tunnel_encaps = encp->enc_tunnel_encapsulations_supported; @@ -193,7 +193,7 @@ static int sfc_dev_configure(struct rte_eth_dev *dev) { struct rte_eth_dev_data *dev_data = dev->data; - struct sfc_adapter *sa = dev_data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); int rc; sfc_log_init(sa, "entry n_rxq=%u n_txq=%u", @@ -222,7 +222,7 @@ sfc_dev_configure(struct rte_eth_dev *dev) static int sfc_dev_start(struct rte_eth_dev *dev) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); int rc; sfc_log_init(sa, "entry"); @@ -239,7 +239,7 @@ sfc_dev_start(struct rte_eth_dev *dev) static int sfc_dev_link_update(struct rte_eth_dev *dev, int wait_to_complete) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); struct rte_eth_link current_link; int ret; @@ -270,7 +270,7 @@ sfc_dev_link_update(struct rte_eth_dev *dev, int wait_to_complete) static void sfc_dev_stop(struct rte_eth_dev *dev) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); sfc_log_init(sa, "entry"); @@ -284,7 +284,7 @@ sfc_dev_stop(struct rte_eth_dev *dev) static int sfc_dev_set_link_up(struct rte_eth_dev *dev) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); int rc; sfc_log_init(sa, "entry"); @@ -300,7 +300,7 @@ sfc_dev_set_link_up(struct rte_eth_dev *dev) static int sfc_dev_set_link_down(struct rte_eth_dev *dev) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); sfc_log_init(sa, "entry"); @@ -314,7 +314,7 @@ sfc_dev_set_link_down(struct rte_eth_dev *dev) static void sfc_dev_close(struct rte_eth_dev *dev) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); sfc_log_init(sa, "entry"); @@ -345,7 +345,7 @@ sfc_dev_filter_set(struct rte_eth_dev *dev, enum sfc_dev_filter_mode mode, { struct sfc_port *port; boolean_t *toggle; - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); boolean_t allmulti = (mode == SFC_DEV_FILTER_MODE_ALLMULTI); const char *desc = (allmulti) ? "all-multi" : "promiscuous"; @@ -404,7 +404,7 @@ sfc_rx_queue_setup(struct rte_eth_dev *dev, uint16_t rx_queue_id, struct rte_mempool *mb_pool) { struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); int rc; sfc_log_init(sa, "RxQ=%u nb_rx_desc=%u socket_id=%u", @@ -459,7 +459,7 @@ sfc_tx_queue_setup(struct rte_eth_dev *dev, uint16_t tx_queue_id, const struct rte_eth_txconf *tx_conf) { struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); int rc; sfc_log_init(sa, "TxQ = %u, nb_tx_desc = %u, socket_id = %u", @@ -534,7 +534,7 @@ sfc_update_diff_stat(uint64_t *stat, uint64_t newval) static int sfc_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); struct sfc_port *port = &sa->port; uint64_t *mac_stats; int ret; @@ -611,7 +611,7 @@ sfc_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) static void sfc_stats_reset(struct rte_eth_dev *dev) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); struct sfc_port *port = &sa->port; int rc; @@ -633,7 +633,7 @@ static int sfc_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats, unsigned int xstats_count) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); struct sfc_port *port = &sa->port; uint64_t *mac_stats; int rc; @@ -672,7 +672,7 @@ sfc_xstats_get_names(struct rte_eth_dev *dev, struct rte_eth_xstat_name *xstats_names, unsigned int xstats_count) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); struct sfc_port *port = &sa->port; unsigned int i; unsigned int nstats = 0; @@ -694,7 +694,7 @@ static int sfc_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids, uint64_t *values, unsigned int n) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); struct sfc_port *port = &sa->port; uint64_t *mac_stats; unsigned int nb_supported = 0; @@ -741,7 +741,7 @@ sfc_xstats_get_names_by_id(struct rte_eth_dev *dev, struct rte_eth_xstat_name *xstats_names, const uint64_t *ids, unsigned int size) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); struct sfc_port *port = &sa->port; unsigned int nb_supported = 0; unsigned int nb_written = 0; @@ -771,7 +771,7 @@ sfc_xstats_get_names_by_id(struct rte_eth_dev *dev, static int sfc_flow_ctrl_get(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); unsigned int wanted_fc, link_fc; memset(fc_conf, 0, sizeof(*fc_conf)); @@ -811,7 +811,7 @@ sfc_flow_ctrl_get(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) static int sfc_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); struct sfc_port *port = &sa->port; unsigned int fcntl; int rc; @@ -867,7 +867,7 @@ sfc_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) static int sfc_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); size_t pdu = EFX_MAC_PDU(mtu); size_t old_pdu; int rc; @@ -936,7 +936,7 @@ sfc_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu) static int sfc_mac_addr_set(struct rte_eth_dev *dev, struct ether_addr *mac_addr) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); const efx_nic_cfg_t *encp = efx_nic_cfg_get(sa->nic); struct sfc_port *port = &sa->port; struct ether_addr *old_addr = &dev->data->mac_addrs[0]; @@ -1021,7 +1021,7 @@ static int sfc_set_mc_addr_list(struct rte_eth_dev *dev, struct ether_addr *mc_addr_set, uint32_t nb_mc_addr) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); struct sfc_port *port = &sa->port; uint8_t *mc_addrs = port->mcast_addrs; int rc; @@ -1181,7 +1181,7 @@ static int sfc_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id) { struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); int rc; sfc_log_init(sa, "RxQ=%u", rx_queue_id); @@ -1217,7 +1217,7 @@ static int sfc_rx_queue_stop(struct rte_eth_dev *dev, uint16_t rx_queue_id) { struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); sfc_log_init(sa, "RxQ=%u", rx_queue_id); @@ -1235,7 +1235,7 @@ static int sfc_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id) { struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); int rc; sfc_log_init(sa, "TxQ = %u", tx_queue_id); @@ -1271,7 +1271,7 @@ static int sfc_tx_queue_stop(struct rte_eth_dev *dev, uint16_t tx_queue_id) { struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); sfc_log_init(sa, "TxQ = %u", tx_queue_id); @@ -1308,7 +1308,7 @@ sfc_dev_udp_tunnel_op(struct rte_eth_dev *dev, struct rte_eth_udp_tunnel *tunnel_udp, enum sfc_udp_tunnel_op_e op) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); efx_tunnel_protocol_t tunnel_proto; int rc; @@ -1434,7 +1434,7 @@ static int sfc_dev_rss_hash_update(struct rte_eth_dev *dev, struct rte_eth_rss_conf *rss_conf) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); struct sfc_rss *rss = &sfc_sa2shared(sa)->rss; unsigned int efx_hash_types; int rc = 0; @@ -1539,7 +1539,7 @@ sfc_dev_rss_reta_update(struct rte_eth_dev *dev, struct rte_eth_rss_reta_entry64 *reta_conf, uint16_t reta_size) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); struct sfc_rss *rss = &sfc_sa2shared(sa)->rss; unsigned int *rss_tbl_new; uint16_t entry; @@ -1612,7 +1612,7 @@ sfc_dev_filter_ctrl(struct rte_eth_dev *dev, enum rte_filter_type filter_type, enum rte_filter_op filter_op, void *arg) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); int rc = ENOTSUP; sfc_log_init(sa, "entry"); @@ -1755,7 +1755,7 @@ sfc_strdup(const char *str) static int sfc_eth_dev_set_ops(struct rte_eth_dev *dev) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); const struct sfc_dp_rx *dp_rx; const struct sfc_dp_tx *dp_tx; @@ -1880,7 +1880,7 @@ sfc_eth_dev_set_ops(struct rte_eth_dev *dev) static void sfc_eth_dev_clear_ops(struct rte_eth_dev *dev) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); dev->dev_ops = NULL; @@ -2007,10 +2007,10 @@ sfc_register_dp(void) static int sfc_eth_dev_init(struct rte_eth_dev *dev) { - struct sfc_adapter *sa = dev->data->dev_private; - struct sfc_adapter_shared *sas; + struct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev); struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); uint32_t logtype_main; + struct sfc_adapter *sa; int rc; const efx_nic_cfg_t *encp; const struct ether_addr *from; @@ -2021,23 +2021,27 @@ sfc_eth_dev_init(struct rte_eth_dev *dev) SFC_LOGTYPE_MAIN_STR, RTE_LOG_NOTICE); - sa->priv.shared = &sa->_shared; - sas = sa->priv.shared; - if (rte_eal_process_type() != RTE_PROC_PRIMARY) return -sfc_eth_dev_secondary_init(dev, logtype_main); + /* Required for logging */ + sas->pci_addr = pci_dev->addr; + sas->port_id = dev->data->port_id; + /* - * sfc_adapter is a mixture of shared and process private data. - * During transition period use it in both kinds. When the - * driver becomes ready to separate it, sfc_adapter will become - * primary process private only. + * Allocate process private data from heap, since it should not + * be located in shared memory allocated using rte_malloc() API. */ + sa = calloc(1, sizeof(*sa)); + if (sa == NULL) { + rc = ENOMEM; + goto fail_alloc_sa; + } + dev->process_private = sa; /* Required for logging */ - sas->pci_addr = pci_dev->addr; - sas->port_id = dev->data->port_id; + sa->priv.shared = sas; sa->priv.logtype_main = logtype_main; sa->eth_dev = dev; @@ -2107,6 +2111,9 @@ sfc_eth_dev_init(struct rte_eth_dev *dev) fail_kvargs_parse: sfc_log_init(sa, "failed %d", rc); dev->process_private = NULL; + free(sa); + +fail_alloc_sa: SFC_ASSERT(rc > 0); return -rc; } @@ -2121,7 +2128,7 @@ sfc_eth_dev_uninit(struct rte_eth_dev *dev) return 0; } - sa = dev->data->dev_private; + sa = sfc_adapter_by_eth_dev(dev); sfc_log_init(sa, "entry"); sfc_adapter_lock(sa); @@ -2140,6 +2147,10 @@ sfc_eth_dev_uninit(struct rte_eth_dev *dev) /* Required for logging, so cleanup last */ sa->eth_dev = NULL; + + dev->process_private = NULL; + free(sa); + return 0; } @@ -2159,7 +2170,7 @@ static int sfc_eth_dev_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, struct rte_pci_device *pci_dev) { return rte_eth_dev_pci_generic_probe(pci_dev, - sizeof(struct sfc_adapter), sfc_eth_dev_init); + sizeof(struct sfc_adapter_shared), sfc_eth_dev_init); } static int sfc_eth_dev_pci_remove(struct rte_pci_device *pci_dev) diff --git a/drivers/net/sfc/sfc_flow.c b/drivers/net/sfc/sfc_flow.c index 01a81eab8..cffcd9a4c 100644 --- a/drivers/net/sfc/sfc_flow.c +++ b/drivers/net/sfc/sfc_flow.c @@ -2254,7 +2254,7 @@ sfc_flow_parse(struct rte_eth_dev *dev, struct rte_flow *flow, struct rte_flow_error *error) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); int rc; rc = sfc_flow_parse_attr(attr, flow, error); @@ -2300,7 +2300,7 @@ sfc_flow_create(struct rte_eth_dev *dev, const struct rte_flow_action actions[], struct rte_flow_error *error) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); struct rte_flow *flow = NULL; int rc; @@ -2373,7 +2373,7 @@ sfc_flow_destroy(struct rte_eth_dev *dev, struct rte_flow *flow, struct rte_flow_error *error) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); struct rte_flow *flow_ptr; int rc = EINVAL; @@ -2402,7 +2402,7 @@ static int sfc_flow_flush(struct rte_eth_dev *dev, struct rte_flow_error *error) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); struct rte_flow *flow; int rc = 0; int ret = 0; @@ -2424,7 +2424,7 @@ static int sfc_flow_isolate(struct rte_eth_dev *dev, int enable, struct rte_flow_error *error) { - struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); int ret = 0; sfc_adapter_lock(sa); diff --git a/drivers/net/sfc/sfc_rx.c b/drivers/net/sfc/sfc_rx.c index cd8abc8ea..54d4b5872 100644 --- a/drivers/net/sfc/sfc_rx.c +++ b/drivers/net/sfc/sfc_rx.c @@ -402,7 +402,7 @@ sfc_rxq_by_dp_rxq(const struct sfc_dp_rxq *dp_rxq) SFC_ASSERT(rte_eth_dev_is_valid_port(dpq->port_id)); eth_dev = &rte_eth_devices[dpq->port_id]; - sa = eth_dev->data->dev_private; + sa = sfc_adapter_by_eth_dev(eth_dev); SFC_ASSERT(dpq->queue_id < sfc_sa2shared(sa)->rxq_count); return &sa->rxq_ctrl[dpq->queue_id]; diff --git a/drivers/net/sfc/sfc_tx.c b/drivers/net/sfc/sfc_tx.c index 515f4afdc..acdbf1602 100644 --- a/drivers/net/sfc/sfc_tx.c +++ b/drivers/net/sfc/sfc_tx.c @@ -911,7 +911,7 @@ sfc_txq_by_dp_txq(const struct sfc_dp_txq *dp_txq) SFC_ASSERT(rte_eth_dev_is_valid_port(dpq->port_id)); eth_dev = &rte_eth_devices[dpq->port_id]; - sa = eth_dev->data->dev_private; + sa = sfc_adapter_by_eth_dev(eth_dev); SFC_ASSERT(dpq->queue_id < sfc_sa2shared(sa)->txq_count); return &sa->txq_ctrl[dpq->queue_id]; From patchwork Thu Feb 7 12:17:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 50193 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6C6FA1B592; Thu, 7 Feb 2019 13:18:51 +0100 (CET) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id D6ACF1B4CB for ; Thu, 7 Feb 2019 13:18:19 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 79CC9600053 for ; Thu, 7 Feb 2019 12:18:18 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 04:18:11 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 04:18:10 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17CI9JE013328 for ; Thu, 7 Feb 2019 12:18:09 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id AACB81613E4 for ; Thu, 7 Feb 2019 12:18:09 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 12:17:53 +0000 Message-ID: <1549541873-17403-31-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> References: <1549541873-17403-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-3.257400-4.000000-10 X-TMASE-MatchedRID: rZWcR6FTFvn1DWHi1W6nNPOHbIp2eXtYmTHJRqsE51XKR6LDRc55Ob5B EqXwSs2U09NQNrxIpFbK8MDOu23EVUyg+aSpSKdxtOGPzYU8VII7zEJ+iDUbpBrKK4Tme7FsGXM FdYWdoJlNGU7hioFCh3rb7W/5L/VCtDyv3gNOnrdQiFNNqFvt1cS7VJJiSod0Js4Hk4k5Dlqta8 DXVXWIqfOhwfEa1euuQl4KlNVwqnWR9GF2J2xqMxRFJJyf5BJe3QfwsVk0UbvqwGfCk7KUs7nSZ pQC9a4Uq2uOVtsKYM311FSdUaVXPPL0Ivxy0My+iqcHprBVusVirCwcDC8i0OtbvfEkohoRDXVS bRkrtkyWMC1aVFJcHQDlJLZdGMoUz5pk4iF6iVS+9SjSFk+GXMz/jdQvUwlHftwZ3X11IV0= X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--3.257400-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549541899-YsdQYwrkvYgf Subject: [dpdk-dev] [PATCH 30/30] net/sfc: support Rx packet types get in secondary process 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" Secondary process needs to know packet classes supported by the NIC on Rx. Signed-off-by: Andrew Rybchenko --- doc/guides/rel_notes/release_19_05.rst | 1 + drivers/net/sfc/sfc.c | 16 ++++++++++++++++ drivers/net/sfc/sfc.h | 1 + drivers/net/sfc/sfc_ethdev.c | 6 ++---- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/doc/guides/rel_notes/release_19_05.rst b/doc/guides/rel_notes/release_19_05.rst index 1b7f14cb2..2b0f60d3d 100644 --- a/doc/guides/rel_notes/release_19_05.rst +++ b/doc/guides/rel_notes/release_19_05.rst @@ -63,6 +63,7 @@ New Features * Added support for Tx descriptor status API in a secondary process. * Added support for RSS RETA and hash configuration get API in a secondary process. + * Added support for Rx packet types list in a secondary process. Removed Items diff --git a/drivers/net/sfc/sfc.c b/drivers/net/sfc/sfc.c index 8526a84b5..83001cb68 100644 --- a/drivers/net/sfc/sfc.c +++ b/drivers/net/sfc/sfc.c @@ -342,6 +342,15 @@ sfc_try_start(struct sfc_adapter *sa) goto fail_nic_init; encp = efx_nic_cfg_get(sa->nic); + + /* + * Refresh (since it may change on NIC reset/restart) a copy of + * supported tunnel encapsulations in shared memory to be used + * on supported Rx packet type classes get. + */ + sa->priv.shared->tunnel_encaps = + encp->enc_tunnel_encapsulations_supported; + if (encp->enc_tunnel_encapsulations_supported != 0) { sfc_log_init(sa, "apply tunnel config"); rc = efx_tunnel_reconfigure(sa->nic); @@ -728,6 +737,13 @@ sfc_attach(struct sfc_adapter *sa) encp = efx_nic_cfg_get(sa->nic); + /* + * Make a copy of supported tunnel encapsulations in shared + * memory to be used on supported Rx packet type classes get. + */ + sa->priv.shared->tunnel_encaps = + encp->enc_tunnel_encapsulations_supported; + if (sa->priv.dp_tx->features & SFC_DP_TX_FEAT_TSO) { sa->tso = encp->enc_fw_assisted_tso_v2_enabled; if (!sa->tso) diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h index 39b4ba52c..725dd5ee6 100644 --- a/drivers/net/sfc/sfc.h +++ b/drivers/net/sfc/sfc.h @@ -184,6 +184,7 @@ struct sfc_adapter_shared { struct sfc_rss rss; boolean_t isolated; + uint32_t tunnel_encaps; struct rte_pci_addr pci_addr; uint16_t port_id; diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index a54a9e66b..286550863 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -182,11 +182,8 @@ static const uint32_t * sfc_dev_supported_ptypes_get(struct rte_eth_dev *dev) { const struct sfc_adapter_priv *sap = sfc_adapter_priv_by_eth_dev(dev); - struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); - const efx_nic_cfg_t *encp = efx_nic_cfg_get(sa->nic); - uint32_t tunnel_encaps = encp->enc_tunnel_encapsulations_supported; - return sap->dp_rx->supported_ptypes_get(tunnel_encaps); + return sap->dp_rx->supported_ptypes_get(sap->shared->tunnel_encaps); } static int @@ -1897,6 +1894,7 @@ sfc_eth_dev_clear_ops(struct rte_eth_dev *dev) } static const struct eth_dev_ops sfc_eth_dev_secondary_ops = { + .dev_supported_ptypes_get = sfc_dev_supported_ptypes_get, .rx_queue_count = sfc_rx_queue_count, .rx_descriptor_done = sfc_rx_descriptor_done, .rx_descriptor_status = sfc_rx_descriptor_status,