Converts QEMU virtual address to Vhost virtual address. */
| 679 | |
| 680 | /* Converts QEMU virtual address to Vhost virtual address. */ |
| 681 | static uint64_t |
| 682 | qva_to_vva(struct virtio_net *dev, uint64_t qva, uint64_t *len) |
| 683 | { |
| 684 | struct rte_vhost_mem_region *r; |
| 685 | uint32_t i; |
| 686 | |
| 687 | if (unlikely(!dev || !dev->mem)) |
| 688 | goto out_error; |
| 689 | |
| 690 | /* Find the region where the address lives. */ |
| 691 | for (i = 0; i < dev->mem->nregions; i++) { |
| 692 | r = &dev->mem->regions[i]; |
| 693 | |
| 694 | if (qva >= r->guest_user_addr && |
| 695 | qva < r->guest_user_addr + r->size) { |
| 696 | |
| 697 | if (unlikely(*len > r->guest_user_addr + r->size - qva)) |
| 698 | *len = r->guest_user_addr + r->size - qva; |
| 699 | |
| 700 | return qva - r->guest_user_addr + |
| 701 | r->host_user_addr; |
| 702 | } |
| 703 | } |
| 704 | out_error: |
| 705 | *len = 0; |
| 706 | |
| 707 | return 0; |
| 708 | } |
| 709 | |
| 710 | |
| 711 | /* |
no outgoing calls
no test coverage detected