[v1,3/5] vhost: prepare memory regions addresses
Checks
Commit Message
Prepare memory regions guest physical addresses for vectorized data
path. These information will be utilized by SIMD instructions to find
matched region index.
Signed-off-by: Marvin Liu <yong.liu@intel.com>
@@ -52,6 +52,8 @@
#define ASYNC_MAX_POLL_SEG 255
+#define MAX_NREGIONS 8
+
#define VHOST_MAX_ASYNC_IT (MAX_PKT_BURST * 2)
#define VHOST_MAX_ASYNC_VEC (BUF_VECTOR_MAX * 2)
@@ -375,6 +377,8 @@ struct inflight_mem_info {
struct virtio_net {
/* Frontend (QEMU) memory and memory region information */
struct rte_vhost_memory *mem;
+ uint64_t regions_low_addrs[MAX_NREGIONS];
+ uint64_t regions_high_addrs[MAX_NREGIONS];
uint64_t features;
uint64_t protocol_features;
int vid;
@@ -1291,6 +1291,17 @@ vhost_user_set_mem_table(struct virtio_net **pdev, struct VhostUserMsg *msg,
}
}
+ RTE_BUILD_BUG_ON(VHOST_MEMORY_MAX_NREGIONS != 8);
+ if (dev->vectorized) {
+ for (i = 0; i < memory->nregions; i++) {
+ dev->regions_low_addrs[i] =
+ memory->regions[i].guest_phys_addr;
+ dev->regions_high_addrs[i] =
+ memory->regions[i].guest_phys_addr +
+ memory->regions[i].memory_size;
+ }
+ }
+
for (i = 0; i < dev->nr_vring; i++) {
struct vhost_virtqueue *vq = dev->virtqueue[i];