Merge tag 'pull-target-arm-20240325-1' of https://git.linaro.org/people/pmaydell/qemu-arm into staging
target-arm queue:
* Fixes for seven minor coverity issues
# -----BEGIN PGP SIGNATURE-----
#
# iQJNBAABCAA3FiEE4aXFk81BneKOgxXPPCUl7RQ2DN4FAmYBh5wZHHBldGVyLm1h
# eWRlbGxAbGluYXJvLm9yZwAKCRA8JSXtFDYM3lb8D/9XDbRFB3kIHVBaDxZyE4bs
# QH8u80C08f/PzJ5SQos5D+R07xtPid1dyeiLND/RvwZUN3WAGKf9pmPUQL4aluz5
# gHMalq/+nGNam2qz+tKTI0q0otndiJrGNlOYhw2QqFJ9GUp2T9e61izgw0XeQtzF
# GKm6aE8LytH7h2H9ndIpJFQDggqkQev/uZ625hwhYxo0ND5uRqBNE7Wjy104DULo
# oEGZBhIB2CtyDiQdxgCfC8TOXVT3NAEbk6carbYdGshrMTpWNsjOHbLVcsuqUaZC
# eeRnOprsQq+YE5aAByfipGgCuoGNE5rn6ZTrDpSdfLe8LFfU/hEASnOmIjMtMbSM
# HKhKcKKzvLk/KQZZNJCbh+MKl1GsTvXMrB/DjLaVu2643MyQY7XZu3/XX3PE6Zee
# WqJC+NazfXCdHDyYqfPELkmnpeS5Tka/PCoku1VNWmnr7Qr6SYIqzbxI+zCsbDCs
# uqDfxzwN1lTKCkgUD3SVQrmrQ3u9nTLCpTqmaEd6H3+0UgpEUBpW51bMPUxO3KIk
# ouvjVJ3oDSdNMyVrEl3zDoxykU99trRYbIRALrW+rd1ghn4SE0WorAGJ96GLGYP0
# QfFtveTmDqsfKOvxHfBx6gng0aQw0GK145uXLciRaPuX51wZGbAjp/Muhs6oswtR
# j7GgfYAbVdc1QwKTqBK0tw==
# =0H37
# -----END PGP SIGNATURE-----
# gpg: Signature made Mon 25 Mar 2024 14:18:04 GMT
# gpg: using RSA key E1A5C593CD419DE28E8315CF3C2525ED14360CDE
# gpg: issuer "peter.maydell@linaro.org"
# gpg: Good signature from "Peter Maydell <peter.maydell@linaro.org>" [ultimate]
# gpg: aka "Peter Maydell <pmaydell@gmail.com>" [ultimate]
# gpg: aka "Peter Maydell <pmaydell@chiark.greenend.org.uk>" [ultimate]
# gpg: aka "Peter Maydell <peter@archaic.org.uk>" [ultimate]
# Primary key fingerprint: E1A5 C593 CD41 9DE2 8E83 15CF 3C25 25ED 1436 0CDE
* tag 'pull-target-arm-20240325-1' of https://git.linaro.org/people/pmaydell/qemu-arm:
tests/qtest/libqtest.c: Check for g_setenv() failure
tests/unit/test-throttle: Avoid unintended integer division
hw/nvram/mac_nvram: Report failure to write data
hw/misc/pca9554: Correct error check bounds in get/set pin functions
net/af-xdp.c: Don't leak sock_fds array in net_init_af_xdp()
tests/unit/socket-helpers: Don't close(-1)
tests/qtest/npcm7xx_emc_test: Don't leak cmd_line
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
diff --git a/migration/fd.c b/migration/fd.c
index fe0d096..449adaa 100644
--- a/migration/fd.c
+++ b/migration/fd.c
@@ -15,42 +15,19 @@
*/
#include "qemu/osdep.h"
-#include "qapi/error.h"
#include "channel.h"
#include "fd.h"
#include "file.h"
#include "migration.h"
#include "monitor/monitor.h"
-#include "io/channel-file.h"
-#include "io/channel-socket.h"
#include "io/channel-util.h"
-#include "options.h"
#include "trace.h"
-static struct FdOutgoingArgs {
- int fd;
-} outgoing_args;
-
-int fd_args_get_fd(void)
-{
- return outgoing_args.fd;
-}
-
-void fd_cleanup_outgoing_migration(void)
-{
- if (outgoing_args.fd > 0) {
- close(outgoing_args.fd);
- outgoing_args.fd = -1;
- }
-}
-
void fd_start_outgoing_migration(MigrationState *s, const char *fdname, Error **errp)
{
QIOChannel *ioc;
int fd = monitor_get_fd(monitor_cur(), fdname, errp);
- int newfd;
-
if (fd == -1) {
return;
}
@@ -62,18 +39,6 @@
return;
}
- /*
- * This is dup()ed just to avoid referencing an fd that might
- * be already closed by the iochannel.
- */
- newfd = dup(fd);
- if (newfd == -1) {
- error_setg_errno(errp, errno, "Could not dup FD %d", fd);
- object_unref(ioc);
- return;
- }
- outgoing_args.fd = newfd;
-
qio_channel_set_name(ioc, "migration-fd-outgoing");
migration_channel_connect(s, ioc, NULL, NULL);
object_unref(OBJECT(ioc));
@@ -104,20 +69,9 @@
return;
}
- if (migrate_multifd()) {
- if (fd_is_socket(fd)) {
- error_setg(errp,
- "Multifd migration to a socket FD is not supported");
- object_unref(ioc);
- return;
- }
-
- file_create_incoming_channels(ioc, errp);
- } else {
- qio_channel_set_name(ioc, "migration-fd-incoming");
- qio_channel_add_watch_full(ioc, G_IO_IN,
- fd_accept_incoming_migration,
- NULL, NULL,
- g_main_context_get_thread_default());
- }
+ qio_channel_set_name(ioc, "migration-fd-incoming");
+ qio_channel_add_watch_full(ioc, G_IO_IN,
+ fd_accept_incoming_migration,
+ NULL, NULL,
+ g_main_context_get_thread_default());
}
diff --git a/migration/fd.h b/migration/fd.h
index 0c0a18d..b901bc0 100644
--- a/migration/fd.h
+++ b/migration/fd.h
@@ -20,6 +20,4 @@
void fd_start_outgoing_migration(MigrationState *s, const char *fdname,
Error **errp);
-void fd_cleanup_outgoing_migration(void);
-int fd_args_get_fd(void);
#endif
diff --git a/migration/file.c b/migration/file.c
index b6e8ba1..ab18ba5 100644
--- a/migration/file.c
+++ b/migration/file.c
@@ -11,7 +11,6 @@
#include "qemu/error-report.h"
#include "qapi/error.h"
#include "channel.h"
-#include "fd.h"
#include "file.h"
#include "migration.h"
#include "io/channel-file.h"
@@ -55,27 +54,15 @@
{
QIOChannelFile *ioc;
int flags = O_WRONLY;
- bool ret = false;
- int fd = fd_args_get_fd();
+ bool ret = true;
- if (fd && fd != -1) {
- if (fd_is_socket(fd)) {
- error_setg(errp,
- "Multifd migration to a socket FD is not supported");
- goto out;
- }
-
- ioc = qio_channel_file_new_dupfd(fd, errp);
- } else {
- ioc = qio_channel_file_new_path(outgoing_args.fname, flags, 0, errp);
- }
-
+ ioc = qio_channel_file_new_path(outgoing_args.fname, flags, 0, errp);
if (!ioc) {
+ ret = false;
goto out;
}
multifd_channel_connect(opaque, QIO_CHANNEL(ioc));
- ret = true;
out:
/*
diff --git a/migration/migration.c b/migration/migration.c
index f60bd37..9fe8fd2 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -140,10 +140,6 @@
if (addr->transport == MIGRATION_ADDRESS_TYPE_SOCKET) {
SocketAddress *saddr = &addr->u.socket;
- if (saddr->type == SOCKET_ADDRESS_TYPE_FD) {
- return migrate_mapped_ram();
- }
-
return (saddr->type == SOCKET_ADDRESS_TYPE_INET ||
saddr->type == SOCKET_ADDRESS_TYPE_UNIX ||
saddr->type == SOCKET_ADDRESS_TYPE_VSOCK);
@@ -165,15 +161,6 @@
return true;
}
- /*
- * At this point QEMU has not yet fetched the fd passed in by the
- * user, so we cannot know for sure whether it refers to a plain
- * file or a socket. Let it through anyway and check at fd.c.
- */
- if (addr->transport == MIGRATION_ADDRESS_TYPE_SOCKET) {
- return addr->u.socket.type == SOCKET_ADDRESS_TYPE_FD;
- }
-
return false;
}
@@ -3212,17 +3199,16 @@
*/
static MigIterateState migration_iteration_run(MigrationState *s)
{
- uint64_t must_precopy, can_postcopy;
+ uint64_t must_precopy, can_postcopy, pending_size;
Error *local_err = NULL;
bool in_postcopy = s->state == MIGRATION_STATUS_POSTCOPY_ACTIVE;
bool can_switchover = migration_can_switchover(s);
qemu_savevm_state_pending_estimate(&must_precopy, &can_postcopy);
- uint64_t pending_size = must_precopy + can_postcopy;
-
+ pending_size = must_precopy + can_postcopy;
trace_migrate_pending_estimate(pending_size, must_precopy, can_postcopy);
- if (must_precopy <= s->threshold_size) {
+ if (pending_size < s->threshold_size) {
qemu_savevm_state_pending_exact(&must_precopy, &can_postcopy);
pending_size = must_precopy + can_postcopy;
trace_migrate_pending_exact(pending_size, must_precopy, can_postcopy);
diff --git a/migration/multifd.c b/migration/multifd.c
index 0179422..2802afe 100644
--- a/migration/multifd.c
+++ b/migration/multifd.c
@@ -18,7 +18,6 @@
#include "exec/ramblock.h"
#include "qemu/error-report.h"
#include "qapi/error.h"
-#include "fd.h"
#include "file.h"
#include "migration.h"
#include "migration-stats.h"
@@ -112,7 +111,6 @@
static void multifd_set_file_bitmap(MultiFDSendParams *p)
{
MultiFDPages_t *pages = p->pages;
- uint32_t zero_num = p->pages->num - p->pages->normal_num;
assert(pages->block);
@@ -120,7 +118,7 @@
ramblock_set_file_bmap_atomic(pages->block, pages->offset[i], true);
}
- for (int i = p->pages->num; i < zero_num; i++) {
+ for (int i = p->pages->normal_num; i < p->pages->num; i++) {
ramblock_set_file_bmap_atomic(pages->block, pages->offset[i], false);
}
}
@@ -794,7 +792,6 @@
static void multifd_send_cleanup_state(void)
{
file_cleanup_outgoing_migration();
- fd_cleanup_outgoing_migration();
socket_cleanup_outgoing_migration();
qemu_sem_destroy(&multifd_send_state->channels_created);
qemu_sem_destroy(&multifd_send_state->channels_ready);
diff --git a/tests/qtest/migration-test.c b/tests/qtest/migration-test.c
index 71895ab..1d2cee8 100644
--- a/tests/qtest/migration-test.c
+++ b/tests/qtest/migration-test.c
@@ -2536,13 +2536,6 @@
return NULL;
}
-static void *migrate_fd_file_mapped_ram_start(QTestState *from, QTestState *to)
-{
- migrate_mapped_ram_start(from, to);
-
- return migrate_precopy_fd_file_start(from, to);
-}
-
static void test_migrate_precopy_fd_file(void)
{
MigrateCommon args = {
@@ -2553,36 +2546,6 @@
};
test_file_common(&args, true);
}
-
-static void test_migrate_precopy_fd_file_mapped_ram(void)
-{
- MigrateCommon args = {
- .listen_uri = "defer",
- .connect_uri = "fd:fd-mig",
- .start_hook = migrate_fd_file_mapped_ram_start,
- .finish_hook = test_migrate_fd_finish_hook
- };
- test_file_common(&args, true);
-}
-
-static void *migrate_multifd_fd_mapped_ram_start(QTestState *from,
- QTestState *to)
-{
- migrate_multifd_mapped_ram_start(from, to);
- return migrate_precopy_fd_file_start(from, to);
-}
-
-static void test_multifd_fd_mapped_ram(void)
-{
- MigrateCommon args = {
- .connect_uri = "fd:fd-mig",
- .listen_uri = "defer",
- .start_hook = migrate_multifd_fd_mapped_ram_start,
- .finish_hook = test_migrate_fd_finish_hook
- };
-
- test_file_common(&args, true);
-}
#endif /* _WIN32 */
static void do_test_validate_uuid(MigrateStart *args, bool should_fail)
@@ -3687,10 +3650,6 @@
test_multifd_file_mapped_ram);
migration_test_add("/migration/multifd/file/mapped-ram/live",
test_multifd_file_mapped_ram_live);
-#ifndef _WIN32
- migration_test_add("/migration/multifd/fd/mapped-ram",
- test_multifd_fd_mapped_ram);
-#endif
#ifdef CONFIG_GNUTLS
migration_test_add("/migration/precopy/unix/tls/psk",
@@ -3753,8 +3712,6 @@
test_migrate_precopy_fd_socket);
migration_test_add("/migration/precopy/fd/file",
test_migrate_precopy_fd_file);
- migration_test_add("/migration/precopy/fd/file/mapped-ram",
- test_migrate_precopy_fd_file_mapped_ram);
#endif
migration_test_add("/migration/validate_uuid", test_validate_uuid);
migration_test_add("/migration/validate_uuid_error",