* Return the IO address of a virtual address obtained through rte_malloc */
| 356 | * Return the IO address of a virtual address obtained through rte_malloc |
| 357 | */ |
| 358 | rte_iova_t |
| 359 | rte_malloc_virt2iova(const void *addr) |
| 360 | { |
| 361 | const struct rte_memseg *ms; |
| 362 | struct malloc_elem *elem = malloc_elem_from_data(addr); |
| 363 | |
| 364 | if (elem == NULL) |
| 365 | return RTE_BAD_IOVA; |
| 366 | |
| 367 | if (!elem->msl->external && rte_eal_iova_mode() == RTE_IOVA_VA) |
| 368 | return (uintptr_t) addr; |
| 369 | |
| 370 | ms = rte_mem_virt2memseg(addr, elem->msl); |
| 371 | if (ms == NULL) |
| 372 | return RTE_BAD_IOVA; |
| 373 | |
| 374 | if (ms->iova == RTE_BAD_IOVA) |
| 375 | return RTE_BAD_IOVA; |
| 376 | |
| 377 | return ms->iova + RTE_PTR_DIFF(addr, ms->addr); |
| 378 | } |
| 379 | |
| 380 | static struct malloc_heap * |
| 381 | find_named_heap(const char *name) |