aboutsummaryrefslogtreecommitdiff
path: root/lib/migration.c
diff options
context:
space:
mode:
authorJohn Levon <john.levon@nutanix.com>2021-04-14 10:45:41 +0100
committerGitHub <noreply@github.com>2021-04-14 10:45:41 +0100
commitb91f52e49039d41007c530a5ba7554c1603060c9 (patch)
treea99159d9d2f8640c324500b0637049094f4c2320 /lib/migration.c
parent7c08067fa7376589ff8177c6cc9a36a12a12c407 (diff)
downloadlibvfio-user-b91f52e49039d41007c530a5ba7554c1603060c9.zip
libvfio-user-b91f52e49039d41007c530a5ba7554c1603060c9.tar.gz
libvfio-user-b91f52e49039d41007c530a5ba7554c1603060c9.tar.bz2
migration: use ERROR_INT() (#432)
Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
Diffstat (limited to 'lib/migration.c')
-rw-r--r--lib/migration.c55
1 files changed, 26 insertions, 29 deletions
diff --git a/lib/migration.c b/lib/migration.c
index ff6913b..899a8c4 100644
--- a/lib/migration.c
+++ b/lib/migration.c
@@ -122,7 +122,7 @@ handle_device_state(vfu_ctx_t *vfu_ctx, struct migration *migr,
if (*device_state & ~VFIO_DEVICE_STATE_MASK) {
vfu_log(vfu_ctx, LOG_ERR, "bad device state %#x", *device_state);
- return -EINVAL;
+ return ERROR_INT(EINVAL);
}
if (!vfio_migr_state_transition_is_valid(migr->info.device_state,
@@ -130,7 +130,7 @@ handle_device_state(vfu_ctx_t *vfu_ctx, struct migration *migr,
vfu_log(vfu_ctx, LOG_ERR, "bad transition from state %s to state %s",
migr_states[migr->info.device_state].name,
migr_states[*device_state].name);
- return -EINVAL;
+ return ERROR_INT(EINVAL);
}
switch (*device_state) {
@@ -164,8 +164,8 @@ handle_device_state(vfu_ctx_t *vfu_ctx, struct migration *migr,
migr->info.device_state = *device_state;
migr_state_transition(migr, VFIO_USER_MIGR_ITER_STATE_INITIAL);
} else if (ret < 0) {
- vfu_log(vfu_ctx, LOG_ERR, "failed to transition to state %d: %s",
- *device_state, strerror(-ret));
+ vfu_log(vfu_ctx, LOG_ERR, "failed to transition to state %d: %m",
+ *device_state);
}
return ret;
@@ -181,7 +181,7 @@ handle_pending_bytes(vfu_ctx_t *vfu_ctx, struct migration *migr,
assert(pending_bytes != NULL);
if (is_write) {
- return -EINVAL;
+ return ERROR_INT(EINVAL);
}
if (migr->iter.state == VFIO_USER_MIGR_ITER_STATE_FINISHED) {
@@ -213,7 +213,7 @@ handle_pending_bytes(vfu_ctx_t *vfu_ctx, struct migration *migr,
*pending_bytes = migr->iter.pending_bytes;
break;
default:
- return -EINVAL;
+ return ERROR_INT(EINVAL);
}
return 0;
}
@@ -235,7 +235,7 @@ handle_data_offset_when_saving(vfu_ctx_t *vfu_ctx, struct migration *migr,
if (is_write) {
vfu_log(vfu_ctx, LOG_ERR, "data_offset is RO when saving");
- return -EINVAL;
+ return ERROR_INT(EINVAL);
}
switch (migr->iter.state) {
@@ -262,7 +262,7 @@ handle_data_offset_when_saving(vfu_ctx_t *vfu_ctx, struct migration *migr,
default:
vfu_log(vfu_ctx, LOG_ERR,
"reading data_offset out of sequence is undefined");
- return -EINVAL;
+ return ERROR_INT(EINVAL);
}
return 0;
@@ -289,7 +289,7 @@ handle_data_offset(vfu_ctx_t *vfu_ctx, struct migration *migr,
if (is_write) {
/* TODO writing to read-only registers should be simply ignored */
vfu_log(vfu_ctx, LOG_ERR, "bad write to migration data_offset");
- return -EINVAL;
+ return ERROR_INT(EINVAL);
}
ret = migr->callbacks.prepare_data(vfu_ctx, offset, NULL);
if (ret < 0) {
@@ -302,7 +302,7 @@ handle_data_offset(vfu_ctx_t *vfu_ctx, struct migration *migr,
vfu_log(vfu_ctx, LOG_ERR,
"bad access to migration data_offset in state %s",
migr_states[migr->info.device_state].name);
- return -EINVAL;
+ return ERROR_INT(EINVAL);
}
static ssize_t
@@ -314,14 +314,14 @@ handle_data_size_when_saving(vfu_ctx_t *vfu_ctx, struct migration *migr,
if (is_write) {
/* TODO improve error message */
vfu_log(vfu_ctx, LOG_ERR, "data_size is RO when saving");
- return -EINVAL;
+ return ERROR_INT(EINVAL);
}
if (migr->iter.state != VFIO_USER_MIGR_ITER_STATE_STARTED &&
migr->iter.state != VFIO_USER_MIGR_ITER_STATE_DATA_PREPARED) {
vfu_log(vfu_ctx, LOG_ERR,
"reading data_size ouf of sequence is undefined");
- return -EINVAL;
+ return ERROR_INT(EINVAL);
}
return 0;
}
@@ -360,7 +360,7 @@ handle_data_size(vfu_ctx_t *vfu_ctx, struct migration *migr,
}
/* TODO improve error message */
vfu_log(vfu_ctx, LOG_ERR, "bad access to data_size");
- return -EINVAL;
+ return ERROR_INT(EINVAL);
}
static ssize_t
@@ -377,7 +377,7 @@ migration_region_access_registers(vfu_ctx_t *vfu_ctx, char *buf, size_t count,
if (count != sizeof(migr->info.device_state)) {
vfu_log(vfu_ctx, LOG_ERR,
"bad device_state access size %ld", count);
- return -EINVAL;
+ return ERROR_INT(EINVAL);
}
ret = handle_device_state(vfu_ctx, migr, (uint32_t *)buf, is_write);
break;
@@ -385,7 +385,7 @@ migration_region_access_registers(vfu_ctx_t *vfu_ctx, char *buf, size_t count,
if (count != sizeof(migr->info.pending_bytes)) {
vfu_log(vfu_ctx, LOG_ERR,
"bad pending_bytes access size %ld", count);
- return -EINVAL;
+ return ERROR_INT(EINVAL);
}
ret = handle_pending_bytes(vfu_ctx, migr, (uint64_t *)buf, is_write);
break;
@@ -393,7 +393,7 @@ migration_region_access_registers(vfu_ctx_t *vfu_ctx, char *buf, size_t count,
if (count != sizeof(migr->info.data_offset)) {
vfu_log(vfu_ctx, LOG_ERR,
"bad data_offset access size %ld", count);
- return -EINVAL;
+ return ERROR_INT(EINVAL);
}
ret = handle_data_offset(vfu_ctx, migr, (uint64_t *)buf, is_write);
break;
@@ -401,14 +401,14 @@ migration_region_access_registers(vfu_ctx_t *vfu_ctx, char *buf, size_t count,
if (count != sizeof(migr->info.data_size)) {
vfu_log(vfu_ctx, LOG_ERR,
"bad data_size access size %ld", count);
- return -EINVAL;
+ return ERROR_INT(EINVAL);
}
ret = handle_data_size(vfu_ctx, migr, (uint64_t *)buf, is_write);
break;
default:
vfu_log(vfu_ctx, LOG_ERR, "bad migration region register offset %#lx",
pos);
- return -EINVAL;
+ return ERROR_INT(EINVAL);
}
return ret;
}
@@ -418,7 +418,7 @@ migration_region_access(vfu_ctx_t *vfu_ctx, char *buf, size_t count,
loff_t pos, bool is_write)
{
struct migration *migr = vfu_ctx->migration;
- ssize_t ret = -EINVAL;
+ ssize_t ret;
assert(migr != NULL);
assert(buf != NULL);
@@ -442,14 +442,14 @@ migration_region_access(vfu_ctx_t *vfu_ctx, char *buf, size_t count,
vfu_log(vfu_ctx, LOG_WARNING,
"bad access to dead space %#lx-%#lx in migration region",
pos, pos + count - 1);
- return -EINVAL;
+ return ERROR_INT(EINVAL);
}
pos -= migr->data_offset;
if (is_write) {
ret = migr->callbacks.write_data(vfu_ctx, buf, count, pos);
- if (ret == -1) {
- ret = -errno;
+ if (ret < 0) {
+ return -1;
}
} else {
/*
@@ -461,16 +461,13 @@ migration_region_access(vfu_ctx_t *vfu_ctx, char *buf, size_t count,
* Does this mean that partial reads are not allowed?
*/
ret = migr->callbacks.read_data(vfu_ctx, buf, count, pos);
- if (ret == -1) {
- ret = -errno;
+ if (ret < 0) {
+ return -1;
}
}
}
- if (ret == 0) {
- ret = count;
- }
- return ret;
+ return count;
}
bool
@@ -500,7 +497,7 @@ migration_set_pgsize(struct migration *migr, size_t pgsize)
// FIXME?
if (pgsize != PAGE_SIZE) {
- return -EINVAL;
+ return ERROR_INT(EINVAL);
}
migr->pgsize = pgsize;