From patchwork Fri Feb 1 05:17:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: fei X-Patchwork-Id: 1034581 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=126.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=126.com header.i=@126.com header.b="iBOEY67x"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 43rQQP0Bsfz9sDr for ; Fri, 1 Feb 2019 16:19:41 +1100 (AEDT) Received: from localhost ([127.0.0.1]:38887 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpREo-0003hM-Oh for incoming@patchwork.ozlabs.org; Fri, 01 Feb 2019 00:19:38 -0500 Received: from eggs.gnu.org ([209.51.188.92]:40371) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpRDp-0003fH-0Y for qemu-devel@nongnu.org; Fri, 01 Feb 2019 00:18:38 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gpRDl-0007nJ-89 for qemu-devel@nongnu.org; Fri, 01 Feb 2019 00:18:36 -0500 Received: from m50-111.126.com ([123.125.50.111]:54033) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpRDd-0007m1-U5 for qemu-devel@nongnu.org; Fri, 01 Feb 2019 00:18:29 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=126.com; s=s110527; h=From:Subject:Date:Message-Id; bh=rv6xBgOoEtvp35Y1xu hhCV0f5yg3u4icEOlCaUNzBQ4=; b=iBOEY67xUk7epZ/vediiIw+vwj2czIgDiM jspIgGzVldY8GpHw+LrGRVUgBaG9D0Lh7+v1GXH1qn5e35qvGW6ZguOaDUxo+KTr tRn8cG5Ywx+juGv90w+WLLXjl45hrgTPgY2TEKaWiX7HTB8GC767FHwn5K8mc0BM GiyjlqPxk= Received: from bogon.bytedance.net (unknown [120.52.147.46]) by smtp5 (Coremail) with SMTP id jtKowABXEaSW1lNcujAMAA--.154S4; Fri, 01 Feb 2019 13:18:20 +0800 (CST) From: Fei Li To: qemu-devel@nongnu.org, shirley17fei@gmail.com Date: Fri, 1 Feb 2019 13:17:57 +0800 Message-Id: <20190201051806.53183-3-lifei1214@126.com> X-Mailer: git-send-email 2.17.2 (Apple Git-113) In-Reply-To: <20190201051806.53183-1-lifei1214@126.com> References: <20190201051806.53183-1-lifei1214@126.com> X-CM-TRANSID: jtKowABXEaSW1lNcujAMAA--.154S4 X-Coremail-Antispam: 1Uf129KBjvAXoWfGFykKr1xCF1fuFy3Cr4UJwb_yoW8WFWrto WrArW3Xa48tr1fJF98urnrta4UtFyUZrW3AFs8uF4DWrn7XFZ8X343tan3Za1aqF4SgrW7 uFySq3ZrXFs3Cry8n29KB7ZKAUJUUUU8529EdanIXcx71UUUUU7v73VFW2AGmfu7bjvjm3 AaLaJ3UbIYCTnIWIevJa73UjIFyTuYvjxUSfHUDUUUU X-Originating-IP: [120.52.147.46] X-CM-SenderInfo: 5olivxarsrkqqrswhudrp/1tbi6xxOIVpD7pb6awAAso X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 123.125.50.111 Subject: [Qemu-devel] [PATCH v11 for-4.0 02/11] qemu_thread: supplement error handling for qemu_X_start_vcpu X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Fei Li , Paolo Bonzini Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Fei Li The callers of qemu_init_vcpu() already passed the **errp to handle errors. In view of this, add a new Error parameter to qemu_init_vcpu() and all qemu_X_start_vcpu() functions called by qemu_init_vcpu() to propagate the error and let the further callers check it. Besides, make qemu_init_vcpu() return a Boolean value to let its callers know whether it succeeds. Cc: Paolo Bonzini Signed-off-by: Fei Li Reviewed-by: Fam Zheng Reviewed-by: Juan Quintela Reviewed-by: Markus Armbruster --- accel/tcg/user-exec-stub.c | 3 +- cpus.c | 74 +++++++++++++++++++-------------- include/qom/cpu.h | 2 +- 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 +- 24 files changed, 108 insertions(+), 55 deletions(-) diff --git a/accel/tcg/user-exec-stub.c b/accel/tcg/user-exec-stub.c index a32b4496af..f8c38a375c 100644 --- a/accel/tcg/user-exec-stub.c +++ b/accel/tcg/user-exec-stub.c @@ -10,8 +10,9 @@ void cpu_resume(CPUState *cpu) { } -void qemu_init_vcpu(CPUState *cpu) +bool qemu_init_vcpu(CPUState *cpu, Error **errp) { + return true; } /* User mode emulation does not support record/replay yet. */ diff --git a/cpus.c b/cpus.c index 843a0f06a2..4ed7d62e58 100644 --- a/cpus.c +++ b/cpus.c @@ -1931,7 +1931,7 @@ void cpu_remove_sync(CPUState *cpu) /* For temporary buffers for forming a name */ #define VCPU_THREAD_NAME_SIZE 16 -static void qemu_tcg_init_vcpu(CPUState *cpu) +static void qemu_tcg_init_vcpu(CPUState *cpu, Error **errp) { char thread_name[VCPU_THREAD_NAME_SIZE]; static QemuCond *single_tcg_halt_cond; @@ -1961,17 +1961,20 @@ static void qemu_tcg_init_vcpu(CPUState *cpu) snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/TCG", cpu->cpu_index); - /* TODO: let the callers handle the error instead of abort() here */ - qemu_thread_create(cpu->thread, thread_name, qemu_tcg_cpu_thread_fn, - cpu, QEMU_THREAD_JOINABLE, &error_abort); + if (qemu_thread_create(cpu->thread, thread_name, + qemu_tcg_cpu_thread_fn, cpu, + QEMU_THREAD_JOINABLE, errp) < 0) { + return; + } } else { /* share a single thread for all cpus with TCG */ snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "ALL CPUs/TCG"); - /* TODO: let the callers handle the error instead of abort() here */ - qemu_thread_create(cpu->thread, thread_name, - qemu_tcg_rr_cpu_thread_fn, - cpu, QEMU_THREAD_JOINABLE, &error_abort); + if (qemu_thread_create(cpu->thread, thread_name, + qemu_tcg_rr_cpu_thread_fn, cpu, + QEMU_THREAD_JOINABLE, errp) < 0) { + return; + } single_tcg_halt_cond = cpu->halt_cond; single_tcg_cpu_thread = cpu->thread; @@ -1989,7 +1992,7 @@ static void qemu_tcg_init_vcpu(CPUState *cpu) } } -static void qemu_hax_start_vcpu(CPUState *cpu) +static void qemu_hax_start_vcpu(CPUState *cpu, Error **errp) { char thread_name[VCPU_THREAD_NAME_SIZE]; @@ -1999,15 +2002,16 @@ static void qemu_hax_start_vcpu(CPUState *cpu) snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/HAX", cpu->cpu_index); - /* TODO: let the further caller handle the error instead of abort() here */ - qemu_thread_create(cpu->thread, thread_name, qemu_hax_cpu_thread_fn, - cpu, QEMU_THREAD_JOINABLE, &error_abort); + if (qemu_thread_create(cpu->thread, thread_name, qemu_hax_cpu_thread_fn, + cpu, QEMU_THREAD_JOINABLE, errp) < 0) { + return; + } #ifdef _WIN32 cpu->hThread = qemu_thread_get_handle(cpu->thread); #endif } -static void qemu_kvm_start_vcpu(CPUState *cpu) +static void qemu_kvm_start_vcpu(CPUState *cpu, Error **errp) { char thread_name[VCPU_THREAD_NAME_SIZE]; @@ -2016,12 +2020,11 @@ static void qemu_kvm_start_vcpu(CPUState *cpu) qemu_cond_init(cpu->halt_cond); snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/KVM", cpu->cpu_index); - /* TODO: let the further caller handle the error instead of abort() here */ qemu_thread_create(cpu->thread, thread_name, qemu_kvm_cpu_thread_fn, - cpu, QEMU_THREAD_JOINABLE, &error_abort); + cpu, QEMU_THREAD_JOINABLE, errp); } -static void qemu_hvf_start_vcpu(CPUState *cpu) +static void qemu_hvf_start_vcpu(CPUState *cpu, Error **errp) { char thread_name[VCPU_THREAD_NAME_SIZE]; @@ -2035,12 +2038,11 @@ static void qemu_hvf_start_vcpu(CPUState *cpu) snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/HVF", cpu->cpu_index); - /* TODO: let the further caller handle the error instead of abort() here */ qemu_thread_create(cpu->thread, thread_name, qemu_hvf_cpu_thread_fn, - cpu, QEMU_THREAD_JOINABLE, &error_abort); + cpu, QEMU_THREAD_JOINABLE, errp); } -static void qemu_whpx_start_vcpu(CPUState *cpu) +static void qemu_whpx_start_vcpu(CPUState *cpu, Error **errp) { char thread_name[VCPU_THREAD_NAME_SIZE]; @@ -2049,15 +2051,16 @@ static void qemu_whpx_start_vcpu(CPUState *cpu) qemu_cond_init(cpu->halt_cond); snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/WHPX", cpu->cpu_index); - /* TODO: let the further caller handle the error instead of abort() here */ - qemu_thread_create(cpu->thread, thread_name, qemu_whpx_cpu_thread_fn, - cpu, QEMU_THREAD_JOINABLE, &error_abort); + if (qemu_thread_create(cpu->thread, thread_name, qemu_whpx_cpu_thread_fn, + cpu, QEMU_THREAD_JOINABLE, errp) < 0) { + return; + } #ifdef _WIN32 cpu->hThread = qemu_thread_get_handle(cpu->thread); #endif } -static void qemu_dummy_start_vcpu(CPUState *cpu) +static void qemu_dummy_start_vcpu(CPUState *cpu, Error **errp) { char thread_name[VCPU_THREAD_NAME_SIZE]; @@ -2066,16 +2069,16 @@ static void qemu_dummy_start_vcpu(CPUState *cpu) qemu_cond_init(cpu->halt_cond); snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/DUMMY", cpu->cpu_index); - /* TODO: let the further caller handle the error instead of abort() here */ qemu_thread_create(cpu->thread, thread_name, qemu_dummy_cpu_thread_fn, - cpu, QEMU_THREAD_JOINABLE, &error_abort); + cpu, QEMU_THREAD_JOINABLE, errp); } -void qemu_init_vcpu(CPUState *cpu) +bool qemu_init_vcpu(CPUState *cpu, Error **errp) { cpu->nr_cores = smp_cores; cpu->nr_threads = smp_threads; cpu->stopped = true; + Error *local_err = NULL; if (!cpu->as) { /* If the target cpu hasn't set up any address spaces itself, @@ -2086,22 +2089,29 @@ void qemu_init_vcpu(CPUState *cpu) } if (kvm_enabled()) { - qemu_kvm_start_vcpu(cpu); + qemu_kvm_start_vcpu(cpu, &local_err); } else if (hax_enabled()) { - qemu_hax_start_vcpu(cpu); + qemu_hax_start_vcpu(cpu, &local_err); } else if (hvf_enabled()) { - qemu_hvf_start_vcpu(cpu); + qemu_hvf_start_vcpu(cpu, &local_err); } else if (tcg_enabled()) { - qemu_tcg_init_vcpu(cpu); + qemu_tcg_init_vcpu(cpu, &local_err); } else if (whpx_enabled()) { - qemu_whpx_start_vcpu(cpu); + qemu_whpx_start_vcpu(cpu, &local_err); } else { - qemu_dummy_start_vcpu(cpu); + qemu_dummy_start_vcpu(cpu, &local_err); + } + + if (local_err) { + error_propagate(errp, local_err); + return false; } while (!cpu->created) { qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex); } + + return true; } void cpu_stop_current(void) diff --git a/include/qom/cpu.h b/include/qom/cpu.h index 4c2feb9c17..bbd90bfebc 100644 --- a/include/qom/cpu.h +++ b/include/qom/cpu.h @@ -1014,7 +1014,7 @@ void end_exclusive(void); * * Initializes a vCPU. */ -void qemu_init_vcpu(CPUState *cpu); +bool qemu_init_vcpu(CPUState *cpu, Error **errp); #define SSTEP_ENABLE 0x1 /* Enable simulated HW single stepping */ #define SSTEP_NOIRQ 0x2 /* Do not use IRQ while single stepping */ diff --git a/target/alpha/cpu.c b/target/alpha/cpu.c index 1fd95d6c0f..7d24ee1f31 100644 --- a/target/alpha/cpu.c +++ b/target/alpha/cpu.c @@ -66,7 +66,9 @@ static void alpha_cpu_realizefn(DeviceState *dev, Error **errp) return; } - qemu_init_vcpu(cs); + if (!qemu_init_vcpu(cs, errp)) { + return; + } acc->parent_realize(dev, errp); } diff --git a/target/arm/cpu.c b/target/arm/cpu.c index d6da3f4fed..22b66a6936 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -1139,7 +1139,9 @@ static void arm_cpu_realizefn(DeviceState *dev, Error **errp) } #endif - qemu_init_vcpu(cs); + if (!qemu_init_vcpu(cs, errp)) { + return; + } cpu_reset(cs); acc->parent_realize(dev, errp); diff --git a/target/cris/cpu.c b/target/cris/cpu.c index a23aba2688..ec92d69781 100644 --- a/target/cris/cpu.c +++ b/target/cris/cpu.c @@ -140,7 +140,9 @@ static void cris_cpu_realizefn(DeviceState *dev, Error **errp) } cpu_reset(cs); - qemu_init_vcpu(cs); + if (!qemu_init_vcpu(cs, errp)) { + return; + } ccc->parent_realize(dev, errp); } diff --git a/target/hppa/cpu.c b/target/hppa/cpu.c index 00bf444620..08f600ced9 100644 --- a/target/hppa/cpu.c +++ b/target/hppa/cpu.c @@ -98,7 +98,9 @@ static void hppa_cpu_realizefn(DeviceState *dev, Error **errp) return; } - qemu_init_vcpu(cs); + if (!qemu_init_vcpu(cs, errp)) { + return; + } acc->parent_realize(dev, errp); #ifndef CONFIG_USER_ONLY diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 7483daef58..b5c5bc370a 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -5324,7 +5324,9 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp) } #endif - qemu_init_vcpu(cs); + if (!qemu_init_vcpu(cs, errp)) { + return; + } /* * Most Intel and certain AMD CPUs support hyperthreading. Even though QEMU diff --git a/target/lm32/cpu.c b/target/lm32/cpu.c index b7499cb627..d50b1e4a43 100644 --- a/target/lm32/cpu.c +++ b/target/lm32/cpu.c @@ -139,7 +139,9 @@ static void lm32_cpu_realizefn(DeviceState *dev, Error **errp) cpu_reset(cs); - qemu_init_vcpu(cs); + if (!qemu_init_vcpu(cs, errp)) { + return; + } lcc->parent_realize(dev, errp); } diff --git a/target/m68k/cpu.c b/target/m68k/cpu.c index 582e3a73b3..4ab53f2d58 100644 --- a/target/m68k/cpu.c +++ b/target/m68k/cpu.c @@ -231,7 +231,9 @@ static void m68k_cpu_realizefn(DeviceState *dev, Error **errp) m68k_cpu_init_gdb(cpu); cpu_reset(cs); - qemu_init_vcpu(cs); + if (!qemu_init_vcpu(cs, errp)) { + return; + } mcc->parent_realize(dev, errp); } diff --git a/target/microblaze/cpu.c b/target/microblaze/cpu.c index 5596cd5485..310e3d8fd5 100644 --- a/target/microblaze/cpu.c +++ b/target/microblaze/cpu.c @@ -161,7 +161,9 @@ static void mb_cpu_realizefn(DeviceState *dev, Error **errp) return; } - qemu_init_vcpu(cs); + if (!qemu_init_vcpu(cs, errp)) { + return; + } env->pvr.regs[0] = PVR0_USE_EXC_MASK \ | PVR0_USE_ICACHE_MASK \ diff --git a/target/mips/cpu.c b/target/mips/cpu.c index e217fb3e36..1e5aa69c57 100644 --- a/target/mips/cpu.c +++ b/target/mips/cpu.c @@ -145,7 +145,9 @@ static void mips_cpu_realizefn(DeviceState *dev, Error **errp) cpu_mips_realize_env(&cpu->env); cpu_reset(cs); - qemu_init_vcpu(cs); + if (!qemu_init_vcpu(cs, errp)) { + return; + } mcc->parent_realize(dev, errp); } diff --git a/target/moxie/cpu.c b/target/moxie/cpu.c index 8d67eb6727..8581a6d922 100644 --- a/target/moxie/cpu.c +++ b/target/moxie/cpu.c @@ -66,7 +66,9 @@ static void moxie_cpu_realizefn(DeviceState *dev, Error **errp) return; } - qemu_init_vcpu(cs); + if (!qemu_init_vcpu(cs, errp)) { + return; + } cpu_reset(cs); mcc->parent_realize(dev, errp); diff --git a/target/nios2/cpu.c b/target/nios2/cpu.c index fbfaa2ce26..5c7b4b486e 100644 --- a/target/nios2/cpu.c +++ b/target/nios2/cpu.c @@ -94,7 +94,9 @@ static void nios2_cpu_realizefn(DeviceState *dev, Error **errp) return; } - qemu_init_vcpu(cs); + if (!qemu_init_vcpu(cs, errp)) { + return; + } cpu_reset(cs); ncc->parent_realize(dev, errp); diff --git a/target/openrisc/cpu.c b/target/openrisc/cpu.c index 541b2a66c7..f8ec7deb38 100644 --- a/target/openrisc/cpu.c +++ b/target/openrisc/cpu.c @@ -83,7 +83,9 @@ static void openrisc_cpu_realizefn(DeviceState *dev, Error **errp) return; } - qemu_init_vcpu(cs); + if (!qemu_init_vcpu(cs, errp)) { + return; + } cpu_reset(cs); occ->parent_realize(dev, errp); diff --git a/target/ppc/translate_init.inc.c b/target/ppc/translate_init.inc.c index 59e0b86762..cfd7777479 100644 --- a/target/ppc/translate_init.inc.c +++ b/target/ppc/translate_init.inc.c @@ -9705,7 +9705,9 @@ static void ppc_cpu_realize(DeviceState *dev, Error **errp) 32, "power-vsx.xml", 0); } - qemu_init_vcpu(cs); + if (!qemu_init_vcpu(cs, errp)) { + goto unrealize; + } pcc->parent_realize(dev, errp); diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 28d7e5302f..a4cd7428dd 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -311,7 +311,9 @@ static void riscv_cpu_realize(DeviceState *dev, Error **errp) return; } - qemu_init_vcpu(cs); + if (!qemu_init_vcpu(cs, errp)) { + return; + } cpu_reset(cs); mcc->parent_realize(dev, errp); diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c index 18ba7f85a5..2a3eac9761 100644 --- a/target/s390x/cpu.c +++ b/target/s390x/cpu.c @@ -222,7 +222,9 @@ static void s390_cpu_realizefn(DeviceState *dev, Error **errp) qemu_register_reset(s390_cpu_machine_reset_cb, cpu); #endif s390_cpu_gdb_init(cs); - qemu_init_vcpu(cs); + if (!qemu_init_vcpu(cs, errp)) { + return; + } /* * KVM requires the initial CPU reset ioctl to be executed on the target diff --git a/target/sh4/cpu.c b/target/sh4/cpu.c index b9f393b7c7..d32ef2e1cb 100644 --- a/target/sh4/cpu.c +++ b/target/sh4/cpu.c @@ -196,7 +196,9 @@ static void superh_cpu_realizefn(DeviceState *dev, Error **errp) } cpu_reset(cs); - qemu_init_vcpu(cs); + if (!qemu_init_vcpu(cs, errp)) { + return; + } scc->parent_realize(dev, errp); } diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c index 4a4445bdf5..a511c90dab 100644 --- a/target/sparc/cpu.c +++ b/target/sparc/cpu.c @@ -772,7 +772,9 @@ static void sparc_cpu_realizefn(DeviceState *dev, Error **errp) return; } - qemu_init_vcpu(cs); + if (!qemu_init_vcpu(cs, errp)) { + return; + } scc->parent_realize(dev, errp); } diff --git a/target/tilegx/cpu.c b/target/tilegx/cpu.c index bfe9be59b5..234148fabd 100644 --- a/target/tilegx/cpu.c +++ b/target/tilegx/cpu.c @@ -92,7 +92,9 @@ static void tilegx_cpu_realizefn(DeviceState *dev, Error **errp) } cpu_reset(cs); - qemu_init_vcpu(cs); + if (!qemu_init_vcpu(cs, errp)) { + return; + } tcc->parent_realize(dev, errp); } diff --git a/target/tricore/cpu.c b/target/tricore/cpu.c index e8d37e4040..67e3eb03d9 100644 --- a/target/tricore/cpu.c +++ b/target/tricore/cpu.c @@ -96,7 +96,9 @@ static void tricore_cpu_realizefn(DeviceState *dev, Error **errp) set_feature(env, TRICORE_FEATURE_13); } cpu_reset(cs); - qemu_init_vcpu(cs); + if (!qemu_init_vcpu(cs, errp)) { + return; + } tcc->parent_realize(dev, errp); } diff --git a/target/unicore32/cpu.c b/target/unicore32/cpu.c index 2b49d1ca40..0c737c3187 100644 --- a/target/unicore32/cpu.c +++ b/target/unicore32/cpu.c @@ -96,7 +96,9 @@ static void uc32_cpu_realizefn(DeviceState *dev, Error **errp) return; } - qemu_init_vcpu(cs); + if (!qemu_init_vcpu(cs, errp)) { + return; + } ucc->parent_realize(dev, errp); } diff --git a/target/xtensa/cpu.c b/target/xtensa/cpu.c index a54dbe4260..d2351c9b20 100644 --- a/target/xtensa/cpu.c +++ b/target/xtensa/cpu.c @@ -131,7 +131,9 @@ static void xtensa_cpu_realizefn(DeviceState *dev, Error **errp) cs->gdb_num_regs = xcc->config->gdb_regmap.num_regs; - qemu_init_vcpu(cs); + if (!qemu_init_vcpu(cs, errp)) { + return; + } xcc->parent_realize(dev, errp); } From patchwork Fri Feb 1 05:17:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: fei X-Patchwork-Id: 1034583 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=126.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=126.com header.i=@126.com header.b="BsfkWfK7"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 43rQTl32dxz9s4V for ; Fri, 1 Feb 2019 16:22:33 +1100 (AEDT) Received: from localhost ([127.0.0.1]:38937 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpRHZ-0006Jl-Tm for incoming@patchwork.ozlabs.org; Fri, 01 Feb 2019 00:22:29 -0500 Received: from eggs.gnu.org ([209.51.188.92]:40396) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpRDq-0003g2-Ve for qemu-devel@nongnu.org; Fri, 01 Feb 2019 00:18:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gpRDp-0007o4-2H for qemu-devel@nongnu.org; Fri, 01 Feb 2019 00:18:38 -0500 Received: from m50-111.126.com ([123.125.50.111]:54035) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpRDn-0007m5-53 for qemu-devel@nongnu.org; Fri, 01 Feb 2019 00:18:36 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=126.com; s=s110527; h=From:Subject:Date:Message-Id:MIME-Version; bh=Snfol +lWFnSlWxB3Xvs/EsUZVKxOImw9e/nTAww0Ei8=; b=BsfkWfK7TklXwGjSPsEEN OQgvID+ZXdViDz2TFXkO5O8rJaYAIGcen8D/32ruCQ60ofSaRLvCCOydvT4G4jbf z5kBdKkShUEdqQyWjRlypjIgyjC85If5DaHq+7r38y7vnOD389SrtY2J0Gw+HID8 vGA7L13ZoYVi+6lHoKdA2w= Received: from bogon.bytedance.net (unknown [120.52.147.46]) by smtp5 (Coremail) with SMTP id jtKowABXEaSW1lNcujAMAA--.154S5; Fri, 01 Feb 2019 13:18:20 +0800 (CST) From: Fei Li To: qemu-devel@nongnu.org, shirley17fei@gmail.com Date: Fri, 1 Feb 2019 13:17:58 +0800 Message-Id: <20190201051806.53183-4-lifei1214@126.com> X-Mailer: git-send-email 2.17.2 (Apple Git-113) In-Reply-To: <20190201051806.53183-1-lifei1214@126.com> References: <20190201051806.53183-1-lifei1214@126.com> MIME-Version: 1.0 X-CM-TRANSID: jtKowABXEaSW1lNcujAMAA--.154S5 X-Coremail-Antispam: 1Uf129KBjvdXoW7Jw43Cw45WFW5XFWDAF4Dtwb_yoWfGFX_Ja 10q347Jayaq3Z0gF48Ca17Z340v348WF1kGa47try3KrWUtFy3WFy8t3WfAF1fCrsxX343 CrykXrWFkay29jkaLaAFLSUrUUUUUb8apTn2vfkv8UJUUUU8Yxn0WfASr-VFAUDa7-sFnT 9fnUUvcSsGvfC2KfnxnUUI43ZEXa7IU5jfO7UUUUU== X-Originating-IP: [120.52.147.46] X-CM-SenderInfo: 5olivxarsrkqqrswhudrp/1tbitR1OIVpD8Tx5ewAAsR X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 123.125.50.111 Subject: [Qemu-devel] [PATCH v11 for-4.0 03/11] qemu_thread: supplement error handling for qmp_dump_guest_memory X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Fei Li , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Markus Armbruster Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Fei Li Utilize the existed errp to propagate the error instead of the temporary &error_abort. Cc: Markus Armbruster Cc: Marc-André Lureau Signed-off-by: Fei Li Reviewed-by: Markus Armbruster --- dump.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dump.c b/dump.c index e4886bc9c3..92cc277015 100644 --- a/dump.c +++ b/dump.c @@ -2020,9 +2020,8 @@ void qmp_dump_guest_memory(bool paging, const char *file, if (detach_p) { /* detached dump */ s->detached = true; - /* TODO: let the further caller handle the error instead of abort() */ qemu_thread_create(&s->dump_thread, "dump_thread", dump_thread, - s, QEMU_THREAD_DETACHED, &error_abort); + s, QEMU_THREAD_DETACHED, errp); } else { /* sync dump */ dump_process(s, errp); From patchwork Fri Feb 1 05:17:59 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: fei X-Patchwork-Id: 1034580 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=126.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=126.com header.i=@126.com header.b="kiK9hupS"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 43rQQP0r6Xz9sMl for ; Fri, 1 Feb 2019 16:19:41 +1100 (AEDT) Received: from localhost ([127.0.0.1]:38889 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpREp-0003hd-0F for incoming@patchwork.ozlabs.org; Fri, 01 Feb 2019 00:19:39 -0500 Received: from eggs.gnu.org ([209.51.188.92]:40369) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpRDo-0003fG-W2 for qemu-devel@nongnu.org; Fri, 01 Feb 2019 00:18:37 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gpRDl-0007nW-R2 for qemu-devel@nongnu.org; Fri, 01 Feb 2019 00:18:34 -0500 Received: from m50-111.126.com ([123.125.50.111]:54034) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpRDh-0007m7-Mi for qemu-devel@nongnu.org; Fri, 01 Feb 2019 00:18:32 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=126.com; s=s110527; h=From:Subject:Date:Message-Id; bh=Kg5pakR21wF2O7bk/6 LM+iwyZMA1JBifOP/DuT6YtR0=; b=kiK9hupSho8KJTl/NT4c/WPnLW8YRK6oTD 7VrUMVfdszdRq02mFmxCV/vcg8Cq5XmmXV91dX7EJWUjngzn9rJ0ywPKtNzPTKoL SrhTzgUQ5i6aWvPJnzxnp64TXcSAilzBiMreRhh/OvJd4uZ7fB+2do9Bgj0nZbsh sUFZf8wCk= Received: from bogon.bytedance.net (unknown [120.52.147.46]) by smtp5 (Coremail) with SMTP id jtKowABXEaSW1lNcujAMAA--.154S6; Fri, 01 Feb 2019 13:18:21 +0800 (CST) From: Fei Li To: qemu-devel@nongnu.org, shirley17fei@gmail.com Date: Fri, 1 Feb 2019 13:17:59 +0800 Message-Id: <20190201051806.53183-5-lifei1214@126.com> X-Mailer: git-send-email 2.17.2 (Apple Git-113) In-Reply-To: <20190201051806.53183-1-lifei1214@126.com> References: <20190201051806.53183-1-lifei1214@126.com> X-CM-TRANSID: jtKowABXEaSW1lNcujAMAA--.154S6 X-Coremail-Antispam: 1Uf129KBjvJXoWrtw45CrWruF4rXFWxWFW3ZFb_yoW8JryUpr Z8G39xKrZ3JFs3ZrW3JayqvFyUGa1rWF4UGr48Cw4fJw1DGa1YvryUG3409FyxCFyYvFWr ZFW5JFy3Wa1qvrJanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07jJAwxUUUUU= X-Originating-IP: [120.52.147.46] X-CM-SenderInfo: 5olivxarsrkqqrswhudrp/1tbiFh1OIVpD8RQ7KwAAsI X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 123.125.50.111 Subject: [Qemu-devel] [PATCH v11 for-4.0 04/11] qemu_thread: supplement error handling for pci_edu_realize X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Fei Li , Jiri Slaby , Markus Armbruster Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Fei Li Utilize the existed errp to propagate the error and do the corresponding cleanup to replace the temporary &error_abort. Cc: Markus Armbruster Cc: Jiri Slaby Signed-off-by: Fei Li Reviewed-by: Markus Armbruster --- hw/misc/edu.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/hw/misc/edu.c b/hw/misc/edu.c index 21adbfddce..8fe232b6d6 100644 --- a/hw/misc/edu.c +++ b/hw/misc/edu.c @@ -356,9 +356,14 @@ static void pci_edu_realize(PCIDevice *pdev, Error **errp) qemu_mutex_init(&edu->thr_mutex); qemu_cond_init(&edu->thr_cond); - /* TODO: let the further caller handle the error instead of abort() here */ - qemu_thread_create(&edu->thread, "edu", edu_fact_thread, - edu, QEMU_THREAD_JOINABLE, &error_abort); + if (qemu_thread_create(&edu->thread, "edu", edu_fact_thread, + edu, QEMU_THREAD_JOINABLE, errp) < 0) { + qemu_cond_destroy(&edu->thr_cond); + qemu_mutex_destroy(&edu->thr_mutex); + timer_del(&edu->dma_timer); + msi_uninit(pdev); + return; + } memory_region_init_io(&edu->mmio, OBJECT(edu), &edu_mmio_ops, edu, "edu-mmio", 1 * MiB); From patchwork Fri Feb 1 05:18:00 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: fei X-Patchwork-Id: 1034584 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=126.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=126.com header.i=@126.com header.b="OKXygb8V"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 43rQTl32hxz9sDr for ; Fri, 1 Feb 2019 16:22:34 +1100 (AEDT) Received: from localhost ([127.0.0.1]:38943 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpRHc-0006Lj-4F for incoming@patchwork.ozlabs.org; Fri, 01 Feb 2019 00:22:32 -0500 Received: from eggs.gnu.org ([209.51.188.92]:40448) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpRDs-0003hi-Pu for qemu-devel@nongnu.org; Fri, 01 Feb 2019 00:18:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gpRDr-0007qI-Ob for qemu-devel@nongnu.org; Fri, 01 Feb 2019 00:18:40 -0500 Received: from m50-111.126.com ([123.125.50.111]:54117) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpRDr-0007mb-5W for qemu-devel@nongnu.org; Fri, 01 Feb 2019 00:18:39 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=126.com; s=s110527; h=From:Subject:Date:Message-Id; bh=Qq9OlGYFtaNkk5toGu sdABdKSrt4/TkTMQP7sPy6J7k=; b=OKXygb8VAxxkyTklKb97dt/UKMgRtxFmBo eqr5D8d7N3Q/6zs11+o0k6LZo7HzPBG2ldGMX/VSFrJyCmMCiF84wIXItEHXIIyF 2cxt9C+ugz0gtfRXZG01gtMygV3ljrpY2ruX9VPncn1DGbZSTMonsI/NS6IPg4la 6NunlI2rI= Received: from bogon.bytedance.net (unknown [120.52.147.46]) by smtp5 (Coremail) with SMTP id jtKowABXEaSW1lNcujAMAA--.154S7; Fri, 01 Feb 2019 13:18:21 +0800 (CST) From: Fei Li To: qemu-devel@nongnu.org, shirley17fei@gmail.com Date: Fri, 1 Feb 2019 13:18:00 +0800 Message-Id: <20190201051806.53183-6-lifei1214@126.com> X-Mailer: git-send-email 2.17.2 (Apple Git-113) In-Reply-To: <20190201051806.53183-1-lifei1214@126.com> References: <20190201051806.53183-1-lifei1214@126.com> X-CM-TRANSID: jtKowABXEaSW1lNcujAMAA--.154S7 X-Coremail-Antispam: 1Uf129KBjvJXoW7WF4fuw4DAw4UCF43ZFWkZwb_yoW8Wr1xpr Wakr98tr4xG3Zay39Iya1kZ3W5XrnIgay3ArZ3Zw1fGw43Gwsxury5JF909ryrCF1fXw43 ZrZY9F1UCanxtFJanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07jp2NtUUUUU= X-Originating-IP: [120.52.147.46] X-CM-SenderInfo: 5olivxarsrkqqrswhudrp/1tbiaR1OIVpD7p5+jQAAsB X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 123.125.50.111 Subject: [Qemu-devel] [PATCH v11 for-4.0 05/11] qemu_thread: supplement error handling for h_resize_hpt_prepare X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Fei Li , Markus Armbruster , David Gibson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Fei Li Add a local_err to hold the error, and return the corresponding error code to replace the temporary &error_abort. Cc: Markus Armbruster Cc: David Gibson Signed-off-by: Fei Li Acked-by: David Gibson Reviewed-by: Markus Armbruster --- hw/ppc/spapr_hcall.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c index bee2895b94..5ef73bef0e 100644 --- a/hw/ppc/spapr_hcall.c +++ b/hw/ppc/spapr_hcall.c @@ -478,6 +478,7 @@ static target_ulong h_resize_hpt_prepare(PowerPCCPU *cpu, sPAPRPendingHPT *pending = spapr->pending_hpt; uint64_t current_ram_size; int rc; + Error *local_err = NULL; if (spapr->resize_hpt == SPAPR_RESIZE_HPT_DISABLED) { return H_AUTHORITY; @@ -538,10 +539,13 @@ static target_ulong h_resize_hpt_prepare(PowerPCCPU *cpu, pending->shift = shift; pending->ret = H_HARDWARE; - /* TODO: let the further caller handle the error instead of abort() here */ - qemu_thread_create(&pending->thread, "sPAPR HPT prepare", - hpt_prepare_thread, pending, - QEMU_THREAD_DETACHED, &error_abort); + if (qemu_thread_create(&pending->thread, "sPAPR HPT prepare", + hpt_prepare_thread, pending, + QEMU_THREAD_DETACHED, &local_err) < 0) { + error_reportf_err(local_err, "failed to create hpt_prepare_thread: "); + g_free(pending); + return H_HARDWARE; + } spapr->pending_hpt = pending; From patchwork Fri Feb 1 05:18:02 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: fei X-Patchwork-Id: 1034579 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=126.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=126.com header.i=@126.com header.b="ME8E9L6l"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 43rQQG70Gnz9sDr for ; Fri, 1 Feb 2019 16:19:34 +1100 (AEDT) Received: from localhost ([127.0.0.1]:38885 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpREi-0003fx-VZ for incoming@patchwork.ozlabs.org; Fri, 01 Feb 2019 00:19:33 -0500 Received: from eggs.gnu.org ([209.51.188.92]:40367) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpRDo-0003fF-Nq for qemu-devel@nongnu.org; Fri, 01 Feb 2019 00:18:37 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gpRDl-0007nP-8m for qemu-devel@nongnu.org; Fri, 01 Feb 2019 00:18:34 -0500 Received: from m50-111.126.com ([123.125.50.111]:54031) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpRDe-0007m6-0J for qemu-devel@nongnu.org; Fri, 01 Feb 2019 00:18:31 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=126.com; s=s110527; h=From:Subject:Date:Message-Id; bh=6UR9tnuQZqLsb5/GPe fc24GUMsm4aq66VCQ/dUGxEHw=; b=ME8E9L6ljpjuatklHisxCkGcRKrC5t9+gD iFeGkYdjnEB4fZsNTwzZPWYd/AfsFgzw0DHbrW7O70Xi3lqVD30Rzb0FqviCDk5b vToNL/PXNkk0X9XRaXQCOD+SKXvE1rVka+Q/fg2R9fdr1Akxjs4Phq4rBOwiCv9o /Nzh+xgMM= Received: from bogon.bytedance.net (unknown [120.52.147.46]) by smtp5 (Coremail) with SMTP id jtKowABXEaSW1lNcujAMAA--.154S9; Fri, 01 Feb 2019 13:18:21 +0800 (CST) From: Fei Li To: qemu-devel@nongnu.org, shirley17fei@gmail.com Date: Fri, 1 Feb 2019 13:18:02 +0800 Message-Id: <20190201051806.53183-8-lifei1214@126.com> X-Mailer: git-send-email 2.17.2 (Apple Git-113) In-Reply-To: <20190201051806.53183-1-lifei1214@126.com> References: <20190201051806.53183-1-lifei1214@126.com> X-CM-TRANSID: jtKowABXEaSW1lNcujAMAA--.154S9 X-Coremail-Antispam: 1Uf129KBjvJXoW7AFyDWr1fKrWxtr1rGw45Wrg_yoW8tFyDpr yDW390qr97Zr1DAws3JayDZr15Zr10qF47CryFy3W8AwnruwsxXrW0ka42gFsIkas5trZ5 ZrWDtFW5G398AFJanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07jp2NtUUUUU= X-Originating-IP: [120.52.147.46] X-CM-SenderInfo: 5olivxarsrkqqrswhudrp/1tbiaR1OIVpD7p5+jgAAsC X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 123.125.50.111 Subject: [Qemu-devel] [PATCH v11 for-4.0 07/11] qemu_thread: supplement error handling for iothread_complete X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Fei Li , Markus Armbruster , Stefan Hajnoczi Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Fei Li For iothread_complete: utilize the existed errp to propagate the error and do the corresponding cleanup to replace the temporary &error_abort. Cc: Markus Armbruster Cc: Stefan Hajnoczi Cc: Eric Blake Signed-off-by: Fei Li Reviewed-by: Markus Armbruster --- iothread.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/iothread.c b/iothread.c index 8e8aa01999..ea2e553dc5 100644 --- a/iothread.c +++ b/iothread.c @@ -148,6 +148,7 @@ static void iothread_complete(UserCreatable *obj, Error **errp) Error *local_error = NULL; IOThread *iothread = IOTHREAD(obj); char *name, *thread_name; + int thread_ok; iothread->stopping = false; iothread->running = true; @@ -164,9 +165,7 @@ static void iothread_complete(UserCreatable *obj, Error **errp) &local_error); if (local_error) { error_propagate(errp, local_error); - aio_context_unref(iothread->ctx); - iothread->ctx = NULL; - return; + goto fail; } qemu_mutex_init(&iothread->init_done_lock); @@ -178,11 +177,15 @@ static void iothread_complete(UserCreatable *obj, Error **errp) */ name = object_get_canonical_path_component(OBJECT(obj)); thread_name = g_strdup_printf("IO %s", name); - /* TODO: let the further caller handle the error instead of abort() here */ - qemu_thread_create(&iothread->thread, thread_name, iothread_run, - iothread, QEMU_THREAD_JOINABLE, &error_abort); + thread_ok = qemu_thread_create(&iothread->thread, thread_name, iothread_run, + iothread, QEMU_THREAD_JOINABLE, errp); g_free(thread_name); g_free(name); + if (thread_ok < 0) { + qemu_cond_destroy(&iothread->init_done_cond); + qemu_mutex_destroy(&iothread->init_done_lock); + goto fail; + } /* Wait for initialization to complete */ qemu_mutex_lock(&iothread->init_done_lock); @@ -191,6 +194,10 @@ static void iothread_complete(UserCreatable *obj, Error **errp) &iothread->init_done_lock); } qemu_mutex_unlock(&iothread->init_done_lock); + return; +fail: + aio_context_unref(iothread->ctx); + iothread->ctx = NULL; } typedef struct { From patchwork Fri Feb 1 05:18:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: fei X-Patchwork-Id: 1034585 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=126.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=126.com header.i=@126.com header.b="QJiRM0j5"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 43rQVp6w3Fz9sDr for ; Fri, 1 Feb 2019 16:23:30 +1100 (AEDT) Received: from localhost ([127.0.0.1]:38947 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpRIX-00073r-0r for incoming@patchwork.ozlabs.org; Fri, 01 Feb 2019 00:23:29 -0500 Received: from eggs.gnu.org ([209.51.188.92]:40415) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpRDr-0003gm-OG for qemu-devel@nongnu.org; Fri, 01 Feb 2019 00:18:40 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gpRDr-0007oj-1n for qemu-devel@nongnu.org; Fri, 01 Feb 2019 00:18:39 -0500 Received: from m50-111.126.com ([123.125.50.111]:54039) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpRDp-0007m9-C0 for qemu-devel@nongnu.org; Fri, 01 Feb 2019 00:18:38 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=126.com; s=s110527; h=From:Subject:Date:Message-Id; bh=jjKsUIJNM4094HGWQP ieIVKma8shr0SWxjRL7GnIcBk=; b=QJiRM0j52cMgXGMR5Iy+RGh06X9bSJUoyJ z43r+5ZPyuRnG0WZIEjfJkm3q3zvCauNC3SLgllpVTwrOHhDVSM7oeCRfTypgqAe p3uNQgetNxHLTOe4HJuRlPU+MSbKojtDa9p5vx0OyQqhIDmd/7tllk2hd3L3c7UV BGek+ZDhI= Received: from bogon.bytedance.net (unknown [120.52.147.46]) by smtp5 (Coremail) with SMTP id jtKowABXEaSW1lNcujAMAA--.154S10; Fri, 01 Feb 2019 13:18:21 +0800 (CST) From: Fei Li To: qemu-devel@nongnu.org, shirley17fei@gmail.com Date: Fri, 1 Feb 2019 13:18:03 +0800 Message-Id: <20190201051806.53183-9-lifei1214@126.com> X-Mailer: git-send-email 2.17.2 (Apple Git-113) In-Reply-To: <20190201051806.53183-1-lifei1214@126.com> References: <20190201051806.53183-1-lifei1214@126.com> X-CM-TRANSID: jtKowABXEaSW1lNcujAMAA--.154S10 X-Coremail-Antispam: 1Uf129KBjvJXoW7Ar47Ww1kKF13uFyxJF43Jrb_yoW8Gryfpr WDCrnxtFZ3Xrn5KrnxJa1vy3WUWF4vqFy3GrZrAa4xJw15tF43XrWUta48ur13ur95XFWf ZF40gF1xuanxJaUanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07jp2NtUUUUU= X-Originating-IP: [120.52.147.46] X-CM-SenderInfo: 5olivxarsrkqqrswhudrp/1tbitR1OIVpD8Tx5ggAAso X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 123.125.50.111 Subject: [Qemu-devel] [PATCH v11 for-4.0 08/11] qemu_thread: supplement error handling for qemu_signalfd_compat X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Markus Armbruster Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Fei Li For qemu_signalfd_compat: set errno, do some cleanup, and return -1 to replace the temporary &error_abort when failing to create sigwait_compat. Cc: Markus Armbruster Cc: Eric Blake Signed-off-by: Fei Li Reviewed-by: Markus Armbruster --- util/compatfd.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/util/compatfd.c b/util/compatfd.c index c3d8448264..9d642475fc 100644 --- a/util/compatfd.c +++ b/util/compatfd.c @@ -71,6 +71,7 @@ static int qemu_signalfd_compat(const sigset_t *mask) struct sigfd_compat_info *info; QemuThread thread; int fds[2]; + int ret; info = malloc(sizeof(*info)); if (info == NULL) { @@ -89,9 +90,15 @@ static int qemu_signalfd_compat(const sigset_t *mask) memcpy(&info->mask, mask, sizeof(*mask)); info->fd = fds[1]; - /* TODO: let the further caller handle the error instead of abort() here */ - qemu_thread_create(&thread, "signalfd_compat", sigwait_compat, - info, QEMU_THREAD_DETACHED, &error_abort); + ret = qemu_thread_create(&thread, "signalfd_compat", sigwait_compat, + info, QEMU_THREAD_DETACHED, NULL); + if (ret < 0) { + close(fds[0]); + close(fds[1]); + free(info); + errno = -ret; + return -1; + } return fds[0]; } From patchwork Fri Feb 1 05:18:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: fei X-Patchwork-Id: 1034578 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=126.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=126.com header.i=@126.com header.b="iBRG4MCd"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 43rQQG4Shpz9s4V for ; Fri, 1 Feb 2019 16:19:34 +1100 (AEDT) Received: from localhost ([127.0.0.1]:38883 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpREi-0003fc-J5 for incoming@patchwork.ozlabs.org; Fri, 01 Feb 2019 00:19:32 -0500 Received: from eggs.gnu.org ([209.51.188.92]:40374) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpRDp-0003fI-1g for qemu-devel@nongnu.org; Fri, 01 Feb 2019 00:18:37 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gpRDo-0007nn-5a for qemu-devel@nongnu.org; Fri, 01 Feb 2019 00:18:37 -0500 Received: from m50-111.126.com ([123.125.50.111]:54057) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpRDl-0007mB-G4 for qemu-devel@nongnu.org; Fri, 01 Feb 2019 00:18:34 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=126.com; s=s110527; h=From:Subject:Date:Message-Id; bh=He9kPS0ctQYpc0HaGI VXNkTsTzSZaSaUV20E+jss/1U=; b=iBRG4MCdY2k0IplIdpLmPQGqLdoirY3hyI DA8z92GRf9JZvKKHtsFEYh3zLaVgCmqqxf59/K+OhyskQzAVkSwrFsa96s3zt2EH Pdtujy4pY5iu3t56Hco5ET5DKDtefj79a3z7UrI2pl0HKx1PUOZLsj73N5eiI8Pd 1h4zpWW7c= Received: from bogon.bytedance.net (unknown [120.52.147.46]) by smtp5 (Coremail) with SMTP id jtKowABXEaSW1lNcujAMAA--.154S12; Fri, 01 Feb 2019 13:18:21 +0800 (CST) From: Fei Li To: qemu-devel@nongnu.org, shirley17fei@gmail.com Date: Fri, 1 Feb 2019 13:18:05 +0800 Message-Id: <20190201051806.53183-11-lifei1214@126.com> X-Mailer: git-send-email 2.17.2 (Apple Git-113) In-Reply-To: <20190201051806.53183-1-lifei1214@126.com> References: <20190201051806.53183-1-lifei1214@126.com> X-CM-TRANSID: jtKowABXEaSW1lNcujAMAA--.154S12 X-Coremail-Antispam: 1Uf129KBjvJXoW7Zw48Kw13JFWxWryfZw45trb_yoW8tFW5pr yrGry3Ars5twn7ZrW8JayjkFy5urWrGFW7JayfAw1rJw45GrsxA34rKa40vrW8Z3W3Xa1F vF4rWrWIkws2yaUanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07jpVbkUUUUU= X-Originating-IP: [120.52.147.46] X-CM-SenderInfo: 5olivxarsrkqqrswhudrp/1tbiaA5OIVpD7wjdsAABsb X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 123.125.50.111 Subject: [Qemu-devel] [PATCH v11 for-4.0 10/11] qemu_thread: supplement error handling for vnc_start_worker_thread X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Fei Li , Markus Armbruster , Gerd Hoffmann Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Fei Li Supplement the error handling for vnc_thread_worker_thread: add an Error parameter for it to propagate the error to its caller to handle in case it fails, and make it return a Boolean to indicate whether it succeeds. Cc: Markus Armbruster Cc: Gerd Hoffmann Signed-off-by: Fei Li Reviewed-by: Markus Armbruster --- ui/vnc-jobs.c | 17 +++++++++++------ ui/vnc-jobs.h | 2 +- ui/vnc.c | 4 +++- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/ui/vnc-jobs.c b/ui/vnc-jobs.c index 5712f1f501..1371895513 100644 --- a/ui/vnc-jobs.c +++ b/ui/vnc-jobs.c @@ -332,16 +332,21 @@ static bool vnc_worker_thread_running(void) return queue; /* Check global queue */ } -void vnc_start_worker_thread(void) +bool vnc_start_worker_thread(Error **errp) { VncJobQueue *q; - if (vnc_worker_thread_running()) - return ; + if (vnc_worker_thread_running()) { + return true; + } q = vnc_queue_init(); - /* TODO: let the further caller handle the error instead of abort() here */ - qemu_thread_create(&q->thread, "vnc_worker", vnc_worker_thread, - q, QEMU_THREAD_DETACHED, &error_abort); + if (qemu_thread_create(&q->thread, "vnc_worker", vnc_worker_thread, + q, QEMU_THREAD_DETACHED, errp) < 0) { + vnc_queue_clear(q); + return false; + } queue = q; /* Set global queue */ + + return true; } diff --git a/ui/vnc-jobs.h b/ui/vnc-jobs.h index 59f66bcc35..14640593db 100644 --- a/ui/vnc-jobs.h +++ b/ui/vnc-jobs.h @@ -37,7 +37,7 @@ void vnc_job_push(VncJob *job); void vnc_jobs_join(VncState *vs); void vnc_jobs_consume_buffer(VncState *vs); -void vnc_start_worker_thread(void); +bool vnc_start_worker_thread(Error **errp); /* Locks */ static inline int vnc_trylock_display(VncDisplay *vd) diff --git a/ui/vnc.c b/ui/vnc.c index 6002d09407..2ab920f1a7 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -3255,7 +3255,9 @@ void vnc_display_init(const char *id, Error **errp) vd->connections_limit = 32; qemu_mutex_init(&vd->mutex); - vnc_start_worker_thread(); + if (!vnc_start_worker_thread(errp)) { + return; + } vd->dcl.ops = &dcl_ops; register_displaychangelistener(&vd->dcl);