From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id B5C3F48A44 for ; Fri, 31 Oct 2025 15:35:59 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AFE8D40150; Fri, 31 Oct 2025 15:35:59 +0100 (CET) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mails.dpdk.org (Postfix) with ESMTP id 668AC40666 for ; Fri, 31 Oct 2025 15:35:58 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1761921358; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ySD6qR2ctg/jkvw9ItGowN5pvSMpx5gYcfSVRvHorz4=; b=WykOdNdmRZGcWOtDUiVmppWarHhNAU8Ktyp8lWMvwmB9vVJlYqw8TQZdT2zmvEgufhMima M17esid41Sb0tHTsjFWeKC5F/4BE3SQTFWogICN5MrNJmu4004kWvHxUvRerZeBPX2c418 U1IrzIVh+k52doyZsxb0zH/pKT0qvBc= Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-328-ReWAEI1INFmblJy4A7VMww-1; Fri, 31 Oct 2025 10:35:56 -0400 X-MC-Unique: ReWAEI1INFmblJy4A7VMww-1 X-Mimecast-MFC-AGG-ID: ReWAEI1INFmblJy4A7VMww_1761921355 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id B16301954B06; Fri, 31 Oct 2025 14:35:55 +0000 (UTC) Received: from rh.redhat.com (unknown [10.44.32.50]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 2267618004D4; Fri, 31 Oct 2025 14:35:53 +0000 (UTC) From: Kevin Traynor To: Gagandeep Singh Cc: dpdk stable Subject: patch 'bus/dpaa: improve cleanup' has been queued to stable release 24.11.4 Date: Fri, 31 Oct 2025 14:32:20 +0000 Message-ID: <20251031143421.324432-18-ktraynor@redhat.com> In-Reply-To: <20251031143421.324432-1-ktraynor@redhat.com> References: <20251031143421.324432-1-ktraynor@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: wpBah5CVTh3XZptTdd4L7RPKugkA86-ixcwa1Z5p-bU_1761921355 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit content-type: text/plain; charset="US-ASCII"; x-default=true X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Hi, FYI, your patch has been queued to stable release 24.11.4 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 11/05/25. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/kevintraynor/dpdk-stable This queued commit can be viewed at: https://github.com/kevintraynor/dpdk-stable/commit/a601aad7f81ae00c875b46a9f437b7b37afa7d31 Thanks. Kevin --- >From a601aad7f81ae00c875b46a9f437b7b37afa7d31 Mon Sep 17 00:00:00 2001 From: Gagandeep Singh Date: Thu, 17 Jul 2025 15:12:37 +0530 Subject: [PATCH] bus/dpaa: improve cleanup [ upstream commit 78ea4b4fcb52f786aeb1c470c730ea3e54e239d5 ] This patch addresses DPAA driver issues with the introduction of rte_eal_cleanup, which caused driver-specific destructors to fail due to memory cleanup. To resolve this, we remove the driver destructor and relocate the code to the bus cleanup function. So, this patch also implements DPAA bus cleanup. Fixes: ff9e112d7870 ("net/dpaa: add NXP DPAA PMD driver skeleton") Signed-off-by: Gagandeep Singh --- drivers/bus/dpaa/base/qbman/qman_driver.c | 2 - drivers/bus/dpaa/dpaa_bus.c | 59 ++++++ drivers/net/dpaa/dpaa_ethdev.c | 217 ++++++++++++++++------ 3 files changed, 216 insertions(+), 62 deletions(-) diff --git a/drivers/bus/dpaa/base/qbman/qman_driver.c b/drivers/bus/dpaa/base/qbman/qman_driver.c index 7a129a2d86..cdce6b777b 100644 --- a/drivers/bus/dpaa/base/qbman/qman_driver.c +++ b/drivers/bus/dpaa/base/qbman/qman_driver.c @@ -229,6 +229,4 @@ int fsl_qman_fq_portal_destroy(struct qman_portal *qp) pr_err("qman_free_global_portal() (%d)\n", ret); - kfree(qp); - process_portal_irq_unmap(cfg->irq); diff --git a/drivers/bus/dpaa/dpaa_bus.c b/drivers/bus/dpaa/dpaa_bus.c index 9ffbe07c93..0d49540ded 100644 --- a/drivers/bus/dpaa/dpaa_bus.c +++ b/drivers/bus/dpaa/dpaa_bus.c @@ -46,4 +46,6 @@ #include +#define RTE_PRIORITY_102 102 + struct rte_dpaa_bus { struct rte_bus bus; @@ -59,4 +61,7 @@ struct netcfg_info *dpaa_netcfg; /* define a variable to hold the portal_key, once created.*/ static pthread_key_t dpaa_portal_key; +/* dpaa lcore specific portals */ +struct dpaa_portal *dpaa_portals[RTE_MAX_LCORE] = {NULL}; +static int dpaa_bus_global_init; unsigned int dpaa_svr_family; @@ -388,4 +393,5 @@ int rte_dpaa_portal_init(void *arg) return ret; } + dpaa_portals[lcore] = DPAA_PER_LCORE_PORTAL; DPAA_BUS_LOG(DEBUG, "QMAN thread initialized"); @@ -445,4 +451,6 @@ dpaa_portal_finish(void *arg) dpaa_io_portal = NULL; DPAA_PER_LCORE_PORTAL = NULL; + dpaa_portals[rte_lcore_id()] = NULL; + DPAA_BUS_DEBUG("Portal cleanup done for lcore = %d", rte_lcore_id()); } @@ -737,4 +745,5 @@ rte_dpaa_bus_probe(void) } } + dpaa_bus_global_init = 1; return 0; @@ -844,4 +853,53 @@ dpaa_bus_dev_iterate(const void *start, const char *str, } +static int +dpaa_bus_cleanup(void) +{ + struct rte_dpaa_device *dev, *tmp_dev; + + BUS_INIT_FUNC_TRACE(); + RTE_TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tmp_dev) { + struct rte_dpaa_driver *drv = dev->driver; + int ret = 0; + + if (!rte_dev_is_probed(&dev->device)) + continue; + if (!drv || !drv->remove) + continue; + ret = drv->remove(dev); + if (ret < 0) { + rte_errno = errno; + return -1; + } + dev->driver = NULL; + dev->device.driver = NULL; + } + dpaa_portal_finish((void *)DPAA_PER_LCORE_PORTAL); + dpaa_bus_global_init = 0; + DPAA_BUS_DEBUG("Bus cleanup done"); + + return 0; +} + +/* Adding destructor for double check in case non-gracefully + * exit. + */ +RTE_FINI_PRIO(dpaa_cleanup, 102) +{ + unsigned int lcore_id; + + if (!dpaa_bus_global_init) + return; + + /* cleanup portals in case non-graceful exit */ + RTE_LCORE_FOREACH_WORKER(lcore_id) { + /* Check for non zero id */ + dpaa_portal_finish((void *)dpaa_portals[lcore_id]); + } + dpaa_portal_finish((void *)DPAA_PER_LCORE_PORTAL); + dpaa_bus_global_init = 0; + DPAA_BUS_DEBUG("Worker thread clean up done"); +} + static struct rte_dpaa_bus rte_dpaa_bus = { .bus = { @@ -854,4 +912,5 @@ static struct rte_dpaa_bus rte_dpaa_bus = { .unplug = dpaa_bus_unplug, .dev_iterate = dpaa_bus_dev_iterate, + .cleanup = dpaa_bus_cleanup, }, .device_list = TAILQ_HEAD_INITIALIZER(rte_dpaa_bus.device_list), diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c index e8d34e5898..58372aa215 100644 --- a/drivers/net/dpaa/dpaa_ethdev.c +++ b/drivers/net/dpaa/dpaa_ethdev.c @@ -55,4 +55,5 @@ #define CHECK_INTERVAL 100 /* 100ms */ #define MAX_REPEAT_TIME 90 /* 9s (90 * 100ms) in total */ +#define RTE_PRIORITY_103 103 /* Supported Rx offloads */ @@ -307,9 +308,10 @@ dpaa_eth_dev_configure(struct rte_eth_dev *dev) if (!(default_q || fmc_q)) { - if (dpaa_fm_config(dev, - eth_conf->rx_adv_conf.rss_conf.rss_hf)) { + ret = dpaa_fm_config(dev, + eth_conf->rx_adv_conf.rss_conf.rss_hf); + if (ret) { dpaa_write_fm_config_to_file(); - DPAA_PMD_ERR("FM port configuration: Failed"); - return -1; + DPAA_PMD_ERR("FM port configuration: Failed(%d)", ret); + return ret; } dpaa_write_fm_config_to_file(); @@ -514,4 +516,5 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) struct rte_eth_link *link = &dev->data->dev_link; struct dpaa_if *dpaa_intf = dev->data->dev_private; + struct qman_fq *fq; int loop; int ret; @@ -523,12 +526,15 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) if (!dpaa_intf) { - DPAA_PMD_WARN("Already closed or not started"); - return -1; + DPAA_PMD_DEBUG("Already closed or not started"); + return -ENOENT; } /* DPAA FM deconfig */ if (!(default_q || fmc_q)) { - if (dpaa_fm_deconfig(dpaa_intf, dev->process_private)) - DPAA_PMD_WARN("DPAA FM deconfig failed"); + ret = dpaa_fm_deconfig(dpaa_intf, dev->process_private); + if (ret) { + DPAA_PMD_WARN("%s: FM deconfig failed(%d)", + dev->data->name, ret); + } } @@ -538,4 +544,8 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) ret = dpaa_eth_dev_stop(dev); + if (ret) { + DPAA_PMD_WARN("%s: stop device failed(%d)", + dev->data->name, ret); + } if (fif->mac_type == fman_offline_internal || @@ -544,13 +554,25 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) /* Reset link to autoneg */ - if (link->link_status && !link->link_autoneg) - dpaa_restart_link_autoneg(__fif->node_name); + if (link->link_status && !link->link_autoneg) { + ret = dpaa_restart_link_autoneg(__fif->node_name); + if (ret) { + DPAA_PMD_WARN("%s: restart link failed(%d)", + dev->data->name, ret); + } + } if (intr_handle && rte_intr_fd_get(intr_handle) && dev->data->dev_conf.intr_conf.lsc != 0) { - dpaa_intr_disable(__fif->node_name); - rte_intr_callback_unregister(intr_handle, - dpaa_interrupt_handler, - (void *)dev); + ret = dpaa_intr_disable(__fif->node_name); + if (ret) { + DPAA_PMD_WARN("%s: disable interrupt failed(%d)", + dev->data->name, ret); + } + ret = rte_intr_callback_unregister(intr_handle, + dpaa_interrupt_handler, (void *)dev); + if (ret) { + DPAA_PMD_WARN("%s: unregister interrupt failed(%d)", + dev->data->name, ret); + } } @@ -560,6 +582,11 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) /* Release RX congestion Groups */ if (dpaa_intf->cgr_rx) { - for (loop = 0; loop < dpaa_intf->nb_rx_queues; loop++) - qman_delete_cgr(&dpaa_intf->cgr_rx[loop]); + for (loop = 0; loop < dpaa_intf->nb_rx_queues; loop++) { + ret = qman_delete_cgr(&dpaa_intf->cgr_rx[loop]); + if (ret) { + DPAA_PMD_WARN("%s: delete rxq%d's cgr err(%d)", + dev->data->name, loop, ret); + } + } rte_free(dpaa_intf->cgr_rx); dpaa_intf->cgr_rx = NULL; @@ -568,10 +595,27 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) /* Release TX congestion Groups */ if (dpaa_intf->cgr_tx) { - for (loop = 0; loop < MAX_DPAA_CORES; loop++) - qman_delete_cgr(&dpaa_intf->cgr_tx[loop]); + for (loop = 0; loop < MAX_DPAA_CORES; loop++) { + ret = qman_delete_cgr(&dpaa_intf->cgr_tx[loop]); + if (ret) { + DPAA_PMD_WARN("%s: delete txq%d's cgr err(%d)", + dev->data->name, loop, ret); + } + } rte_free(dpaa_intf->cgr_tx); dpaa_intf->cgr_tx = NULL; } + /* Freeing queue specific portals */ + for (loop = 0; loop < dpaa_intf->nb_rx_queues; loop++) { + if (!dpaa_intf->rx_queues) + break; + + fq = &dpaa_intf->rx_queues[loop]; + if (fq->qp_initialized) { + rte_dpaa_portal_fq_close(fq); + fq->qp_initialized = 0; + } + } + rte_free(dpaa_intf->rx_queues); dpaa_intf->rx_queues = NULL; @@ -580,11 +624,16 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) dpaa_intf->tx_queues = NULL; if (dpaa_intf->port_handle) { - if (dpaa_fm_deconfig(dpaa_intf, fif)) - DPAA_PMD_WARN("DPAA FM " - "deconfig failed"); + ret = dpaa_fm_deconfig(dpaa_intf, fif); + if (ret) { + DPAA_PMD_WARN("%s: FM deconfig failed(%d)", + dev->data->name, ret); + } } if (fif->num_profiles) { - if (dpaa_port_vsp_cleanup(dpaa_intf, fif)) - DPAA_PMD_WARN("DPAA FM vsp cleanup failed"); + ret = dpaa_port_vsp_cleanup(dpaa_intf, fif); + if (ret) { + DPAA_PMD_WARN("%s: cleanup VSP failed(%d)", + dev->data->name, ret); + } } @@ -1479,4 +1528,6 @@ dpaa_flow_ctrl_set(struct rte_eth_dev *dev, struct dpaa_if *dpaa_intf = dev->data->dev_private; struct rte_eth_fc_conf *net_fc; + struct fman_if *fm_if = dev->process_private; + int ret; PMD_INIT_FUNC_TRACE(); @@ -1497,17 +1548,29 @@ dpaa_flow_ctrl_set(struct rte_eth_dev *dev, } - if (fc_conf->mode == RTE_ETH_FC_NONE) { + if (fc_conf->mode == RTE_ETH_FC_NONE) return 0; - } else if (fc_conf->mode == RTE_ETH_FC_TX_PAUSE || - fc_conf->mode == RTE_ETH_FC_FULL) { - fman_if_set_fc_threshold(dev->process_private, + + if (fc_conf->mode != RTE_ETH_FC_TX_PAUSE && + fc_conf->mode != RTE_ETH_FC_FULL) + goto save_fc; + + ret = fman_if_set_fc_threshold(fm_if, fc_conf->high_water, fc_conf->low_water, dpaa_intf->bp_info->bpid); - if (fc_conf->pause_time) - fman_if_set_fc_quanta(dev->process_private, - fc_conf->pause_time); + if (ret) { + DPAA_PMD_ERR("Set %s's fc on bpid(%d) err(%d)", + dev->data->name, dpaa_intf->bp_info->bpid, + ret); + } + if (fc_conf->pause_time) { + ret = fman_if_set_fc_quanta(fm_if, fc_conf->pause_time); + if (ret) { + DPAA_PMD_ERR("Set %s's fc pause time err(%d)", + dev->data->name, ret); + } } +save_fc: /* Save the information in dpaa device */ net_fc->pause_time = fc_conf->pause_time; @@ -1636,11 +1699,13 @@ dpaa_dev_rss_hash_update(struct rte_eth_dev *dev, struct rte_eth_dev_data *data = dev->data; struct rte_eth_conf *eth_conf = &data->dev_conf; + int ret; PMD_INIT_FUNC_TRACE(); if (!(default_q || fmc_q)) { - if (dpaa_fm_config(dev, rss_conf->rss_hf)) { - DPAA_PMD_ERR("FM port configuration: Failed"); - return -1; + ret = dpaa_fm_config(dev, rss_conf->rss_hf); + if (ret) { + DPAA_PMD_ERR("FM port configuration: Failed(%d)", ret); + return ret; } eth_conf->rx_adv_conf.rss_conf.rss_hf = rss_conf->rss_hf; @@ -2243,6 +2308,6 @@ dpaa_dev_init(struct rte_eth_dev *eth_dev) * queues. */ - if (num_rx_fqs < 0 || num_rx_fqs > DPAA_MAX_NUM_PCD_QUEUES) { - DPAA_PMD_ERR("Invalid number of RX queues"); + if (num_rx_fqs > DPAA_MAX_NUM_PCD_QUEUES) { + DPAA_PMD_ERR("Invalid number of RX queues(%d)", num_rx_fqs); return -EINVAL; } @@ -2500,6 +2565,6 @@ rte_dpaa_probe(struct rte_dpaa_driver *dpaa_drv, ret = dpaa_dev_init_secondary(eth_dev); - if (ret != 0) { - DPAA_PMD_ERR("secondary dev init failed"); + if (ret) { + DPAA_PMD_ERR("secondary dev init failed(%d)", ret); return ret; } @@ -2516,7 +2581,8 @@ rte_dpaa_probe(struct rte_dpaa_driver *dpaa_drv, if (!(default_q || fmc_q)) { - if (dpaa_fm_init()) { - DPAA_PMD_ERR("FM init failed"); - return -1; + ret = dpaa_fm_init(); + if (ret) { + DPAA_PMD_ERR("FM init failed(%d)", ret); + return ret; } } @@ -2593,4 +2659,51 @@ rte_dpaa_probe(struct rte_dpaa_driver *dpaa_drv, } +/* Adding destructor for double check in case non-gracefully + * exit. + */ +RTE_FINI_PRIO(dpaa_finish, 103) +{ + struct dpaa_if *dpaa_intf; + int loop; + struct qman_fq *fq; + uint16_t portid; + struct rte_eth_dev *dev; + + PMD_INIT_FUNC_TRACE(); + /* For secondary, primary will do all the cleanup */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return; + + if (!is_global_init) + return; + + if (!(default_q || fmc_q)) { + if (dpaa_fm_term()) + DPAA_PMD_WARN("DPAA FM term failed"); + + DPAA_PMD_INFO("DPAA fman cleaned up"); + } + + RTE_ETH_FOREACH_DEV(portid) { + dev = &rte_eth_devices[portid]; + if (strcmp(dev->device->driver->name, + rte_dpaa_pmd.driver.name)) + continue; + dpaa_intf = dev->data->dev_private; + /* Freeing queue specific portals */ + for (loop = 0; loop < dpaa_intf->nb_rx_queues; loop++) { + if (!dpaa_intf->rx_queues) + break; + + fq = &dpaa_intf->rx_queues[loop]; + if (fq->qp_initialized) { + rte_dpaa_portal_fq_close(fq); + fq->qp_initialized = 0; + } + } + } + is_global_init = 0; +} + static int rte_dpaa_remove(struct rte_dpaa_device *dpaa_dev) @@ -2603,27 +2716,11 @@ rte_dpaa_remove(struct rte_dpaa_device *dpaa_dev) eth_dev = dpaa_dev->eth_dev; dpaa_eth_dev_close(eth_dev); + ret = rte_eth_dev_release_port(eth_dev); dpaa_valid_dev--; - if (!dpaa_valid_dev) + if (!dpaa_valid_dev) { rte_mempool_free(dpaa_tx_sg_pool); - ret = rte_eth_dev_release_port(eth_dev); - - return ret; -} - -static void __attribute__((destructor(102))) dpaa_finish(void) -{ - /* For secondary, primary will do all the cleanup */ - if (rte_eal_process_type() != RTE_PROC_PRIMARY) - return; - - if (!(default_q || fmc_q)) { - if (is_global_init) - if (dpaa_fm_term()) - DPAA_PMD_WARN("DPAA FM term failed"); - - is_global_init = 0; - - DPAA_PMD_INFO("DPAA fman cleaned up"); + dpaa_finish(); } + return ret; } -- 2.51.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2025-10-31 13:53:52.832500388 +0000 +++ 0018-bus-dpaa-improve-cleanup.patch 2025-10-31 13:53:52.036523368 +0000 @@ -1 +1 @@ -From 78ea4b4fcb52f786aeb1c470c730ea3e54e239d5 Mon Sep 17 00:00:00 2001 +From a601aad7f81ae00c875b46a9f437b7b37afa7d31 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 78ea4b4fcb52f786aeb1c470c730ea3e54e239d5 ] + @@ -15 +16,0 @@ -Cc: stable@dpdk.org @@ -20 +21 @@ - drivers/bus/dpaa/dpaa_bus.c | 58 ++++++ + drivers/bus/dpaa/dpaa_bus.c | 59 ++++++ @@ -22 +23 @@ - 3 files changed, 215 insertions(+), 62 deletions(-) + 3 files changed, 216 insertions(+), 62 deletions(-) @@ -36 +37 @@ -index 59757c43ec..1a35aa52df 100644 +index 9ffbe07c93..0d49540ded 100644 @@ -39,4 +40,2 @@ -@@ -49,4 +49,5 @@ - #define DPAA_SOC_ID_FILE "/sys/devices/soc0/soc_id" - #define DPAA_SVR_MASK 0xffff0000 -+#define RTE_PRIORITY_102 102 +@@ -46,4 +46,6 @@ + #include @@ -43,0 +43,2 @@ ++#define RTE_PRIORITY_102 102 ++ @@ -45 +46,2 @@ -@@ -64,4 +65,7 @@ static struct netcfg_info *dpaa_netcfg; + struct rte_bus bus; +@@ -59,4 +61,7 @@ struct netcfg_info *dpaa_netcfg; @@ -52,2 +54,2 @@ - #define FSL_DPAA_BUS_NAME dpaa_bus -@@ -403,4 +407,5 @@ int rte_dpaa_portal_init(void *arg) + unsigned int dpaa_svr_family; +@@ -388,4 +393,5 @@ int rte_dpaa_portal_init(void *arg) @@ -59 +61 @@ -@@ -462,4 +467,6 @@ dpaa_portal_finish(void *arg) +@@ -445,4 +451,6 @@ dpaa_portal_finish(void *arg) @@ -66 +68 @@ -@@ -772,4 +779,5 @@ rte_dpaa_bus_probe(void) +@@ -737,4 +745,5 @@ rte_dpaa_bus_probe(void) @@ -72 +74 @@ -@@ -879,4 +887,53 @@ dpaa_bus_dev_iterate(const void *start, const char *str, +@@ -844,4 +853,53 @@ dpaa_bus_dev_iterate(const void *start, const char *str, @@ -126 +128 @@ -@@ -889,4 +946,5 @@ static struct rte_dpaa_bus rte_dpaa_bus = { +@@ -854,4 +912,5 @@ static struct rte_dpaa_bus rte_dpaa_bus = { @@ -133 +135 @@ -index 62cafb7073..c8b69c5291 100644 +index e8d34e5898..58372aa215 100644 @@ -136,3 +138,3 @@ -@@ -57,4 +57,5 @@ - #define MAX_REPEAT_TIME 90 /* 9s (90 * 100ms) in total */ - #define DRIVER_RECV_ERR_PKTS "recv_err_pkts" +@@ -55,4 +55,5 @@ + #define CHECK_INTERVAL 100 /* 100ms */ + #define MAX_REPEAT_TIME 90 /* 9s (90 * 100ms) in total */ @@ -142 +144 @@ -@@ -311,9 +312,10 @@ dpaa_eth_dev_configure(struct rte_eth_dev *dev) +@@ -307,9 +308,10 @@ dpaa_eth_dev_configure(struct rte_eth_dev *dev) @@ -157 +159 @@ -@@ -518,4 +520,5 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) +@@ -514,4 +516,5 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) @@ -163 +165 @@ -@@ -527,12 +530,15 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) +@@ -523,12 +526,15 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) @@ -183 +185 @@ -@@ -542,4 +548,8 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) +@@ -538,4 +544,8 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) @@ -192 +194 @@ -@@ -548,13 +558,25 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) +@@ -544,13 +554,25 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) @@ -224 +226 @@ -@@ -564,6 +586,11 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) +@@ -560,6 +582,11 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) @@ -238 +240 @@ -@@ -572,10 +599,27 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) +@@ -568,10 +595,27 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) @@ -268 +270 @@ -@@ -584,11 +628,16 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) +@@ -580,11 +624,16 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) @@ -290 +292 @@ -@@ -1463,4 +1512,6 @@ dpaa_flow_ctrl_set(struct rte_eth_dev *dev, +@@ -1479,4 +1528,6 @@ dpaa_flow_ctrl_set(struct rte_eth_dev *dev, @@ -297 +299 @@ -@@ -1481,17 +1532,29 @@ dpaa_flow_ctrl_set(struct rte_eth_dev *dev, +@@ -1497,17 +1548,29 @@ dpaa_flow_ctrl_set(struct rte_eth_dev *dev, @@ -334 +336 @@ -@@ -1620,11 +1683,13 @@ dpaa_dev_rss_hash_update(struct rte_eth_dev *dev, +@@ -1636,11 +1699,13 @@ dpaa_dev_rss_hash_update(struct rte_eth_dev *dev, @@ -351 +353 @@ -@@ -2234,6 +2299,6 @@ dpaa_dev_init(struct rte_eth_dev *eth_dev) +@@ -2243,6 +2308,6 @@ dpaa_dev_init(struct rte_eth_dev *eth_dev) @@ -360 +362 @@ -@@ -2495,6 +2560,6 @@ rte_dpaa_probe(struct rte_dpaa_driver *dpaa_drv, +@@ -2500,6 +2565,6 @@ rte_dpaa_probe(struct rte_dpaa_driver *dpaa_drv, @@ -369 +371 @@ -@@ -2511,7 +2576,8 @@ rte_dpaa_probe(struct rte_dpaa_driver *dpaa_drv, +@@ -2516,7 +2581,8 @@ rte_dpaa_probe(struct rte_dpaa_driver *dpaa_drv, @@ -381 +383 @@ -@@ -2588,4 +2654,51 @@ rte_dpaa_probe(struct rte_dpaa_driver *dpaa_drv, +@@ -2593,4 +2659,51 @@ rte_dpaa_probe(struct rte_dpaa_driver *dpaa_drv, @@ -433 +435 @@ -@@ -2598,27 +2711,11 @@ rte_dpaa_remove(struct rte_dpaa_device *dpaa_dev) +@@ -2603,27 +2716,11 @@ rte_dpaa_remove(struct rte_dpaa_device *dpaa_dev)