From b19456dd0ea4eb418ad093f092adbb882be13054 Mon Sep 17 00:00:00 2001 From: zhanghailiang Date: Wed, 19 Apr 2017 09:15:32 +0800 Subject: char: Fix removing wrong GSource that be found by fd_in_tag MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We use fd_in_tag to find a GSource, fd_in_tag is return value of g_source_attach(GSource *source, GMainContext *context), the return value is unique only in the same context, so we may get the same values with different 'context' parameters. It is no problem to find the right fd_in_tag by using g_main_context_find_source_by_id(GMainContext *context, guint source_id) while there is only one default main context. But colo-compare tries to create/use its own context, and if we pass wrong 'context' parameter with right fd_in_tag, we will find a wrong GSource to handle. We tried to fix the related codes in commit b43decb015a6efeb9e3cdbdb80f6547ad7248a4c, but it didn't fix the bug completely, because we still have some codes didn't pass *right* context parameter for remove_fd_in_watch(). Let's fix it by record the GSource directly instead of fd_in_tag. Signed-off-by: zhanghailiang Reviewed-by: Marc-André Lureau Message-Id: <1492564532-91680-1-git-send-email-zhang.zhanghailiang@huawei.com> Signed-off-by: Paolo Bonzini --- include/sysemu/char.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'include/sysemu') diff --git a/include/sysemu/char.h b/include/sysemu/char.h index 450881d42c..84f5c2312c 100644 --- a/include/sysemu/char.h +++ b/include/sysemu/char.h @@ -93,7 +93,7 @@ struct Chardev { char *filename; int logfd; int be_open; - guint fd_in_tag; + GSource *gsource; DECLARE_BITMAP(features, QEMU_CHAR_FEATURE_LAST); QTAILQ_ENTRY(Chardev) next; }; -- cgit v1.2.3 From 6796b4008bd195e6765a1144dc98a8673e69d169 Mon Sep 17 00:00:00 2001 From: Fam Zheng Date: Wed, 3 May 2017 15:28:19 +0800 Subject: dump: Acquire BQL around vm_start() in dump thread This fixes an assertion failure in the following backtrace: __GI___assert_fail memory_region_transaction_commit memory_region_add_eventfd virtio_pci_ioeventfd_assign virtio_bus_set_host_notifier virtio_blk_data_plane_start virtio_bus_start_ioeventfd virtio_vmstate_change vm_state_notify vm_prepare_start vm_start dump_cleanup dump_process dump_thread start_thread clone vm_start need BQL, acquire it if doing cleaning up from main thread. Signed-off-by: Fam Zheng Message-Id: <20170503072819.14462-1-famz@redhat.com> Signed-off-by: Paolo Bonzini --- include/sysemu/dump.h | 1 + 1 file changed, 1 insertion(+) (limited to 'include/sysemu') diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h index ef931be469..2672a15f8b 100644 --- a/include/sysemu/dump.h +++ b/include/sysemu/dump.h @@ -157,6 +157,7 @@ typedef struct DumpState { uint32_t sh_info; bool have_section; bool resume; + bool detached; ssize_t note_size; hwaddr memory_offset; int fd; -- cgit v1.2.3