From patchwork Sun Feb 15 15:24:45 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 3358 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id E5A2FB57C; Sun, 15 Feb 2015 16:25:01 +0100 (CET) Received: from mail-ie0-f174.google.com (mail-ie0-f174.google.com [209.85.223.174]) by dpdk.org (Postfix) with ESMTP id 3E00EB568 for ; Sun, 15 Feb 2015 16:25:00 +0100 (CET) Received: by iecat20 with SMTP id at20so29221084iec.12 for ; Sun, 15 Feb 2015 07:24:59 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=Hq0x19XPpHxQ7x6fYGYH97UFwhYh8q3aLC401kqBMSI=; b=SQqJWkCLSXB991DBXcScckhWqDjBM+QnxdLwleSYmeGKClo5gJ0loNAc5ICCFxPkbK xqOUfdOdYXinAvKcMlQMyIfj1lCn55GMtTRt7h1krnnFtspa1b4pFXF+CrF/KjoXOtpR GM4v+l8fA1VVhXeeE1hDvhh08kqbBNvJn3u2wvIVSKUc+knKKlf0GlRAU9f2kNdYh1UU n2Z7y7I/dn1PzLjesIaBfD3BxR+VMvsBvIpZb+6FcuxkWFgp9aj8q5Wud3VChGtZrgy0 j5oJKUzMOXFH5LJ0813psHElA9gUNj469EJOTZP5HLl58pF3wS+ISnSd3GqoqBvfeEwU V1jw== X-Gm-Message-State: ALoCoQlnX0tX7YG+Y4oGexPvdyOATG22Y/n65P6sy4Hwipl+oAbcKPGEGI3jlJRNezqpRzYDUfsN X-Received: by 10.107.156.85 with SMTP id f82mr24779429ioe.45.1424013899439; Sun, 15 Feb 2015 07:24:59 -0800 (PST) Received: from uryu.home.lan ([67.210.173.2]) by mx.google.com with ESMTPSA id i2sm7949373ioi.41.2015.02.15.07.24.58 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 15 Feb 2015 07:24:58 -0800 (PST) From: Stephen Hemminger X-Google-Original-From: Stephen Hemminger To: dev@dpdk.org Date: Sun, 15 Feb 2015 10:24:45 -0500 Message-Id: <1424013889-2226-1-git-send-email-shemming@brocade.com> X-Mailer: git-send-email 2.1.4 Cc: Stephen Hemminger Subject: [dpdk-dev] [PATCH 1/5] xen: allow choosing dom0 support at runtime X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The previous code would only allow building library and application so that it ran on Xen DOM0 or not on DOM0. This changes that to a runtime flag. Signed-off-by: Stephen Hemminger Acked-by: Jijiang Liu --- v2 -- fix i40e as well lib/librte_eal/common/include/rte_memory.h | 4 +++ lib/librte_eal/linuxapp/eal/eal_memory.c | 7 ++++ lib/librte_ether/rte_ethdev.c | 22 ++++++++++++ lib/librte_ether/rte_ethdev.h | 23 ++++++++++++ lib/librte_mempool/rte_mempool.c | 26 +++++++------- lib/librte_pmd_e1000/em_rxtx.c | 30 +++------------- lib/librte_pmd_e1000/igb_rxtx.c | 52 +++++++++------------------ lib/librte_pmd_i40e/i40e_ethdev.c | 16 +++++---- lib/librte_pmd_i40e/i40e_fdir.c | 8 +++-- lib/librte_pmd_i40e/i40e_rxtx.c | 57 +++++++++++++++++------------ lib/librte_pmd_ixgbe/ixgbe_rxtx.c | 58 +++++++++--------------------- 11 files changed, 156 insertions(+), 147 deletions(-) diff --git a/lib/librte_eal/common/include/rte_memory.h b/lib/librte_eal/common/include/rte_memory.h index 7f8103f..ab6c1ff 100644 --- a/lib/librte_eal/common/include/rte_memory.h +++ b/lib/librte_eal/common/include/rte_memory.h @@ -176,6 +176,10 @@ unsigned rte_memory_get_nchannel(void); unsigned rte_memory_get_nrank(void); #ifdef RTE_LIBRTE_XEN_DOM0 + +/**< Internal use only - should DOM0 memory mapping be used */ +extern int is_xen_dom0_supported(void); + /** * Return the physical address of elt, which is an element of the pool mp. * diff --git a/lib/librte_eal/linuxapp/eal/eal_memory.c b/lib/librte_eal/linuxapp/eal/eal_memory.c index a67a1b0..4afda2a 100644 --- a/lib/librte_eal/linuxapp/eal/eal_memory.c +++ b/lib/librte_eal/linuxapp/eal/eal_memory.c @@ -98,6 +98,13 @@ #include "eal_filesystem.h" #include "eal_hugepages.h" +#ifdef RTE_LIBRTE_XEN_DOM0 +int is_xen_dom0_supported(void) +{ + return internal_config.xen_dom0_support; +} +#endif + /** * @file * Huge page mapping under linux diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c index ea3a1fb..457e0bc 100644 --- a/lib/librte_ether/rte_ethdev.c +++ b/lib/librte_ether/rte_ethdev.c @@ -2825,6 +2825,27 @@ _rte_eth_dev_callback_process(struct rte_eth_dev *dev, } rte_spinlock_unlock(&rte_eth_dev_cb_lock); } + +const struct rte_memzone * +rte_eth_dma_zone_reserve(const struct rte_eth_dev *dev, const char *ring_name, + uint16_t queue_id, size_t size, unsigned align, + int socket_id) +{ + char z_name[RTE_MEMZONE_NAMESIZE]; + const struct rte_memzone *mz; + + snprintf(z_name, sizeof(z_name), "%s_%s_%d_%d", + dev->driver->pci_drv.name, ring_name, + dev->data->port_id, queue_id); + + mz = rte_memzone_lookup(z_name); + if (mz) + return mz; + + return rte_memzone_reserve_bounded(z_name, size, + socket_id, 0, align, RTE_PGSIZE_2M); +} + #ifdef RTE_NIC_BYPASS int rte_eth_dev_bypass_init(uint8_t port_id) { @@ -3003,6 +3024,7 @@ rte_eth_dev_bypass_wd_reset(uint8_t port_id) (*dev->dev_ops->bypass_wd_reset)(dev); return 0; } + #endif int diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index 1200c1c..747acb5 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -3664,6 +3664,29 @@ int rte_eth_dev_filter_supported(uint8_t port_id, enum rte_filter_type filter_ty int rte_eth_dev_filter_ctrl(uint8_t port_id, enum rte_filter_type filter_type, enum rte_filter_op filter_op, void *arg); +/** + * Create memzone for HW rings. + * malloc can't be used as the physical address is needed. + * If the memzone is already created, then this function returns a ptr + * to the old one. + * + * @param eth_dev + * The *eth_dev* pointer is the address of the *rte_eth_dev* structure + * @param name + * The name of the memory zone + * @param queue_id + * The index of the queue to add to name + * @param size + * The sizeof of the memory area + * @param align + * Alignment for resulting memzone. Must be a power of 2. + * @param socket_id + * The *socket_id* argument is the socket identifier in case of NUMA. + */ +const struct rte_memzone * +rte_eth_dma_zone_reserve(const struct rte_eth_dev *eth_dev, const char *name, + uint16_t queue_id, size_t size, + unsigned align, int socket_id); #ifdef __cplusplus } #endif diff --git a/lib/librte_mempool/rte_mempool.c b/lib/librte_mempool/rte_mempool.c index 4cf6c25..5056a4f 100644 --- a/lib/librte_mempool/rte_mempool.c +++ b/lib/librte_mempool/rte_mempool.c @@ -372,19 +372,21 @@ rte_mempool_create(const char *name, unsigned n, unsigned elt_size, int socket_id, unsigned flags) { #ifdef RTE_LIBRTE_XEN_DOM0 - return (rte_dom0_mempool_create(name, n, elt_size, - cache_size, private_data_size, - mp_init, mp_init_arg, - obj_init, obj_init_arg, - socket_id, flags)); -#else - return (rte_mempool_xmem_create(name, n, elt_size, - cache_size, private_data_size, - mp_init, mp_init_arg, - obj_init, obj_init_arg, - socket_id, flags, - NULL, NULL, MEMPOOL_PG_NUM_DEFAULT, MEMPOOL_PG_SHIFT_MAX)); + if (is_xen_dom0_supported()) + return (rte_dom0_mempool_create(name, n, elt_size, + cache_size, private_data_size, + mp_init, mp_init_arg, + obj_init, obj_init_arg, + socket_id, flags)); + else #endif + return (rte_mempool_xmem_create(name, n, elt_size, + cache_size, private_data_size, + mp_init, mp_init_arg, + obj_init, obj_init_arg, + socket_id, flags, + NULL, NULL, MEMPOOL_PG_NUM_DEFAULT, + MEMPOOL_PG_SHIFT_MAX)); } /* diff --git a/lib/librte_pmd_e1000/em_rxtx.c b/lib/librte_pmd_e1000/em_rxtx.c index aa0b88c..9e09cfa 100644 --- a/lib/librte_pmd_e1000/em_rxtx.c +++ b/lib/librte_pmd_e1000/em_rxtx.c @@ -1104,28 +1104,6 @@ eth_em_recv_scattered_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, #define EM_MAX_BUF_SIZE 16384 #define EM_RCTL_FLXBUF_STEP 1024 -static const struct rte_memzone * -ring_dma_zone_reserve(struct rte_eth_dev *dev, const char *ring_name, - uint16_t queue_id, uint32_t ring_size, int socket_id) -{ - const struct rte_memzone *mz; - char z_name[RTE_MEMZONE_NAMESIZE]; - - snprintf(z_name, sizeof(z_name), "%s_%s_%d_%d", - dev->driver->pci_drv.name, ring_name, dev->data->port_id, - queue_id); - - if ((mz = rte_memzone_lookup(z_name)) != 0) - return (mz); - -#ifdef RTE_LIBRTE_XEN_DOM0 - return rte_memzone_reserve_bounded(z_name, ring_size, - socket_id, 0, RTE_CACHE_LINE_SIZE, RTE_PGSIZE_2M); -#else - return rte_memzone_reserve(z_name, ring_size, socket_id, 0); -#endif -} - static void em_tx_queue_release_mbufs(struct em_tx_queue *txq) { @@ -1273,8 +1251,8 @@ eth_em_tx_queue_setup(struct rte_eth_dev *dev, * resizing in later calls to the queue setup function. */ tsize = sizeof (txq->tx_ring[0]) * EM_MAX_RING_DESC; - if ((tz = ring_dma_zone_reserve(dev, "tx_ring", queue_idx, tsize, - socket_id)) == NULL) + if ((tz = rte_eth_dma_zone_reserve(dev, "tx_ring", queue_idx, tsize, + RTE_CACHE_LINE_SIZE, socket_id)) == NULL) return (-ENOMEM); /* Allocate the tx queue data structure. */ @@ -1400,8 +1378,8 @@ eth_em_rx_queue_setup(struct rte_eth_dev *dev, /* Allocate RX ring for max possible mumber of hardware descriptors. */ rsize = sizeof (rxq->rx_ring[0]) * EM_MAX_RING_DESC; - if ((rz = ring_dma_zone_reserve(dev, "rx_ring", queue_idx, rsize, - socket_id)) == NULL) + if ((rz = rte_eth_dma_zone_reserve(dev, "rx_ring", queue_idx, rsize, + RTE_CACHE_LINE_SIZE, socket_id)) == NULL) return (-ENOMEM); /* Allocate the RX queue data structure. */ diff --git a/lib/librte_pmd_e1000/igb_rxtx.c b/lib/librte_pmd_e1000/igb_rxtx.c index 5c394a9..d36469b 100644 --- a/lib/librte_pmd_e1000/igb_rxtx.c +++ b/lib/librte_pmd_e1000/igb_rxtx.c @@ -1109,29 +1109,6 @@ eth_igb_recv_scattered_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, #define IGB_MIN_RING_DESC 32 #define IGB_MAX_RING_DESC 4096 -static const struct rte_memzone * -ring_dma_zone_reserve(struct rte_eth_dev *dev, const char *ring_name, - uint16_t queue_id, uint32_t ring_size, int socket_id) -{ - char z_name[RTE_MEMZONE_NAMESIZE]; - const struct rte_memzone *mz; - - snprintf(z_name, sizeof(z_name), "%s_%s_%d_%d", - dev->driver->pci_drv.name, ring_name, - dev->data->port_id, queue_id); - mz = rte_memzone_lookup(z_name); - if (mz) - return mz; - -#ifdef RTE_LIBRTE_XEN_DOM0 - return rte_memzone_reserve_bounded(z_name, ring_size, - socket_id, 0, IGB_ALIGN, RTE_PGSIZE_2M); -#else - return rte_memzone_reserve_aligned(z_name, ring_size, - socket_id, 0, IGB_ALIGN); -#endif -} - static void igb_tx_queue_release_mbufs(struct igb_tx_queue *txq) { @@ -1265,8 +1242,8 @@ eth_igb_tx_queue_setup(struct rte_eth_dev *dev, * resizing in later calls to the queue setup function. */ size = sizeof(union e1000_adv_tx_desc) * IGB_MAX_RING_DESC; - tz = ring_dma_zone_reserve(dev, "tx_ring", queue_idx, - size, socket_id); + tz = rte_eth_dma_zone_reserve(dev, "tx_ring", queue_idx, size, + IGB_ALIGN, socket_id); if (tz == NULL) { igb_tx_queue_release(txq); return (-ENOMEM); @@ -1284,12 +1261,14 @@ eth_igb_tx_queue_setup(struct rte_eth_dev *dev, txq->port_id = dev->data->port_id; txq->tdt_reg_addr = E1000_PCI_REG_ADDR(hw, E1000_TDT(txq->reg_idx)); -#ifndef RTE_LIBRTE_XEN_DOM0 - txq->tx_ring_phys_addr = (uint64_t) tz->phys_addr; -#else - txq->tx_ring_phys_addr = rte_mem_phy2mch(tz->memseg_id, tz->phys_addr); +#ifdef RTE_LIBRTE_XEN_DOM0 + if (is_xen_dom0_supported()) + txq->tx_ring_phys_addr = rte_mem_phy2mch(tz->memseg_id, tz->phys_addr); + else #endif - txq->tx_ring = (union e1000_adv_tx_desc *) tz->addr; + txq->tx_ring_phys_addr = (uint64_t) tz->phys_addr; + + txq->tx_ring = (union e1000_adv_tx_desc *) tz->addr; /* Allocate software ring */ txq->sw_ring = rte_zmalloc("txq->sw_ring", sizeof(struct igb_tx_entry) * nb_desc, @@ -1414,18 +1393,21 @@ eth_igb_rx_queue_setup(struct rte_eth_dev *dev, * resizing in later calls to the queue setup function. */ size = sizeof(union e1000_adv_rx_desc) * IGB_MAX_RING_DESC; - rz = ring_dma_zone_reserve(dev, "rx_ring", queue_idx, size, socket_id); + rz = rte_eth_dma_zone_reserve(dev, "rx_ring", queue_idx, size, + IGB_ALIGN, socket_id); if (rz == NULL) { igb_rx_queue_release(rxq); return (-ENOMEM); } rxq->rdt_reg_addr = E1000_PCI_REG_ADDR(hw, E1000_RDT(rxq->reg_idx)); rxq->rdh_reg_addr = E1000_PCI_REG_ADDR(hw, E1000_RDH(rxq->reg_idx)); -#ifndef RTE_LIBRTE_XEN_DOM0 - rxq->rx_ring_phys_addr = (uint64_t) rz->phys_addr; -#else - rxq->rx_ring_phys_addr = rte_mem_phy2mch(rz->memseg_id, rz->phys_addr); +#ifdef RTE_LIBRTE_XEN_DOM0 + if (is_xen_dom0_supported()) + rxq->rx_ring_phys_addr = + rte_mem_phy2mch(rz->memseg_id, rz->phys_addr); + else #endif + rxq->rx_ring_phys_addr = (uint64_t) rz->phys_addr; rxq->rx_ring = (union e1000_adv_rx_desc *) rz->addr; /* Allocate software ring. */ diff --git a/lib/librte_pmd_i40e/i40e_ethdev.c b/lib/librte_pmd_i40e/i40e_ethdev.c index 9fa6bec..44a012f 100644 --- a/lib/librte_pmd_i40e/i40e_ethdev.c +++ b/lib/librte_pmd_i40e/i40e_ethdev.c @@ -1979,11 +1979,12 @@ i40e_allocate_dma_mem_d(__attribute__((unused)) struct i40e_hw *hw, id++; snprintf(z_name, sizeof(z_name), "i40e_dma_%"PRIu64, id); #ifdef RTE_LIBRTE_XEN_DOM0 - mz = rte_memzone_reserve_bounded(z_name, size, 0, 0, alignment, - RTE_PGSIZE_2M); -#else - mz = rte_memzone_reserve_aligned(z_name, size, 0, 0, alignment); + if (is_xen_dom0_supported()) + mz = rte_memzone_reserve_bounded(z_name, size, 0, 0, alignment, + RTE_PGSIZE_2M); + else #endif + mz = rte_memzone_reserve_aligned(z_name, size, 0, 0, alignment); if (!mz) return I40E_ERR_NO_MEMORY; @@ -1991,10 +1992,11 @@ i40e_allocate_dma_mem_d(__attribute__((unused)) struct i40e_hw *hw, mem->size = size; mem->va = mz->addr; #ifdef RTE_LIBRTE_XEN_DOM0 - mem->pa = rte_mem_phy2mch(mz->memseg_id, mz->phys_addr); -#else - mem->pa = mz->phys_addr; + if (is_xen_dom0_supported()) + mem->pa = rte_mem_phy2mch(mz->memseg_id, mz->phys_addr); + else #endif + mem->pa = mz->phys_addr; return I40E_SUCCESS; } diff --git a/lib/librte_pmd_i40e/i40e_fdir.c b/lib/librte_pmd_i40e/i40e_fdir.c index 68511c8..4c5b185 100644 --- a/lib/librte_pmd_i40e/i40e_fdir.c +++ b/lib/librte_pmd_i40e/i40e_fdir.c @@ -274,10 +274,12 @@ i40e_fdir_setup(struct i40e_pf *pf) } pf->fdir.prg_pkt = mz->addr; #ifdef RTE_LIBRTE_XEN_DOM0 - pf->fdir.dma_addr = rte_mem_phy2mch(mz->memseg_id, mz->phys_addr); -#else - pf->fdir.dma_addr = (uint64_t)mz->phys_addr; + if (is_xen_dom0_supported()) + pf->fdir.dma_addr = rte_mem_phy2mch(mz->memseg_id, mz->phys_addr); + else #endif + pf->fdir.dma_addr = (uint64_t)mz->phys_addr; + pf->fdir.match_counter_index = I40E_COUNTER_INDEX_FDIR(hw->pf_id); PMD_DRV_LOG(INFO, "FDIR setup successfully, with programming queue %u.", vsi->base_queue); diff --git a/lib/librte_pmd_i40e/i40e_rxtx.c b/lib/librte_pmd_i40e/i40e_rxtx.c index 2beae3c..bd01dc0 100644 --- a/lib/librte_pmd_i40e/i40e_rxtx.c +++ b/lib/librte_pmd_i40e/i40e_rxtx.c @@ -1796,10 +1796,11 @@ i40e_dev_rx_queue_setup(struct rte_eth_dev *dev, memset(rz->addr, 0, ring_size); #ifdef RTE_LIBRTE_XEN_DOM0 - rxq->rx_ring_phys_addr = rte_mem_phy2mch(rz->memseg_id, rz->phys_addr); -#else - rxq->rx_ring_phys_addr = (uint64_t)rz->phys_addr; + if (is_xen_dom0_supported()) + rxq->rx_ring_phys_addr = rte_mem_phy2mch(rz->memseg_id, rz->phys_addr); + else #endif + rxq->rx_ring_phys_addr = (uint64_t)rz->phys_addr; rxq->rx_ring = (union i40e_rx_desc *)rz->addr; @@ -2079,10 +2080,11 @@ i40e_dev_tx_queue_setup(struct rte_eth_dev *dev, txq->tx_deferred_start = tx_conf->tx_deferred_start; #ifdef RTE_LIBRTE_XEN_DOM0 - txq->tx_ring_phys_addr = rte_mem_phy2mch(tz->memseg_id, tz->phys_addr); -#else - txq->tx_ring_phys_addr = (uint64_t)tz->phys_addr; + if (is_xen_dom0_supported()) + txq->tx_ring_phys_addr = rte_mem_phy2mch(tz->memseg_id, tz->phys_addr); + else #endif + txq->tx_ring_phys_addr = (uint64_t)tz->phys_addr; txq->tx_ring = (struct i40e_tx_desc *)tz->addr; /* Allocate software ring */ @@ -2147,12 +2149,13 @@ i40e_ring_dma_zone_reserve(struct rte_eth_dev *dev, return mz; #ifdef RTE_LIBRTE_XEN_DOM0 - return rte_memzone_reserve_bounded(z_name, ring_size, - socket_id, 0, I40E_ALIGN, RTE_PGSIZE_2M); -#else - return rte_memzone_reserve_aligned(z_name, ring_size, - socket_id, 0, I40E_ALIGN); -#endif + if (is_xen_dom0_supported()) + return rte_memzone_reserve_bounded(z_name, ring_size, + socket_id, 0, I40E_ALIGN, RTE_PGSIZE_2M); + else +#endif + return rte_memzone_reserve_aligned(z_name, ring_size, + socket_id, 0, I40E_ALIGN); } const struct rte_memzone * @@ -2164,12 +2167,14 @@ i40e_memzone_reserve(const char *name, uint32_t len, int socket_id) if (mz) return mz; #ifdef RTE_LIBRTE_XEN_DOM0 - mz = rte_memzone_reserve_bounded(name, len, - socket_id, 0, I40E_ALIGN, RTE_PGSIZE_2M); -#else - mz = rte_memzone_reserve_aligned(name, len, - socket_id, 0, I40E_ALIGN); + if (is_xen_dom0_supported()) + mz = rte_memzone_reserve_bounded(name, len, + socket_id, 0, I40E_ALIGN, RTE_PGSIZE_2M); + else #endif + mz = rte_memzone_reserve_aligned(name, len, + socket_id, 0, I40E_ALIGN); + return mz; } @@ -2573,10 +2578,13 @@ i40e_fdir_setup_tx_resources(struct i40e_pf *pf) txq->vsi = pf->fdir.fdir_vsi; #ifdef RTE_LIBRTE_XEN_DOM0 - txq->tx_ring_phys_addr = rte_mem_phy2mch(tz->memseg_id, tz->phys_addr); -#else - txq->tx_ring_phys_addr = (uint64_t)tz->phys_addr; + if (is_xen_dom0_supported()) + txq->tx_ring_phys_addr = rte_mem_phy2mch(tz->memseg_id, + tz->phys_addr); + else #endif + txq->tx_ring_phys_addr = (uint64_t)tz->phys_addr; + txq->tx_ring = (struct i40e_tx_desc *)tz->addr; /* * don't need to allocate software ring and reset for the fdir @@ -2633,10 +2641,13 @@ i40e_fdir_setup_rx_resources(struct i40e_pf *pf) rxq->vsi = pf->fdir.fdir_vsi; #ifdef RTE_LIBRTE_XEN_DOM0 - rxq->rx_ring_phys_addr = rte_mem_phy2mch(rz->memseg_id, rz->phys_addr); -#else - rxq->rx_ring_phys_addr = (uint64_t)rz->phys_addr; + if (is_xen_dom0_supported()) + rxq->rx_ring_phys_addr = rte_mem_phy2mch(rz->memseg_id, + rz->phys_addr); + else #endif + rxq->rx_ring_phys_addr = (uint64_t)rz->phys_addr; + rxq->rx_ring = (union i40e_rx_desc *)rz->addr; /* diff --git a/lib/librte_pmd_ixgbe/ixgbe_rxtx.c b/lib/librte_pmd_ixgbe/ixgbe_rxtx.c index e6766b3..303144d 100644 --- a/lib/librte_pmd_ixgbe/ixgbe_rxtx.c +++ b/lib/librte_pmd_ixgbe/ixgbe_rxtx.c @@ -1656,35 +1656,6 @@ ixgbe_recv_scattered_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, #define IXGBE_MIN_RING_DESC 32 #define IXGBE_MAX_RING_DESC 4096 -/* - * Create memzone for HW rings. malloc can't be used as the physical address is - * needed. If the memzone is already created, then this function returns a ptr - * to the old one. - */ -static const struct rte_memzone * -ring_dma_zone_reserve(struct rte_eth_dev *dev, const char *ring_name, - uint16_t queue_id, uint32_t ring_size, int socket_id) -{ - char z_name[RTE_MEMZONE_NAMESIZE]; - const struct rte_memzone *mz; - - snprintf(z_name, sizeof(z_name), "%s_%s_%d_%d", - dev->driver->pci_drv.name, ring_name, - dev->data->port_id, queue_id); - - mz = rte_memzone_lookup(z_name); - if (mz) - return mz; - -#ifdef RTE_LIBRTE_XEN_DOM0 - return rte_memzone_reserve_bounded(z_name, ring_size, - socket_id, 0, IXGBE_ALIGN, RTE_PGSIZE_2M); -#else - return rte_memzone_reserve_aligned(z_name, ring_size, - socket_id, 0, IXGBE_ALIGN); -#endif -} - static void ixgbe_tx_queue_release_mbufs(struct igb_tx_queue *txq) { @@ -1920,9 +1891,9 @@ ixgbe_dev_tx_queue_setup(struct rte_eth_dev *dev, * handle the maximum ring size is allocated in order to allow for * resizing in later calls to the queue setup function. */ - tz = ring_dma_zone_reserve(dev, "tx_ring", queue_idx, + tz = rte_eth_dma_zone_reserve(dev, "tx_ring", queue_idx, sizeof(union ixgbe_adv_tx_desc) * IXGBE_MAX_RING_DESC, - socket_id); + IXGBE_ALIGN, socket_id); if (tz == NULL) { ixgbe_tx_queue_release(txq); return (-ENOMEM); @@ -1950,11 +1921,14 @@ ixgbe_dev_tx_queue_setup(struct rte_eth_dev *dev, txq->tdt_reg_addr = IXGBE_PCI_REG_ADDR(hw, IXGBE_VFTDT(queue_idx)); else txq->tdt_reg_addr = IXGBE_PCI_REG_ADDR(hw, IXGBE_TDT(txq->reg_idx)); -#ifndef RTE_LIBRTE_XEN_DOM0 - txq->tx_ring_phys_addr = (uint64_t) tz->phys_addr; -#else - txq->tx_ring_phys_addr = rte_mem_phy2mch(tz->memseg_id, tz->phys_addr); + +#ifdef RTE_LIBRTE_XEN_DOM0 + if (is_xen_dom0_supported()) + txq->tx_ring_phys_addr = + rte_mem_phy2mch(tz->memseg_id, tz->phys_addr); + else #endif + txq->tx_ring_phys_addr = (uint64_t) tz->phys_addr; txq->tx_ring = (union ixgbe_adv_tx_desc *) tz->addr; /* Allocate software ring */ @@ -2195,8 +2169,8 @@ ixgbe_dev_rx_queue_setup(struct rte_eth_dev *dev, * handle the maximum ring size is allocated in order to allow for * resizing in later calls to the queue setup function. */ - rz = ring_dma_zone_reserve(dev, "rx_ring", queue_idx, - RX_RING_SZ, socket_id); + rz = rte_eth_dma_zone_reserve(dev, "rx_ring", queue_idx, + RX_RING_SZ, IXGBE_ALIGN, socket_id); if (rz == NULL) { ixgbe_rx_queue_release(rxq); return (-ENOMEM); @@ -2223,11 +2197,13 @@ ixgbe_dev_rx_queue_setup(struct rte_eth_dev *dev, rxq->rdh_reg_addr = IXGBE_PCI_REG_ADDR(hw, IXGBE_RDH(rxq->reg_idx)); } -#ifndef RTE_LIBRTE_XEN_DOM0 - rxq->rx_ring_phys_addr = (uint64_t) rz->phys_addr; -#else - rxq->rx_ring_phys_addr = rte_mem_phy2mch(rz->memseg_id, rz->phys_addr); +#ifdef RTE_LIBRTE_XEN_DOM0 + if (is_xen_dom0_supported()) + rxq->rx_ring_phys_addr = + rte_mem_phy2mch(rz->memseg_id, rz->phys_addr); + else #endif + rxq->rx_ring_phys_addr = (uint64_t) rz->phys_addr; rxq->rx_ring = (union ixgbe_adv_rx_desc *) rz->addr; /*