Hi,
This idea comes from BiteSizedTasks, and this patch series implement
the error checking of qemu_thread_create: make qemu_thread_create
return a flag to indicate if it succeeded rather than failing with
an error; make all callers check it.
The first patch modifies the qemu_thread_create() by passing
&error_abort and returing a value to indicate if it succeeds. The next
10 patches will improve on &error_abort for callers who could handle
more properly.
Please help to review, thanks a lot!
v12:
- For patch 6/11, make event_thread terminate by stopping vevent
thread when failing to create handle_apdu_thread.
- Rectify the commit message for patch 7/11, 8/11.
- For patch 9/11, change two cleanup sentences' order when failing
to create multifd_recv_thread.
- For patch 11/11, fix the SIGBUS conflict for touch_all_pages().
v11:
- Resend as I sent the last version in a mess..
v10:
- Make qemu_thread_create() return -errno instead of a Boolean.
- Add more cleanup for pci_edu_realize()/emulated_realize().
- Polish for iothread_complete()/compress_threads_save_cleanup()/
vnc_start_worker_thread()/touch_all_pages.
- Change to return H_HARDWARE for h_resize_hpt_prepare().
- Remove five derivative patches as they have been merged.
v9:
- To ease the review and involve the appropriate maintainers, split
the previous 6/7 patch into 10 patches: the 6/16 patch passes
the &error_abort to qemu_thread_create() everywhere, and the next
9 patches will improve on &error_abort for callers who need.
- Add a new patch 5/7 to unify error handling for
process_incoming_migration_co().
- Merge the previous 2/7 to current 7/16 to collaboratively handle
for qemu_X_start_vcpu and for the qemu_init_vpcu in each arch.
- Add comment for multifd_recv_new_channel() in current patch 2/7.
v8:
- Remove previous two patches trying to fix the multifd issue on the
source side, as we are still waiting for maintainer's opinions.
- Use atomic_read to get multifd_recv_state->count in patch 3/7.
- Get three more "Reviewed-by:".
v7:
- Split the previous multifd-migration into two patches: the src and
the dst. For the dst, only dump the error instead of quitting.
- Safely do the cleanup for postcopy_ram_enable_notify().
- Split the previous migration-error-handling patch into two patches.
v6:
- Add a new migration-multifd related patch. BTW, delete the previous
vnc related patch as it has been upstreamed.
- Use error_setg_errno() to set the errno when qemu_thread_create()
fails for both Linux and Windows implementation.
- Optimize the first patch, less codes are needed
v5:
- Remove `errno = err` in qemu_thread_create() for Linux, and change
`return errno` to `return -1` in qemu_signal_init() to indicate
the error in case qemu_thread_create() fails.
- Delete the v4-added qemu_cond/mutex_destroy() in iothread_complete()
as the destroy() will be done by its callers' object_unref().
v4:
- Separate the migration compression patch from this series
- Add one more error handling patch related with migration
- Add more cleaning up code for touched functions
v3:
- Add two migration related patches to fix the segmentaion fault
- Extract the segmentation fault fix from v2's last patch to be a
separate patch
v2:
- Pass errp straightly instead of using a local_err & error_propagate
- Return a bool: false/true to indicate if one function succeeds
- Merge v1's last two patches into one to avoid the compile error
- Fix one omitted error in patch1 and update some error messages
Fei Li (11):
qemu_thread: make qemu_thread_create() take Error ** argument
qemu_thread: supplement error handling for qemu_X_start_vcpu
qemu_thread: supplement error handling for qmp_dump_guest_memory
qemu_thread: supplement error handling for pci_edu_realize
qemu_thread: supplement error handling for h_resize_hpt_prepare
qemu_thread: supplement error handling for emulated_realize
qemu_thread: supplement error handling for iothread_complete
qemu_thread: supplement error handling for qemu_signalfd_compat
qemu_thread: supplement error handling for migration
qemu_thread: supplement error handling for vnc_start_worker_thread
qemu_thread: supplement error handling for touch_all_pages
accel/tcg/user-exec-stub.c | 3 +-
cpus.c | 69 +++++++++++++++++++++++++----------------
dump.c | 2 +-
hw/misc/edu.c | 11 +++++--
hw/ppc/spapr_hcall.c | 10 ++++--
hw/rdma/rdma_backend.c | 3 +-
hw/usb/ccid-card-emulated.c | 16 +++++++---
include/qemu/thread.h | 6 ++--
include/qom/cpu.h | 2 +-
io/task.c | 3 +-
iothread.c | 17 +++++++---
migration/migration.c | 30 ++++++++++++++----
migration/postcopy-ram.c | 14 +++++++--
migration/ram.c | 66 ++++++++++++++++++++++++++-------------
migration/savevm.c | 11 +++++--
target/alpha/cpu.c | 4 ++-
target/arm/cpu.c | 4 ++-
target/cris/cpu.c | 4 ++-
target/hppa/cpu.c | 4 ++-
target/i386/cpu.c | 4 ++-
target/lm32/cpu.c | 4 ++-
target/m68k/cpu.c | 4 ++-
target/microblaze/cpu.c | 4 ++-
target/mips/cpu.c | 4 ++-
target/moxie/cpu.c | 4 ++-
target/nios2/cpu.c | 4 ++-
target/openrisc/cpu.c | 4 ++-
target/ppc/translate_init.inc.c | 4 ++-
target/riscv/cpu.c | 4 ++-
target/s390x/cpu.c | 4 ++-
target/sh4/cpu.c | 4 ++-
target/sparc/cpu.c | 4 ++-
target/tilegx/cpu.c | 4 ++-
target/tricore/cpu.c | 4 ++-
target/unicore32/cpu.c | 4 ++-
target/xtensa/cpu.c | 4 ++-
tests/atomic_add-bench.c | 3 +-
tests/iothread.c | 2 +-
tests/qht-bench.c | 3 +-
tests/rcutorture.c | 3 +-
tests/test-aio.c | 2 +-
tests/test-rcu-list.c | 3 +-
ui/vnc-jobs.c | 17 +++++++---
ui/vnc-jobs.h | 2 +-
ui/vnc.c | 4 ++-
util/compatfd.c | 13 ++++++--
util/oslib-posix.c | 34 +++++++++++++-------
util/qemu-thread-posix.c | 30 +++++++++++++-----
util/qemu-thread-win32.c | 13 ++++++--
util/rcu.c | 3 +-
util/thread-pool.c | 4 ++-
51 files changed, 344 insertions(+), 139 deletions(-)