aboutsummaryrefslogtreecommitdiff
path: root/subprojects/libvhost-user/libvhost-user.c
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/libvhost-user/libvhost-user.c')
-rw-r--r--subprojects/libvhost-user/libvhost-user.c36
1 files changed, 21 insertions, 15 deletions
diff --git a/subprojects/libvhost-user/libvhost-user.c b/subprojects/libvhost-user/libvhost-user.c
index d6ee6e7..fc69783 100644
--- a/subprojects/libvhost-user/libvhost-user.c
+++ b/subprojects/libvhost-user/libvhost-user.c
@@ -13,6 +13,10 @@
* later. See the COPYING file in the top-level directory.
*/
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
/* this code avoids GLib dependency */
#include <stdlib.h>
#include <stdio.h>
@@ -58,8 +62,8 @@
#endif /* !__GNUC__ */
#ifndef MIN
#define MIN(x, y) ({ \
- typeof(x) _min1 = (x); \
- typeof(y) _min2 = (y); \
+ __typeof__(x) _min1 = (x); \
+ __typeof__(y) _min2 = (y); \
(void) (&_min1 == &_min2); \
_min1 < _min2 ? _min1 : _min2; })
#endif
@@ -188,7 +192,7 @@ vu_panic(VuDev *dev, const char *msg, ...)
void *
vu_gpa_to_va(VuDev *dev, uint64_t *plen, uint64_t guest_addr)
{
- int i;
+ unsigned int i;
if (*plen == 0) {
return NULL;
@@ -214,7 +218,7 @@ vu_gpa_to_va(VuDev *dev, uint64_t *plen, uint64_t guest_addr)
static void *
qva_to_va(VuDev *dev, uint64_t qemu_addr)
{
- int i;
+ unsigned int i;
/* Find matching memory region. */
for (i = 0; i < dev->nregions; i++) {
@@ -335,7 +339,7 @@ vu_message_read_default(VuDev *dev, int conn_fd, VhostUserMsg *vmsg)
goto fail;
}
- assert(rc == vmsg->size);
+ assert((uint32_t)rc == vmsg->size);
}
return true;
@@ -617,11 +621,13 @@ map_ring(VuDev *dev, VuVirtq *vq)
static bool
generate_faults(VuDev *dev) {
- int i;
+ unsigned int i;
for (i = 0; i < dev->nregions; i++) {
VuDevRegion *dev_region = &dev->regions[i];
int ret;
#ifdef UFFDIO_REGISTER
+ struct uffdio_register reg_struct;
+
/*
* We should already have an open ufd. Mark each memory
* range as ufd.
@@ -655,7 +661,7 @@ generate_faults(VuDev *dev) {
"%s: Failed to madvise(NOHUGEPAGE) region %d: %s\n",
__func__, i, strerror(errno));
}
- struct uffdio_register reg_struct;
+
reg_struct.range.start = (uintptr_t)dev_region->mmap_addr;
reg_struct.range.len = dev_region->size + dev_region->mmap_offset;
reg_struct.mode = UFFDIO_REGISTER_MODE_MISSING;
@@ -825,7 +831,7 @@ static inline bool reg_equal(VuDevRegion *vudev_reg,
static bool
vu_rem_mem_reg(VuDev *dev, VhostUserMsg *vmsg) {
VhostUserMemoryRegion m = vmsg->payload.memreg.region, *msg_region = &m;
- int i;
+ unsigned int i;
bool found = false;
if (vmsg->fd_num > 1) {
@@ -891,7 +897,7 @@ vu_rem_mem_reg(VuDev *dev, VhostUserMsg *vmsg) {
static bool
vu_set_mem_table_exec_postcopy(VuDev *dev, VhostUserMsg *vmsg)
{
- int i;
+ unsigned int i;
VhostUserMemory m = vmsg->payload.memory, *memory = &m;
dev->nregions = memory->nregions;
@@ -968,7 +974,7 @@ vu_set_mem_table_exec_postcopy(VuDev *dev, VhostUserMsg *vmsg)
static bool
vu_set_mem_table_exec(VuDev *dev, VhostUserMsg *vmsg)
{
- int i;
+ unsigned int i;
VhostUserMemory m = vmsg->payload.memory, *memory = &m;
for (i = 0; i < dev->nregions; i++) {
@@ -1593,12 +1599,13 @@ vu_set_config(VuDev *dev, VhostUserMsg *vmsg)
static bool
vu_set_postcopy_advise(VuDev *dev, VhostUserMsg *vmsg)
{
- dev->postcopy_ufd = -1;
#ifdef UFFDIO_API
struct uffdio_api api_struct;
dev->postcopy_ufd = syscall(__NR_userfaultfd, O_CLOEXEC | O_NONBLOCK);
vmsg->size = 0;
+#else
+ dev->postcopy_ufd = -1;
#endif
if (dev->postcopy_ufd == -1) {
@@ -1976,7 +1983,7 @@ end:
void
vu_deinit(VuDev *dev)
{
- int i;
+ unsigned int i;
for (i = 0; i < dev->nregions; i++) {
VuDevRegion *r = &dev->regions[i];
@@ -2471,14 +2478,13 @@ vring_used_flags_unset_bit(VuVirtq *vq, int mask)
static inline void
vring_set_avail_event(VuVirtq *vq, uint16_t val)
{
- uint16_t *avail;
+ uint16_t val_le = htole16(val);
if (!vq->notification) {
return;
}
- avail = (uint16_t *)&vq->vring.used->ring[vq->vring.num];
- *avail = htole16(val);
+ memcpy(&vq->vring.used->ring[vq->vring.num], &val_le, sizeof(uint16_t));
}
void