bus/fslmc: move VFIO DMA map into bus probe

fslmc bus needs to map all allocated memory for VFIO before
device probe. This bus doesn't support hotplug, so at the time
of this call, all possible device that could be present, are
present. This will also be the place where we install VFIO
callback, although this change will come in the next patch.

Since rte_fslmc_vfio_dmamap() is now only called at bus probe,
there is no longer any need to check if DMA mappings have been
already done.

Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Tested-by: Santosh Shukla <santosh.shukla@caviumnetworks.com>
Tested-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Tested-by: Gowrishankar Muthukrishnan <gowrishankar.m@linux.vnet.ibm.com>
This commit is contained in:
Anatoly Burakov 2018-04-11 13:30:40 +01:00 committed by Thomas Monjalon
parent 43e4631371
commit a6cdf375bc
3 changed files with 11 additions and 7 deletions

View File

@ -286,6 +286,17 @@ rte_fslmc_probe(void)
return 0;
}
/* Map existing segments as well as, in case of hotpluggable memory,
* install callback handler.
*/
ret = rte_fslmc_vfio_dmamap();
if (ret) {
DPAA2_BUS_ERR("Unable to DMA map existing VAs: (%d)", ret);
/* Not continuing ahead */
DPAA2_BUS_ERR("FSLMC VFIO Mapping failed");
return 0;
}
ret = fslmc_vfio_process_group();
if (ret) {
DPAA2_BUS_ERR("Unable to setup devices %d", ret);

View File

@ -51,7 +51,6 @@ static int container_device_fd;
static char *g_container;
static uint32_t *msi_intr_vaddr;
void *(*rte_mcp_ptr_list);
static int is_dma_done;
static struct rte_dpaa2_object_list dpaa2_obj_list =
TAILQ_HEAD_INITIALIZER(dpaa2_obj_list);
@ -235,9 +234,6 @@ int rte_fslmc_vfio_dmamap(void)
{
int i = 0;
if (is_dma_done)
return 0;
if (rte_memseg_walk(fslmc_vfio_map, &i) < 0)
return -1;
@ -254,8 +250,6 @@ int rte_fslmc_vfio_dmamap(void)
*/
vfio_map_irq_region(&vfio_group);
is_dma_done = 1;
return 0;
}

View File

@ -1845,7 +1845,6 @@ dpaa2_dev_init(struct rte_eth_dev *eth_dev)
eth_dev->rx_pkt_burst = dpaa2_dev_prefetch_rx;
eth_dev->tx_pkt_burst = dpaa2_dev_tx;
rte_fslmc_vfio_dmamap();
DPAA2_PMD_INFO("%s: netdev created", eth_dev->data->name);
return 0;