Skip to content

qemu_thread_create: propagate the error to callers to handle

Fei Li qemu-devel 7 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v9 Latest16 patches 56 repliesIn review
  2. v87 patches 19 repliesSuperseded
  3. v7 RFC9 patches 20 repliesSuperseded
Earlier versions · 4
VersionPostedPatchesRepliesStatus
v6 RFC7 patches9 repliesSuperseded
v5 RFC7 patches19 repliesSuperseded
v24 patches7 repliesSuperseded
v15 patches13 repliesSuperseded

Changes in v9 from the cover letter

- 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.

Patches in v9 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/16Fix segmentation fault when qemu_signal_init failsutil/main-loop.c+4 -40 replies
2/16migration: fix the multifd code when receiving less channelsmigration/channel.c migration/migration.c migration/migration.h +2 more+29 -120 replies
3/16migration: remove unused &local_err parameter in multifd_save_cleanupmigration/migration.c migration/ram.c migration/ram.h+6 -122 replies
4/16migration: add more error handling for postcopy_ram_enable_notifymigration/postcopy-ram.c migration/savevm.c+2 -00 replies
5/16migration: unify error handling for process_incoming_migration_comigration/migration.c+13 -132 replies
6/16qemu_thread: Make qemu_thread_create() handle errors properlycpus.c dump.c hw/misc/edu.c +23 more+112 -516 replies
7/16qemu_thread: supplement error handling for qemu_X_start_vcpuaccel/tcg/user-exec-stub.c cpus.c include/qom/cpu.h +21 more+117 -580 replies
8/16qemu_thread: supplement error handling for qmp_dump_guest_memorydump.c+4 -32 replies
9/16qemu_thread: supplement error handling for pci_edu_realizehw/misc/edu.c+4 -312 replies
10/16qemu_thread: supplement error handling for h_resize_hpt_preparehw/ppc/spapr_hcall.c+8 -46 replies
11/16qemu_thread: supplement error handling for emulated_realizehw/usb/ccid-card-emulated.c+9 -62 replies
12/16qemu_thread: supplement error handling for iothread_complete/qemu_signalfd_compatiothread.c util/compatfd.c+19 -95 replies
13/16qemu_thread: supplement error handling for migrationmigration/migration.c migration/postcopy-ram.c migration/ram.c +1 more+72 -334 replies
14/16qemu_thread: supplement error handling for vnc_start_worker_threadui/vnc-jobs.c ui/vnc-jobs.h ui/vnc.c+15 -82 replies
15/16qemu_thread: supplement error handling for touch_all_pagesutil/oslib-posix.c+16 -92 replies
16/16qemu_thread_join: fix segmentation faultutil/qemu-thread-posix.c util/qemu-thread-win32.c+4 -110 replies

Reviews trailers per patch

9 of 16 patches have a Reviewed-by or Acked-by.

PatchFam ZhengMarkus ArmbrusterPeter XuJuan QuintelaDr. David Alan GilbertDavid Gibson
1/16R-b R-b
2/16R-b
3/16R-b
4/16R-b
5/16R-b
6/16
7/16R-b R-b
8/16
9/16
10/16A-b
11/16
12/16
13/16R-b
14/16
15/16
16/16R-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes. Scroll the table sideways for all 6 reviewers.

Read the v9 thread

Cover letter [Qemu-devel] [PATCH for-4.0 v9 00/16] qemu_thread_create: propagate the error to callers to handle

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 and the last patch fixes some segmentation faults occured
during the debugging. The 6/7 patch modifies the
qemu_thread_create() by passing &error_abort and makes it return a
bool to all direct callers to indicate if it succeeds. The next 9
patches will improve on &error_abort for callers who can handle more
properly. The middle four fix some migration issues.

BTW, I am leaving my current company now, and will use "Fei Li <[email protected]>" to continue with this patch series.

Please help to review, thanks a lot! :)

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 (16):
Fix segmentation fault when qemu_signal_init fails
migration: fix the multifd code when receiving less channels
migration: remove unused &local_err parameter in multifd_save_cleanup
migration: add more error handling for postcopy_ram_enable_notify
migration: unify error handling for process_incoming_migration_co
qemu_thread: Make qemu_thread_create() handle errors properly
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_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
qemu_thread_join: fix segmentation fault

 accel/tcg/user-exec-stub.c      |  3 +-
 cpus.c                          | 79 ++++++++++++++++++++++++++---------------
 dump.c                          |  6 ++--
 hw/misc/edu.c                   |  7 ++--
 hw/ppc/spapr_hcall.c            | 10 ++++--
 hw/rdma/rdma_backend.c          |  3 +-
 hw/usb/ccid-card-emulated.c     | 14 +++++---
 include/qemu/thread.h           |  4 +--
 include/qom/cpu.h               |  2 +-
 io/task.c                       |  3 +-
 iothread.c                      | 16 ++++++---
 migration/channel.c             | 11 +++---
 migration/migration.c           | 68 ++++++++++++++++++++++-------------
 migration/migration.h           |  2 +-
 migration/postcopy-ram.c        | 15 ++++++--
 migration/ram.c                 | 68 ++++++++++++++++++++++++-----------
 migration/ram.h                 |  4 +--
 migration/savevm.c              | 12 +++++--
 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                 | 11 ++++--
 util/main-loop.c                |  8 ++---
 util/oslib-posix.c              | 24 ++++++++-----
 util/qemu-thread-posix.c        | 30 ++++++++++++----
 util/qemu-thread-win32.c        | 18 +++++++---
 util/rcu.c                      |  3 +-
 util/thread-pool.c              |  4 ++-
 55 files changed, 378 insertions(+), 170 deletions(-)
Signature · 1 line
2.13.7