summaryrefslogtreecommitdiffstats
path: root/subprojects
diff options
context:
space:
mode:
authorKevin Wolf2022-04-07 15:36:56 +0200
committerKevin Wolf2022-05-04 15:55:23 +0200
commit5ebfdeb21223e0406a711decbb2baceb5ec8c416 (patch)
tree3aa3603a0e9fe710245aa8ba53be30c2f144be4d /subprojects
parentdocs/vhost-user: Clarifications for VHOST_USER_ADD/REM_MEM_REG (diff)
downloadqemu-5ebfdeb21223e0406a711decbb2baceb5ec8c416.tar.gz
qemu-5ebfdeb21223e0406a711decbb2baceb5ec8c416.tar.xz
qemu-5ebfdeb21223e0406a711decbb2baceb5ec8c416.zip
libvhost-user: Fix extra vu_add/rem_mem_reg reply
Outside of postcopy mode, neither VHOST_USER_ADD_MEM_REG nor VHOST_USER_REM_MEM_REG are supposed to send a reply unless explicitly requested with the need_reply flag. Their current implementation always sends a reply, even if it isn't requested. This confuses the master because it will interpret the reply as a reply for the next message for which it actually expects a reply. need_reply is already handled correctly by vu_dispatch(), so just don't send a reply in the non-postcopy part of the message handler for these two commands. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Message-Id: <20220407133657.155281-3-kwolf@redhat.com> Reviewed-by: Raphael Norwitz <raphael.norwitz@nutanix.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'subprojects')
-rw-r--r--subprojects/libvhost-user/libvhost-user.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/subprojects/libvhost-user/libvhost-user.c b/subprojects/libvhost-user/libvhost-user.c
index 47d2efc60f..eccaff5168 100644
--- a/subprojects/libvhost-user/libvhost-user.c
+++ b/subprojects/libvhost-user/libvhost-user.c
@@ -800,8 +800,7 @@ vu_add_mem_reg(VuDev *dev, VhostUserMsg *vmsg) {
DPRINT("Successfully added new region\n");
dev->nregions++;
- vmsg_set_reply_u64(vmsg, 0);
- return true;
+ return false;
}
}
@@ -874,15 +873,13 @@ vu_rem_mem_reg(VuDev *dev, VhostUserMsg *vmsg) {
}
}
- if (found) {
- vmsg_set_reply_u64(vmsg, 0);
- } else {
+ if (!found) {
vu_panic(dev, "Specified region not found\n");
}
close(vmsg->fds[0]);
- return true;
+ return false;
}
static bool