net/sfc/base: import event prefetch
[dpdk.git] / lib / librte_vhost / vhost_user.c
index 6b83c15..7343a00 100644 (file)
@@ -447,14 +447,14 @@ add_guest_pages(struct virtio_net *dev, struct virtio_memory_region *reg,
        reg_size -= size;
 
        while (reg_size > 0) {
+               size = RTE_MIN(reg_size, page_size);
                host_phys_addr = rte_mem_virt2phy((void *)(uintptr_t)
                                                  host_user_addr);
-               add_one_guest_page(dev, guest_phys_addr, host_phys_addr,
-                                  page_size);
+               add_one_guest_page(dev, guest_phys_addr, host_phys_addr, size);
 
-               host_user_addr  += page_size;
-               guest_phys_addr += page_size;
-               reg_size -= page_size;
+               host_user_addr  += size;
+               guest_phys_addr += size;
+               reg_size -= size;
        }
 }
 
@@ -903,6 +903,7 @@ send_vhost_message(int sockfd, struct VhostUserMsg *msg)
                return 0;
 
        msg->flags &= ~VHOST_USER_VERSION_MASK;
+       msg->flags &= ~VHOST_USER_NEED_REPLY;
        msg->flags |= VHOST_USER_VERSION;
        msg->flags |= VHOST_USER_REPLY_MASK;
 
@@ -938,6 +939,7 @@ vhost_user_msg_handler(int vid, int fd)
                return -1;
        }
 
+       ret = 0;
        RTE_LOG(INFO, VHOST_CONFIG, "read message %s\n",
                vhost_message_str[msg.request]);
        switch (msg.request) {
@@ -967,7 +969,7 @@ vhost_user_msg_handler(int vid, int fd)
                break;
 
        case VHOST_USER_SET_MEM_TABLE:
-               vhost_user_set_mem_table(dev, &msg);
+               ret = vhost_user_set_mem_table(dev, &msg);
                break;
 
        case VHOST_USER_SET_LOG_BASE:
@@ -1025,9 +1027,16 @@ vhost_user_msg_handler(int vid, int fd)
                break;
 
        default:
+               ret = -1;
                break;
 
        }
 
+       if (msg.flags & VHOST_USER_NEED_REPLY) {
+               msg.payload.u64 = !!ret;
+               msg.size = sizeof(msg.payload.u64);
+               send_vhost_message(fd, &msg);
+       }
+
        return 0;
 }