pc,vhost: fixes
Fixes all over the place. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> -----BEGIN PGP SIGNATURE----- iQFDBAABCAAtFiEEXQn9CHHI+FuUyooNKB8NuNKNVGkFAl+zlRgPHG1zdEByZWRo YXQuY29tAAoJECgfDbjSjVRpmf8H/0BEjxnINJCN12Te+Mot8K9fjwc0zE0SUuYY 25LogfJMCfVy0SZk0ZQV9z33GEL5XyMlXQjEpLmlX4d3mOBLcbutI6UVLhu8+Ixj 89+jFphxIQPDOpA7BnPOD4AJ6TlhbewZ41QBR/J/qv946HayFW9QCAUywuj6H80m T3lw0FmPkd6/YupUdUm0pPgJjowckGis+cAa9UkTlqp8jpzFur28N02fE0L6QO3Z lR6zsk4yEvsVoeXSkEkmSqZGNcwoQCf4BhmDuD7lBLZ0LBvmd37CCoakStpdnQPH Swunmf7Q1H6LRtF7s8ZKXBB/ecVnss3kFTFj5KWx3fJH2SJuHG8= =v205 -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into staging pc,vhost: fixes Fixes all over the place. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> # gpg: Signature made Tue 17 Nov 2020 09:17:12 GMT # gpg: using RSA key 5D09FD0871C8F85B94CA8A0D281F0DB8D28D5469 # gpg: issuer "mst@redhat.com" # gpg: Good signature from "Michael S. Tsirkin <mst@kernel.org>" [full] # gpg: aka "Michael S. Tsirkin <mst@redhat.com>" [full] # Primary key fingerprint: 0270 606B 6F3C DF3D 0B17 0970 C350 3912 AFBE 8E67 # Subkey fingerprint: 5D09 FD08 71C8 F85B 94CA 8A0D 281F 0DB8 D28D 5469 * remotes/mst/tags/for_upstream: vhost-user-blk/scsi: Fix broken error handling for socket call contrib/libvhost-user: Fix bad printf format specifiers hw/i386/acpi-build: Fix maybe-uninitialized error when ACPI hotplug off configure: mark vhost-user Linux-only vhost-user-blk-server: depend on CONFIG_VHOST_USER meson: move vhost_user_blk_server to meson.build vhost-user: fix VHOST_USER_ADD/REM_MEM_REG truncation Signed-off-by: Peter Maydell <peter.maydell@linaro.org> # Conflicts: # meson.build
This commit is contained in:
commit
1c7ab0930a
@ -1,2 +1,5 @@
|
||||
blockdev_ss.add(files('export.c'))
|
||||
blockdev_ss.add(when: 'CONFIG_VHOST_USER_BLK_SERVER', if_true: files('vhost-user-blk-server.c'))
|
||||
|
||||
if have_vhost_user_blk_server
|
||||
blockdev_ss.add(files('vhost-user-blk-server.c'))
|
||||
endif
|
||||
|
25
configure
vendored
25
configure
vendored
@ -328,8 +328,8 @@ vhost_net=""
|
||||
vhost_crypto=""
|
||||
vhost_scsi=""
|
||||
vhost_vsock=""
|
||||
vhost_user=""
|
||||
vhost_user_blk_server=""
|
||||
vhost_user="no"
|
||||
vhost_user_blk_server="auto"
|
||||
vhost_user_fs=""
|
||||
kvm="auto"
|
||||
hax="auto"
|
||||
@ -718,7 +718,6 @@ fi
|
||||
case $targetos in
|
||||
MINGW32*)
|
||||
mingw32="yes"
|
||||
vhost_user="no"
|
||||
audio_possible_drivers="dsound sdl"
|
||||
if check_include dsound.h; then
|
||||
audio_drv_list="dsound"
|
||||
@ -797,6 +796,7 @@ Linux)
|
||||
audio_possible_drivers="oss alsa sdl pa"
|
||||
linux="yes"
|
||||
linux_user="yes"
|
||||
vhost_user="yes"
|
||||
;;
|
||||
esac
|
||||
|
||||
@ -1247,9 +1247,9 @@ for opt do
|
||||
;;
|
||||
--enable-vhost-vsock) vhost_vsock="yes"
|
||||
;;
|
||||
--disable-vhost-user-blk-server) vhost_user_blk_server="no"
|
||||
--disable-vhost-user-blk-server) vhost_user_blk_server="disabled"
|
||||
;;
|
||||
--enable-vhost-user-blk-server) vhost_user_blk_server="yes"
|
||||
--enable-vhost-user-blk-server) vhost_user_blk_server="enabled"
|
||||
;;
|
||||
--disable-vhost-user-fs) vhost_user_fs="no"
|
||||
;;
|
||||
@ -2341,9 +2341,8 @@ fi
|
||||
# vhost interdependencies and host support
|
||||
|
||||
# vhost backends
|
||||
test "$vhost_user" = "" && vhost_user=yes
|
||||
if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
|
||||
error_exit "vhost-user isn't available on win32"
|
||||
if test "$vhost_user" = "yes" && test "$linux" != "yes"; then
|
||||
error_exit "vhost-user is only available on Linux"
|
||||
fi
|
||||
test "$vhost_vdpa" = "" && vhost_vdpa=$linux
|
||||
if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
|
||||
@ -2390,12 +2389,6 @@ if test "$vhost_net" = ""; then
|
||||
test "$vhost_kernel" = "yes" && vhost_net=yes
|
||||
fi
|
||||
|
||||
# libvhost-user is Linux-only
|
||||
test "$vhost_user_blk_server" = "" && vhost_user_blk_server=$linux
|
||||
if test "$vhost_user_blk_server" = "yes" && test "$linux" = "no"; then
|
||||
error_exit "--enable-vhost-user-blk-server is only available on Linux"
|
||||
fi
|
||||
|
||||
##########################################
|
||||
# pkg-config probe
|
||||
|
||||
@ -6289,9 +6282,6 @@ fi
|
||||
if test "$vhost_vdpa" = "yes" ; then
|
||||
echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
|
||||
fi
|
||||
if test "$vhost_user_blk_server" = "yes" ; then
|
||||
echo "CONFIG_VHOST_USER_BLK_SERVER=y" >> $config_host_mak
|
||||
fi
|
||||
if test "$vhost_user_fs" = "yes" ; then
|
||||
echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
|
||||
fi
|
||||
@ -7012,6 +7002,7 @@ NINJA=$ninja $meson setup \
|
||||
-Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt \
|
||||
-Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
|
||||
-Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
|
||||
-Dvhost_user_blk_server=$vhost_user_blk_server \
|
||||
$cross_arg \
|
||||
"$PWD" "$source_path"
|
||||
|
||||
|
@ -701,7 +701,7 @@ vu_add_mem_reg(VuDev *dev, VhostUserMsg *vmsg) {
|
||||
return false;
|
||||
}
|
||||
|
||||
DPRINT("Adding region: %d\n", dev->nregions);
|
||||
DPRINT("Adding region: %u\n", dev->nregions);
|
||||
DPRINT(" guest_phys_addr: 0x%016"PRIx64"\n",
|
||||
msg_region->guest_phys_addr);
|
||||
DPRINT(" memory_size: 0x%016"PRIx64"\n",
|
||||
@ -848,7 +848,7 @@ vu_set_mem_table_exec_postcopy(VuDev *dev, VhostUserMsg *vmsg)
|
||||
VhostUserMemory m = vmsg->payload.memory, *memory = &m;
|
||||
dev->nregions = memory->nregions;
|
||||
|
||||
DPRINT("Nregions: %d\n", memory->nregions);
|
||||
DPRINT("Nregions: %u\n", memory->nregions);
|
||||
for (i = 0; i < dev->nregions; i++) {
|
||||
void *mmap_addr;
|
||||
VhostUserMemoryRegion *msg_region = &memory->regions[i];
|
||||
@ -938,7 +938,7 @@ vu_set_mem_table_exec(VuDev *dev, VhostUserMsg *vmsg)
|
||||
return vu_set_mem_table_exec_postcopy(dev, vmsg);
|
||||
}
|
||||
|
||||
DPRINT("Nregions: %d\n", memory->nregions);
|
||||
DPRINT("Nregions: %u\n", memory->nregions);
|
||||
for (i = 0; i < dev->nregions; i++) {
|
||||
void *mmap_addr;
|
||||
VhostUserMemoryRegion *msg_region = &memory->regions[i];
|
||||
@ -1049,8 +1049,8 @@ vu_set_vring_num_exec(VuDev *dev, VhostUserMsg *vmsg)
|
||||
unsigned int index = vmsg->payload.state.index;
|
||||
unsigned int num = vmsg->payload.state.num;
|
||||
|
||||
DPRINT("State.index: %d\n", index);
|
||||
DPRINT("State.num: %d\n", num);
|
||||
DPRINT("State.index: %u\n", index);
|
||||
DPRINT("State.num: %u\n", num);
|
||||
dev->vq[index].vring.num = num;
|
||||
|
||||
return false;
|
||||
@ -1105,8 +1105,8 @@ vu_set_vring_base_exec(VuDev *dev, VhostUserMsg *vmsg)
|
||||
unsigned int index = vmsg->payload.state.index;
|
||||
unsigned int num = vmsg->payload.state.num;
|
||||
|
||||
DPRINT("State.index: %d\n", index);
|
||||
DPRINT("State.num: %d\n", num);
|
||||
DPRINT("State.index: %u\n", index);
|
||||
DPRINT("State.num: %u\n", num);
|
||||
dev->vq[index].shadow_avail_idx = dev->vq[index].last_avail_idx = num;
|
||||
|
||||
return false;
|
||||
@ -1117,7 +1117,7 @@ vu_get_vring_base_exec(VuDev *dev, VhostUserMsg *vmsg)
|
||||
{
|
||||
unsigned int index = vmsg->payload.state.index;
|
||||
|
||||
DPRINT("State.index: %d\n", index);
|
||||
DPRINT("State.index: %u\n", index);
|
||||
vmsg->payload.state.num = dev->vq[index].last_avail_idx;
|
||||
vmsg->size = sizeof(vmsg->payload.state);
|
||||
|
||||
@ -1478,8 +1478,8 @@ vu_set_vring_enable_exec(VuDev *dev, VhostUserMsg *vmsg)
|
||||
unsigned int index = vmsg->payload.state.index;
|
||||
unsigned int enable = vmsg->payload.state.num;
|
||||
|
||||
DPRINT("State.index: %d\n", index);
|
||||
DPRINT("State.enable: %d\n", enable);
|
||||
DPRINT("State.index: %u\n", index);
|
||||
DPRINT("State.enable: %u\n", enable);
|
||||
|
||||
if (index >= dev->max_queues) {
|
||||
vu_panic(dev, "Invalid vring_enable index: %u", index);
|
||||
@ -1728,7 +1728,7 @@ vu_handle_vring_kick(VuDev *dev, VhostUserMsg *vmsg)
|
||||
return false;
|
||||
}
|
||||
|
||||
DPRINT("Got kick message: handler:%p idx:%d\n",
|
||||
DPRINT("Got kick message: handler:%p idx:%u\n",
|
||||
dev->vq[index].handler, index);
|
||||
|
||||
if (!dev->vq[index].started) {
|
||||
@ -1772,7 +1772,7 @@ vu_process_message(VuDev *dev, VhostUserMsg *vmsg)
|
||||
DPRINT("Request: %s (%d)\n", vu_request_to_string(vmsg->request),
|
||||
vmsg->request);
|
||||
DPRINT("Flags: 0x%x\n", vmsg->flags);
|
||||
DPRINT("Size: %d\n", vmsg->size);
|
||||
DPRINT("Size: %u\n", vmsg->size);
|
||||
|
||||
if (vmsg->fd_num) {
|
||||
int i;
|
||||
|
@ -136,7 +136,7 @@ typedef struct VhostUserMemory {
|
||||
} VhostUserMemory;
|
||||
|
||||
typedef struct VhostUserMemRegMsg {
|
||||
uint32_t padding;
|
||||
uint64_t padding;
|
||||
VhostUserMemoryRegion region;
|
||||
} VhostUserMemRegMsg;
|
||||
|
||||
|
@ -476,7 +476,7 @@ static int unix_sock_new(char *unix_fn)
|
||||
assert(unix_fn);
|
||||
|
||||
sock = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||
if (sock <= 0) {
|
||||
if (sock < 0) {
|
||||
perror("socket");
|
||||
return -1;
|
||||
}
|
||||
|
@ -320,7 +320,7 @@ static int unix_sock_new(char *unix_fn)
|
||||
assert(unix_fn);
|
||||
|
||||
sock = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||
if (sock <= 0) {
|
||||
if (sock < 0) {
|
||||
perror("socket");
|
||||
return -1;
|
||||
}
|
||||
|
@ -131,6 +131,23 @@ A region is:
|
||||
|
||||
:mmap offset: 64-bit offset where region starts in the mapped memory
|
||||
|
||||
Single memory region description
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
+---------+---------------+------+--------------+-------------+
|
||||
| padding | guest address | size | user address | mmap offset |
|
||||
+---------+---------------+------+--------------+-------------+
|
||||
|
||||
:padding: 64-bit
|
||||
|
||||
:guest address: a 64-bit guest address of the region
|
||||
|
||||
:size: a 64-bit size
|
||||
|
||||
:user address: a 64-bit user address
|
||||
|
||||
:mmap offset: 64-bit offset where region starts in the mapped memory
|
||||
|
||||
Log description
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
@ -1281,7 +1298,7 @@ Master message types
|
||||
``VHOST_USER_ADD_MEM_REG``
|
||||
:id: 37
|
||||
:equivalent ioctl: N/A
|
||||
:slave payload: memory region
|
||||
:slave payload: single memory region description
|
||||
|
||||
When the ``VHOST_USER_PROTOCOL_F_CONFIGURE_MEM_SLOTS`` protocol
|
||||
feature has been successfully negotiated, this message is submitted
|
||||
@ -1296,7 +1313,7 @@ Master message types
|
||||
``VHOST_USER_REM_MEM_REG``
|
||||
:id: 38
|
||||
:equivalent ioctl: N/A
|
||||
:slave payload: memory region
|
||||
:slave payload: single memory region description
|
||||
|
||||
When the ``VHOST_USER_PROTOCOL_F_CONFIGURE_MEM_SLOTS`` protocol
|
||||
feature has been successfully negotiated, this message is submitted
|
||||
|
@ -149,7 +149,7 @@ typedef struct VhostUserMemory {
|
||||
} VhostUserMemory;
|
||||
|
||||
typedef struct VhostUserMemRegMsg {
|
||||
uint32_t padding;
|
||||
uint64_t padding;
|
||||
VhostUserMemoryRegion region;
|
||||
} VhostUserMemRegMsg;
|
||||
|
||||
@ -800,8 +800,7 @@ static int vhost_user_add_remove_regions(struct vhost_dev *dev,
|
||||
uint64_t shadow_pcb[VHOST_USER_MAX_RAM_SLOTS] = {};
|
||||
int nr_add_reg, nr_rem_reg;
|
||||
|
||||
msg->hdr.size = sizeof(msg->payload.mem_reg.padding) +
|
||||
sizeof(VhostUserMemoryRegion);
|
||||
msg->hdr.size = sizeof(msg->payload.mem_reg);
|
||||
|
||||
/* Find the regions which need to be removed or added. */
|
||||
scrub_shadow_regions(dev, add_reg, &nr_add_reg, rem_reg, &nr_rem_reg,
|
||||
|
15
meson.build
15
meson.build
@ -756,6 +756,19 @@ statx_test = '''
|
||||
|
||||
has_statx = cc.links(statx_test)
|
||||
|
||||
have_vhost_user_blk_server = (targetos == 'linux' and
|
||||
'CONFIG_VHOST_USER' in config_host)
|
||||
|
||||
if get_option('vhost_user_blk_server').enabled()
|
||||
if targetos != 'linux'
|
||||
error('vhost_user_blk_server requires linux')
|
||||
elif 'CONFIG_VHOST_USER' not in config_host
|
||||
error('vhost_user_blk_server requires vhost-user support')
|
||||
endif
|
||||
elif get_option('vhost_user_blk_server').disabled() or not have_system
|
||||
have_vhost_user_blk_server = false
|
||||
endif
|
||||
|
||||
#################
|
||||
# config-host.h #
|
||||
#################
|
||||
@ -780,6 +793,7 @@ config_host_data.set('CONFIG_MPATH_NEW_API', mpathpersist_new_api)
|
||||
config_host_data.set('CONFIG_CURSES', curses.found())
|
||||
config_host_data.set('CONFIG_SDL', sdl.found())
|
||||
config_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found())
|
||||
config_host_data.set('CONFIG_VHOST_USER_BLK_SERVER', have_vhost_user_blk_server)
|
||||
config_host_data.set('CONFIG_VNC', vnc.found())
|
||||
config_host_data.set('CONFIG_VNC_JPEG', jpeg.found())
|
||||
config_host_data.set('CONFIG_VNC_PNG', png.found())
|
||||
@ -2109,6 +2123,7 @@ summary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPT
|
||||
summary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')}
|
||||
summary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')}
|
||||
summary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_USER')}
|
||||
summary_info += {'vhost-user-blk server support': have_vhost_user_blk_server}
|
||||
summary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')}
|
||||
summary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')}
|
||||
summary_info += {'Trace backends': config_host['TRACE_BACKENDS']}
|
||||
|
@ -64,6 +64,8 @@ option('xkbcommon', type : 'feature', value : 'auto',
|
||||
description: 'xkbcommon support')
|
||||
option('virtiofsd', type: 'feature', value: 'auto',
|
||||
description: 'build virtiofs daemon (virtiofsd)')
|
||||
option('vhost_user_blk_server', type: 'feature', value: 'auto',
|
||||
description: 'build vhost-user-blk server')
|
||||
|
||||
option('capstone', type: 'combo', value: 'auto',
|
||||
choices: ['disabled', 'enabled', 'auto', 'system', 'internal'],
|
||||
|
Loading…
Reference in New Issue
Block a user