fm10k: support Xen domain0
authorShaopeng He <shaopeng.he@intel.com>
Fri, 15 May 2015 08:56:02 +0000 (16:56 +0800)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Wed, 1 Jul 2015 10:39:20 +0000 (12:39 +0200)
fm10k was failing to run in XEN domain0, as the physical
memory for DMA should be allocated and translated
in a different way for XEN domain0. So
rte_memzone_reserve_bounded() should be used for DMA
memory allocation, and rte_mem_phy2mch() should be used
for DMA memory address translation to support running
fm10k PMD in XEN domain0.

Signed-off-by: Shaopeng He <shaopeng.he@intel.com>
Acked-by: Jijiang Liu <jijiang.liu@intel.com>
drivers/net/fm10k/fm10k_ethdev.c

index 406c350..c1a2069 100644 (file)
@@ -1302,7 +1302,11 @@ fm10k_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_id,
                return (-ENOMEM);
        }
        q->hw_ring = mz->addr;
+#ifdef RTE_LIBRTE_XEN_DOM0
+       q->hw_ring_phys_addr = rte_mem_phy2mch(mz->memseg_id, mz->phys_addr);
+#else
        q->hw_ring_phys_addr = mz->phys_addr;
+#endif
 
        dev->data->rx_queues[queue_id] = q;
        return 0;
@@ -1448,7 +1452,11 @@ fm10k_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_id,
                return (-ENOMEM);
        }
        q->hw_ring = mz->addr;
+#ifdef RTE_LIBRTE_XEN_DOM0
+       q->hw_ring_phys_addr = rte_mem_phy2mch(mz->memseg_id, mz->phys_addr);
+#else
        q->hw_ring_phys_addr = mz->phys_addr;
+#endif
 
        /*
         * allocate memory for the RS bit tracker. Enough slots to hold the