From patchwork Wed Aug 10 12:48:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Patchwork-Id: 12940530 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id CF69FC00140 for ; Wed, 10 Aug 2022 12:57:58 +0000 (UTC) Received: from localhost ([::1]:60864 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oLlHZ-0008W9-TI for qemu-devel@archiver.kernel.org; Wed, 10 Aug 2022 08:57:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46596) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLl96-0001P6-Da for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:49:12 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]:24973) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLl95-0007P8-1N for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:49:12 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1660135750; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=K7B8zoi12JI7J5DVOiEMpNRxnLo9t28miZfDuM0uHiM=; b=VVJGQ942dfmYwv9uC/V2N7wi+FqlJ4rpwV1FT6U86IHSnSv+iNcgqTFI+XMSQ2CVI3d//s +kCMM1qTGYda0TixI11kLpY0FY6OSXN1JxqMls4l5Ot+lvBNhCKAxFHkoc8hhL8AhbqMlZ Rsz1jhgDWQy5Y8wr6lAZZS6GfT06pM8= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-141-Wllek6EXMy-sRqS6MDmQkQ-1; Wed, 10 Aug 2022 08:49:09 -0400 X-MC-Unique: Wllek6EXMy-sRqS6MDmQkQ-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 8FE133C10237; Wed, 10 Aug 2022 12:49:08 +0000 (UTC) Received: from localhost (unknown [10.39.208.40]) by smtp.corp.redhat.com (Postfix) with ESMTP id ABBEA9457F; Wed, 10 Aug 2022 12:49:07 +0000 (UTC) From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Cc: Markus Armbruster , Peter Maydell , Cleber Rosa , Michael Roth , John Snow , Xie Yongji , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Subject: [PATCH v3 01/16] error-report: misc comment fix Date: Wed, 10 Aug 2022 16:48:42 +0400 Message-Id: <20220810124857.1360211-2-marcandre.lureau@redhat.com> In-Reply-To: <20220810124857.1360211-1-marcandre.lureau@redhat.com> References: <20220810124857.1360211-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -28 X-Spam_score: -2.9 X-Spam_bar: -- X-Spam_report: (-2.9 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau Missed in commit beeb175c0d "util/qemu-error: Rename error_print_loc() to be more generic". Signed-off-by: Marc-André Lureau Reviewed-by: Markus Armbruster --- util/error-report.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/error-report.c b/util/error-report.c index 5edb2e6040..98f242b75b 100644 --- a/util/error-report.c +++ b/util/error-report.c @@ -390,7 +390,7 @@ void error_init(const char *argv0) { const char *p = strrchr(argv0, '/'); - /* Set the program name for error_print_loc(). */ + /* Set the program name for print_loc(). */ g_set_prgname(p ? p + 1 : argv0); /* From patchwork Wed Aug 10 12:48:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Patchwork-Id: 12940524 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4432AC00140 for ; Wed, 10 Aug 2022 12:53:51 +0000 (UTC) Received: from localhost ([::1]:54974 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oLlDa-0004Pv-6P for qemu-devel@archiver.kernel.org; Wed, 10 Aug 2022 08:53:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46610) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLl9B-0001RK-RB for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:49:17 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]:37451) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLl9A-0007QV-Bn for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:49:17 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1660135754; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=sSNnN7KvI9Po+0yP7BBZfjJSmlgmgIp1lOfe8H0psuk=; b=U9PB/wQHo0x+gHlqhVHbUtGZVeMhzBUbKRHWI9biNo/af527IkkdUDtXP9szZnb/3K9cP2 V6YYIG5yssF4BFHPWYOG++o3NoxsL9UnBQCS4PZORypgrdLKYTu+jx+ycQjaLlku5hrOCz vnF2R0BmMEQFyVkIpKFCBGTxQjKz718= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-339-TqtXslJeMMuNiU-0Rr_zXg-1; Wed, 10 Aug 2022 08:49:13 -0400 X-MC-Unique: TqtXslJeMMuNiU-0Rr_zXg-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 087311C13959; Wed, 10 Aug 2022 12:49:13 +0000 (UTC) Received: from localhost (unknown [10.39.208.40]) by smtp.corp.redhat.com (Postfix) with ESMTP id CBC7F18EAA; Wed, 10 Aug 2022 12:49:11 +0000 (UTC) From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Cc: Markus Armbruster , Peter Maydell , Cleber Rosa , Michael Roth , John Snow , Xie Yongji , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Subject: [PATCH v3 02/16] error-report: introduce "detailed" variable Date: Wed, 10 Aug 2022 16:48:43 +0400 Message-Id: <20220810124857.1360211-3-marcandre.lureau@redhat.com> In-Reply-To: <20220810124857.1360211-1-marcandre.lureau@redhat.com> References: <20220810124857.1360211-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -28 X-Spam_score: -2.9 X-Spam_bar: -- X-Spam_report: (-2.9 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau Let's use a more explicit variable "detailed" instead of calling monitor_cur() multiple times. Signed-off-by: Marc-André Lureau Reviewed-by: Markus Armbruster --- util/error-report.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/util/error-report.c b/util/error-report.c index 98f242b75b..893da10f19 100644 --- a/util/error-report.c +++ b/util/error-report.c @@ -195,16 +195,17 @@ real_time_iso8601(void) */ static void vreport(report_type type, const char *fmt, va_list ap) { + bool detailed = !monitor_cur(); gchar *timestr; - if (message_with_timestamp && !monitor_cur()) { + if (message_with_timestamp && detailed) { timestr = real_time_iso8601(); error_printf("%s ", timestr); g_free(timestr); } /* Only prepend guest name if -msg guest-name and -name guest=... are set */ - if (error_with_guestname && error_guest_name && !monitor_cur()) { + if (error_with_guestname && error_guest_name && detailed) { error_printf("%s ", error_guest_name); } From patchwork Wed Aug 10 12:48:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Patchwork-Id: 12940540 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 922C6C00140 for ; Wed, 10 Aug 2022 13:02:40 +0000 (UTC) Received: from localhost ([::1]:40864 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oLlM6-0006E6-S7 for qemu-devel@archiver.kernel.org; Wed, 10 Aug 2022 09:02:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46626) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLl9F-0001TA-PV for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:49:27 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:43168) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLl9E-0007Qg-AY for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:49:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1660135759; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=gQ8uwmvbN+N0hbjJdePDsMSmyYDI/eQHq0gIKAefHZA=; b=QkEhQt6yUUqMIIghnMKrQ12foMNIf9DZx92umeibMulU97Q1W0Xuy/kNievkHR/oFwnE0P T3CKDt75ReuUWVEom67KhZTlMgIsLhGf6ZhTr81rbNXvnAeUUXKNjRpogeCJb3VZmdBREj 1VpY4kNHs8A2eeqLEyhzEoqfoda76Gc= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-600-vTE-6rS1N7KIhdKqfWAl9Q-1; Wed, 10 Aug 2022 08:49:18 -0400 X-MC-Unique: vTE-6rS1N7KIhdKqfWAl9Q-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id B7D98805B9A; Wed, 10 Aug 2022 12:49:17 +0000 (UTC) Received: from localhost (unknown [10.39.208.40]) by smtp.corp.redhat.com (Postfix) with ESMTP id C64182166B2A; Wed, 10 Aug 2022 12:49:16 +0000 (UTC) From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Cc: Markus Armbruster , Peter Maydell , Cleber Rosa , Michael Roth , John Snow , Xie Yongji , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Subject: [PATCH v3 03/16] error-report: simplify print_loc() Date: Wed, 10 Aug 2022 16:48:44 +0400 Message-Id: <20220810124857.1360211-4-marcandre.lureau@redhat.com> In-Reply-To: <20220810124857.1360211-1-marcandre.lureau@redhat.com> References: <20220810124857.1360211-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau Pass the program name as "prefix" argument to print_loc() if printing with "details". This allows to get rid of monitor_cur() call in print_loc(). Signed-off-by: Marc-André Lureau Reviewed-by: Markus Armbruster --- util/error-report.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/util/error-report.c b/util/error-report.c index 893da10f19..c43227a975 100644 --- a/util/error-report.c +++ b/util/error-report.c @@ -138,14 +138,14 @@ void loc_set_file(const char *fname, int lno) /* * Print current location to current monitor if we have one, else to stderr. */ -static void print_loc(void) +static void print_loc(const char *prefix) { const char *sep = ""; int i; const char *const *argp; - if (!monitor_cur() && g_get_prgname()) { - error_printf("%s:", g_get_prgname()); + if (prefix) { + error_printf("%s:", prefix); sep = " "; } switch (cur_loc->kind) { @@ -209,7 +209,7 @@ static void vreport(report_type type, const char *fmt, va_list ap) error_printf("%s ", error_guest_name); } - print_loc(); + print_loc(detailed ? g_get_prgname() : NULL); switch (type) { case REPORT_TYPE_ERROR: From patchwork Wed Aug 10 12:48:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Patchwork-Id: 12940531 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 25905C28B2C for ; Wed, 10 Aug 2022 12:58:31 +0000 (UTC) Received: from localhost ([::1]:35058 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oLlI6-0001my-7j for qemu-devel@archiver.kernel.org; Wed, 10 Aug 2022 08:58:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46654) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLl9P-0001UR-0z for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:49:31 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]:27944) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLl9M-0007R0-1f for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:49:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1660135767; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=xImcu8ZCziC7hkqoAXbEBH3kFR+44uOY0ZL6xcX76ZU=; b=DXshoQFPgP4bFHLuHJBNQtuHeVjX8yQI9sCwrUHAXgNtGgO6PHEIuj3wc5Nw1+niE4SrZt ZlyuGxuV7+LLVoh9rW1TdjZmftYtZ/5JLYZoTTrSv16ELIck41vRMz5AV0yBYjn7MUSrJd ZcbsCi05YiJxMtlocNrByADoSKQBZQk= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-473-U3qVVv03NJ2dKdiDJdRIZw-1; Wed, 10 Aug 2022 08:49:22 -0400 X-MC-Unique: U3qVVv03NJ2dKdiDJdRIZw-1 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 2F1CD8032F6; Wed, 10 Aug 2022 12:49:22 +0000 (UTC) Received: from localhost (unknown [10.39.208.40]) by smtp.corp.redhat.com (Postfix) with ESMTP id 020E3492CA4; Wed, 10 Aug 2022 12:49:20 +0000 (UTC) From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Cc: Markus Armbruster , Peter Maydell , Cleber Rosa , Michael Roth , John Snow , Xie Yongji , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Subject: [PATCH v3 04/16] error-report: introduce overridable error_is_detailed() Date: Wed, 10 Aug 2022 16:48:45 +0400 Message-Id: <20220810124857.1360211-5-marcandre.lureau@redhat.com> In-Reply-To: <20220810124857.1360211-1-marcandre.lureau@redhat.com> References: <20220810124857.1360211-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.9 Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -28 X-Spam_score: -2.9 X-Spam_bar: -- X-Spam_report: (-2.9 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau Remove the direct dependency from error-report to monitor code. This will allow to move error-report to a subproject. Signed-off-by: Marc-André Lureau Reviewed-by: Markus Armbruster Reviewed-by: Warner Losh --- include/qemu/error-report.h | 2 ++ softmmu/vl.c | 5 +++++ stubs/error-is-detailed.c | 7 +++++++ util/error-report.c | 3 +-- stubs/meson.build | 1 + 5 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 stubs/error-is-detailed.c diff --git a/include/qemu/error-report.h b/include/qemu/error-report.h index 3ae2357fda..6ab25d4583 100644 --- a/include/qemu/error-report.h +++ b/include/qemu/error-report.h @@ -30,6 +30,8 @@ void loc_set_none(void); void loc_set_cmdline(char **argv, int idx, int cnt); void loc_set_file(const char *fname, int lno); +bool error_is_detailed(void); + int error_vprintf(const char *fmt, va_list ap) G_GNUC_PRINTF(1, 0); int error_printf(const char *fmt, ...) G_GNUC_PRINTF(1, 2); diff --git a/softmmu/vl.c b/softmmu/vl.c index 706bd7cff7..069ea50bed 100644 --- a/softmmu/vl.c +++ b/softmmu/vl.c @@ -2603,6 +2603,11 @@ void qmp_x_exit_preconfig(Error **errp) } } +bool error_is_detailed(void) +{ + return !monitor_cur(); +} + void qemu_init(int argc, char **argv, char **envp) { QemuOpts *opts; diff --git a/stubs/error-is-detailed.c b/stubs/error-is-detailed.c new file mode 100644 index 0000000000..c47cd23693 --- /dev/null +++ b/stubs/error-is-detailed.c @@ -0,0 +1,7 @@ +#include "qemu/osdep.h" +#include "qemu/error-report.h" + +bool error_is_detailed(void) +{ + return TRUE; +} diff --git a/util/error-report.c b/util/error-report.c index c43227a975..4d1d66fc06 100644 --- a/util/error-report.c +++ b/util/error-report.c @@ -11,7 +11,6 @@ */ #include "qemu/osdep.h" -#include "monitor/monitor.h" #include "qemu/error-report.h" /* @@ -195,7 +194,7 @@ real_time_iso8601(void) */ static void vreport(report_type type, const char *fmt, va_list ap) { - bool detailed = !monitor_cur(); + bool detailed = error_is_detailed(); gchar *timestr; if (message_with_timestamp && detailed) { diff --git a/stubs/meson.build b/stubs/meson.build index d8f3fd5c44..0f3a782824 100644 --- a/stubs/meson.build +++ b/stubs/meson.build @@ -9,6 +9,7 @@ stub_ss.add(files('cpus-get-virtual-clock.c')) stub_ss.add(files('qemu-timer-notify-cb.c')) stub_ss.add(files('icount.c')) stub_ss.add(files('dump.c')) +stub_ss.add(files('error-is-detailed.c')) stub_ss.add(files('error-printf.c')) stub_ss.add(files('fdset.c')) stub_ss.add(files('gdbstub.c')) From patchwork Wed Aug 10 12:48:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Patchwork-Id: 12940526 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4E216C00140 for ; Wed, 10 Aug 2022 12:54:09 +0000 (UTC) Received: from localhost ([::1]:55418 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oLlDs-0004i0-EC for qemu-devel@archiver.kernel.org; Wed, 10 Aug 2022 08:54:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46688) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLl9T-0001cc-05 for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:49:35 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:55372) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLl9R-0007RE-Jp for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:49:34 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1660135773; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=xEoGBy9P7lkRCQLvKuZBgrXNasRnSsfVgx1nyigxT1g=; b=A54opmS+aDFqZj8ByrZn0ELEPiWpikDdHNat8C67LuOZdEkpr7tztPOY9PxnTB8NlgN07e 38LLlq5PPzHK6ygLKlGbXlRhvW95eONdixzf6jiWg4STqDpWd5BmJstrtIJYYpeiqVdXGL Esb2OeRYEAr/PMg6mCMPRINgYdqcKiQ= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-302-dM6kGSguP3OBZIwapYKf5Q-1; Wed, 10 Aug 2022 08:49:27 -0400 X-MC-Unique: dM6kGSguP3OBZIwapYKf5Q-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id ED5FD805B72; Wed, 10 Aug 2022 12:49:26 +0000 (UTC) Received: from localhost (unknown [10.39.208.40]) by smtp.corp.redhat.com (Postfix) with ESMTP id E2BE994585; Wed, 10 Aug 2022 12:49:25 +0000 (UTC) From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Cc: Markus Armbruster , Peter Maydell , Cleber Rosa , Michael Roth , John Snow , Xie Yongji , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Subject: [PATCH v3 05/16] stubs: remove needless error_vprintf_unless_qmp() Date: Wed, 10 Aug 2022 16:48:46 +0400 Message-Id: <20220810124857.1360211-6-marcandre.lureau@redhat.com> In-Reply-To: <20220810124857.1360211-1-marcandre.lureau@redhat.com> References: <20220810124857.1360211-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau Signed-off-by: Marc-André Lureau Reviewed-by: Markus Armbruster --- stubs/error-printf.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/stubs/error-printf.c b/stubs/error-printf.c index 0e326d8010..1afa0f62ca 100644 --- a/stubs/error-printf.c +++ b/stubs/error-printf.c @@ -16,8 +16,3 @@ int error_vprintf(const char *fmt, va_list ap) } return vfprintf(stderr, fmt, ap); } - -int error_vprintf_unless_qmp(const char *fmt, va_list ap) -{ - return error_vprintf(fmt, ap); -} From patchwork Wed Aug 10 12:48:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Patchwork-Id: 12940533 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1DB96C25B0D for ; Wed, 10 Aug 2022 12:58:36 +0000 (UTC) Received: from localhost ([::1]:35488 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oLlIB-00024a-4Y for qemu-devel@archiver.kernel.org; Wed, 10 Aug 2022 08:58:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46698) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLl9T-0001di-PF for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:49:36 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]:29799) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLl9R-0007RH-SR for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:49:35 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1660135773; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=s2PfwAuutwAKnpypBFRb1CerbqElSAVHx5Gghw+w17c=; b=EUHVeVogPY1djTHhpXzIbs/yeiqcz6CmlbrmREiumEqr3MHYqGXdwGGY8wzUXcvcifbYI9 CQJ+uNZE08R2z4FcR1SMKKZotw4RbaFsmP6/QDq2znK21HTb8L2iYvv8eJFdiB4Nspi4zs 9/i0prPsO0huZiCmMQzMNOxO5XYdVeg= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-335-w7ixzOknMbWxIOceRfL8UA-1; Wed, 10 Aug 2022 08:49:32 -0400 X-MC-Unique: w7ixzOknMbWxIOceRfL8UA-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id BD4ED103942C; Wed, 10 Aug 2022 12:49:31 +0000 (UTC) Received: from localhost (unknown [10.39.208.40]) by smtp.corp.redhat.com (Postfix) with ESMTP id 50A9140315E; Wed, 10 Aug 2022 12:49:30 +0000 (UTC) From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Cc: Markus Armbruster , Peter Maydell , Cleber Rosa , Michael Roth , John Snow , Xie Yongji , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Subject: [PATCH v3 06/16] qapi: move QEMU-specific dispatch code in monitor Date: Wed, 10 Aug 2022 16:48:47 +0400 Message-Id: <20220810124857.1360211-7-marcandre.lureau@redhat.com> In-Reply-To: <20220810124857.1360211-1-marcandre.lureau@redhat.com> References: <20220810124857.1360211-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -28 X-Spam_score: -2.9 X-Spam_bar: -- X-Spam_report: (-2.9 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau Make QMP-dispatch code free from QEMU-specific OOB dispatch/async coroutine handling. This will allow to move the base code to qemu-common, and clear other users from potential mis-ususe (QGA doesn't have OOB or coroutines). Introduce an overridable qmp_dispatch_exec() function, with a default a stub implementation, while the oob & coroutine dispatch logic is moved to monitor/qmp.c. Signed-off-by: Marc-André Lureau --- include/qapi/qmp/dispatch.h | 3 ++ monitor/qmp.c | 63 +++++++++++++++++++++++++++++++++++++ qapi/qmp-dispatch.c | 60 +---------------------------------- stubs/qmp-dispatch-exec.c | 8 +++++ stubs/meson.build | 1 + 5 files changed, 76 insertions(+), 59 deletions(-) create mode 100644 stubs/qmp-dispatch-exec.c diff --git a/include/qapi/qmp/dispatch.h b/include/qapi/qmp/dispatch.h index 1e4240fd0d..6941a759a7 100644 --- a/include/qapi/qmp/dispatch.h +++ b/include/qapi/qmp/dispatch.h @@ -41,6 +41,9 @@ typedef struct QmpCommand typedef QTAILQ_HEAD(QmpCommandList, QmpCommand) QmpCommandList; +void qmp_dispatch_exec(const QmpCommand *cmd, bool oob, Monitor *cur_mon, + QDict *args, QObject **ret, Error **err); + void qmp_register_command(QmpCommandList *cmds, const char *name, QmpCommandFunc *fn, QmpCommandOptions options, unsigned special_features); diff --git a/monitor/qmp.c b/monitor/qmp.c index 092c527b6f..b9b109a40a 100644 --- a/monitor/qmp.c +++ b/monitor/qmp.c @@ -132,6 +132,69 @@ static void monitor_qmp_respond(MonitorQMP *mon, QDict *rsp) } } +typedef struct QmpDispatchBH { + const QmpCommand *cmd; + Monitor *cur_mon; + QDict *args; + QObject **ret; + Error **errp; + Coroutine *co; +} QmpDispatchBH; + +static void do_qmp_dispatch_bh(void *opaque) +{ + QmpDispatchBH *data = opaque; + + assert(monitor_cur() == NULL); + monitor_set_cur(qemu_coroutine_self(), data->cur_mon); + data->cmd->fn(data->args, data->ret, data->errp); + monitor_set_cur(qemu_coroutine_self(), NULL); + aio_co_wake(data->co); +} + +/* + * Runs outside of coroutine context for OOB commands, but in coroutine + * context for everything else. + */ +void qmp_dispatch_exec(const QmpCommand *cmd, bool oob, Monitor *cur_mon, + QDict *args, QObject **ret, Error **errp) +{ + assert(!(oob && qemu_in_coroutine())); + assert(monitor_cur() == NULL); + + if (!!(cmd->options & QCO_COROUTINE) == qemu_in_coroutine()) { + monitor_set_cur(qemu_coroutine_self(), cur_mon); + cmd->fn(args, ret, errp); + monitor_set_cur(qemu_coroutine_self(), NULL); + } else { + /* + * Actual context doesn't match the one the command needs. + * + * Case 1: we are in coroutine context, but command does not + * have QCO_COROUTINE. We need to drop out of coroutine + * context for executing it. + * + * Case 2: we are outside coroutine context, but command has + * QCO_COROUTINE. Can't actually happen, because we get here + * outside coroutine context only when executing a command + * out of band, and OOB commands never have QCO_COROUTINE. + */ + assert(!oob && qemu_in_coroutine() && !(cmd->options & QCO_COROUTINE)); + + QmpDispatchBH data = { + .cur_mon = cur_mon, + .cmd = cmd, + .args = args, + .ret = ret, + .errp = errp, + .co = qemu_coroutine_self(), + }; + aio_bh_schedule_oneshot(qemu_get_aio_context(), do_qmp_dispatch_bh, + &data); + qemu_coroutine_yield(); + } +} + /* * Runs outside of coroutine context for OOB commands, but in * coroutine context for everything else. diff --git a/qapi/qmp-dispatch.c b/qapi/qmp-dispatch.c index 0990873ec8..bec07e4958 100644 --- a/qapi/qmp-dispatch.c +++ b/qapi/qmp-dispatch.c @@ -13,7 +13,6 @@ #include "qemu/osdep.h" -#include "block/aio.h" #include "qapi/compat-policy.h" #include "qapi/error.h" #include "qapi/qmp/dispatch.h" @@ -22,8 +21,6 @@ #include "qapi/qobject-input-visitor.h" #include "qapi/qobject-output-visitor.h" #include "qapi/qmp/qbool.h" -#include "qemu/coroutine.h" -#include "qemu/main-loop.h" Visitor *qobject_input_visitor_new_qmp(QObject *obj) { @@ -110,30 +107,6 @@ bool qmp_is_oob(const QDict *dict) && !qdict_haskey(dict, "execute"); } -typedef struct QmpDispatchBH { - const QmpCommand *cmd; - Monitor *cur_mon; - QDict *args; - QObject **ret; - Error **errp; - Coroutine *co; -} QmpDispatchBH; - -static void do_qmp_dispatch_bh(void *opaque) -{ - QmpDispatchBH *data = opaque; - - assert(monitor_cur() == NULL); - monitor_set_cur(qemu_coroutine_self(), data->cur_mon); - data->cmd->fn(data->args, data->ret, data->errp); - monitor_set_cur(qemu_coroutine_self(), NULL); - aio_co_wake(data->co); -} - -/* - * Runs outside of coroutine context for OOB commands, but in coroutine - * context for everything else. - */ QDict *qmp_dispatch(const QmpCommandList *cmds, QObject *request, bool allow_oob, Monitor *cur_mon) { @@ -203,39 +176,8 @@ QDict *qmp_dispatch(const QmpCommandList *cmds, QObject *request, qobject_ref(args); } - assert(!(oob && qemu_in_coroutine())); - assert(monitor_cur() == NULL); - if (!!(cmd->options & QCO_COROUTINE) == qemu_in_coroutine()) { - monitor_set_cur(qemu_coroutine_self(), cur_mon); - cmd->fn(args, &ret, &err); - monitor_set_cur(qemu_coroutine_self(), NULL); - } else { - /* - * Actual context doesn't match the one the command needs. - * - * Case 1: we are in coroutine context, but command does not - * have QCO_COROUTINE. We need to drop out of coroutine - * context for executing it. - * - * Case 2: we are outside coroutine context, but command has - * QCO_COROUTINE. Can't actually happen, because we get here - * outside coroutine context only when executing a command - * out of band, and OOB commands never have QCO_COROUTINE. - */ - assert(!oob && qemu_in_coroutine() && !(cmd->options & QCO_COROUTINE)); + qmp_dispatch_exec(cmd, oob, cur_mon, args, &ret, &err); - QmpDispatchBH data = { - .cur_mon = cur_mon, - .cmd = cmd, - .args = args, - .ret = &ret, - .errp = &err, - .co = qemu_coroutine_self(), - }; - aio_bh_schedule_oneshot(qemu_get_aio_context(), do_qmp_dispatch_bh, - &data); - qemu_coroutine_yield(); - } qobject_unref(args); if (err) { /* or assert(!ret) after reviewing all handlers: */ diff --git a/stubs/qmp-dispatch-exec.c b/stubs/qmp-dispatch-exec.c new file mode 100644 index 0000000000..4aef28d198 --- /dev/null +++ b/stubs/qmp-dispatch-exec.c @@ -0,0 +1,8 @@ +#include "qemu/osdep.h" +#include "qapi/qmp/dispatch.h" + +void qmp_dispatch_exec(const QmpCommand *cmd, bool oob, Monitor *cur_mon, + QDict *args, QObject **ret, Error **err) +{ + cmd->fn(args, ret, err); +} diff --git a/stubs/meson.build b/stubs/meson.build index 0f3a782824..14548633b0 100644 --- a/stubs/meson.build +++ b/stubs/meson.build @@ -32,6 +32,7 @@ stub_ss.add(files('monitor.c')) stub_ss.add(files('monitor-core.c')) stub_ss.add(files('qemu-timer-notify-cb.c')) stub_ss.add(files('qmp_memory_device.c')) +stub_ss.add(files('qmp-dispatch-exec.c')) stub_ss.add(files('qmp-command-available.c')) stub_ss.add(files('qmp-quit.c')) stub_ss.add(files('qtest.c')) From patchwork Wed Aug 10 12:48:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Patchwork-Id: 12940542 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 29458C25B06 for ; Wed, 10 Aug 2022 13:04:43 +0000 (UTC) Received: from localhost ([::1]:43786 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oLlO6-0008GL-7Y for qemu-devel@archiver.kernel.org; Wed, 10 Aug 2022 09:04:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46734) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLl9Z-0001go-AP for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:49:41 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:41582) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLl9X-0007Rv-MW for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:49:41 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1660135779; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=hrfDTuWUgST19eVeDMl7zAEG1isktyWLHIrGlJyRbsM=; b=hXLakgPI1WMnnB3KSpu+dZN61GYmhPDfA3b5XFDl64pZvoaY+EJ2AEnXBt/WrjMz3mFTaB XBqjrlywe3YtbXHkVAkNGqJIclfgysMs9Lvv0TmHh9OZ6adglN22IaJ4dXLSRp0LBlyrvJ RZU4V4Nt00ODZi5ofhpOdPQ8JIQ5ypQ= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-552-TkR5iolJMRWwUe88HJSJbA-1; Wed, 10 Aug 2022 08:49:37 -0400 X-MC-Unique: TkR5iolJMRWwUe88HJSJbA-1 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 19BC31C16B4B; Wed, 10 Aug 2022 12:49:37 +0000 (UTC) Received: from localhost (unknown [10.39.208.40]) by smtp.corp.redhat.com (Postfix) with ESMTP id E26C4492C3B; Wed, 10 Aug 2022 12:49:35 +0000 (UTC) From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Cc: Markus Armbruster , Peter Maydell , Cleber Rosa , Michael Roth , John Snow , Xie Yongji , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Subject: [PATCH v3 07/16] qapi: remove QEMU-specific monitor dependency from dispatch Date: Wed, 10 Aug 2022 16:48:48 +0400 Message-Id: <20220810124857.1360211-8-marcandre.lureau@redhat.com> In-Reply-To: <20220810124857.1360211-1-marcandre.lureau@redhat.com> References: <20220810124857.1360211-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.9 Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau The monitor is specific to QEMU. Instead of passing a Monitor type argument to the exec handler, use a generic void* pointer. This simplify also the unit dependency, as now the dispatching code is free from QEMU-specifics. Signed-off-by: Marc-André Lureau --- include/qapi/qmp/dispatch.h | 5 ++--- monitor/qmp.c | 3 ++- qapi/qmp-dispatch.c | 4 ++-- stubs/qmp-dispatch-exec.c | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/include/qapi/qmp/dispatch.h b/include/qapi/qmp/dispatch.h index 6941a759a7..ee8a05015a 100644 --- a/include/qapi/qmp/dispatch.h +++ b/include/qapi/qmp/dispatch.h @@ -14,7 +14,6 @@ #ifndef QAPI_QMP_DISPATCH_H #define QAPI_QMP_DISPATCH_H -#include "monitor/monitor.h" #include "qemu/queue.h" typedef void (QmpCommandFunc)(QDict *, QObject **, Error **); @@ -41,7 +40,7 @@ typedef struct QmpCommand typedef QTAILQ_HEAD(QmpCommandList, QmpCommand) QmpCommandList; -void qmp_dispatch_exec(const QmpCommand *cmd, bool oob, Monitor *cur_mon, +void qmp_dispatch_exec(const QmpCommand *cmd, bool oob, void *exec_data, QDict *args, QObject **ret, Error **err); void qmp_register_command(QmpCommandList *cmds, const char *name, @@ -59,7 +58,7 @@ const char *qmp_command_name(const QmpCommand *cmd); bool qmp_has_success_response(const QmpCommand *cmd); QDict *qmp_error_response(Error *err); QDict *qmp_dispatch(const QmpCommandList *cmds, QObject *request, - bool allow_oob, Monitor *cur_mon); + bool allow_oob, void *exec_data); bool qmp_is_oob(const QDict *dict); typedef void (*qmp_cmd_callback_fn)(const QmpCommand *cmd, void *opaque); diff --git a/monitor/qmp.c b/monitor/qmp.c index b9b109a40a..4f0eb6e200 100644 --- a/monitor/qmp.c +++ b/monitor/qmp.c @@ -156,9 +156,10 @@ static void do_qmp_dispatch_bh(void *opaque) * Runs outside of coroutine context for OOB commands, but in coroutine * context for everything else. */ -void qmp_dispatch_exec(const QmpCommand *cmd, bool oob, Monitor *cur_mon, +void qmp_dispatch_exec(const QmpCommand *cmd, bool oob, void *exec_data, QDict *args, QObject **ret, Error **errp) { + Monitor *cur_mon = exec_data; assert(!(oob && qemu_in_coroutine())); assert(monitor_cur() == NULL); diff --git a/qapi/qmp-dispatch.c b/qapi/qmp-dispatch.c index bec07e4958..2fea789fd3 100644 --- a/qapi/qmp-dispatch.c +++ b/qapi/qmp-dispatch.c @@ -108,7 +108,7 @@ bool qmp_is_oob(const QDict *dict) } QDict *qmp_dispatch(const QmpCommandList *cmds, QObject *request, - bool allow_oob, Monitor *cur_mon) + bool allow_oob, void *exec_data) { Error *err = NULL; bool oob; @@ -176,7 +176,7 @@ QDict *qmp_dispatch(const QmpCommandList *cmds, QObject *request, qobject_ref(args); } - qmp_dispatch_exec(cmd, oob, cur_mon, args, &ret, &err); + qmp_dispatch_exec(cmd, oob, exec_data, args, &ret, &err); qobject_unref(args); if (err) { diff --git a/stubs/qmp-dispatch-exec.c b/stubs/qmp-dispatch-exec.c index 4aef28d198..4740f55222 100644 --- a/stubs/qmp-dispatch-exec.c +++ b/stubs/qmp-dispatch-exec.c @@ -1,7 +1,7 @@ #include "qemu/osdep.h" #include "qapi/qmp/dispatch.h" -void qmp_dispatch_exec(const QmpCommand *cmd, bool oob, Monitor *cur_mon, +void qmp_dispatch_exec(const QmpCommand *cmd, bool oob, void *exec_data, QDict *args, QObject **ret, Error **err) { cmd->fn(args, ret, err); From patchwork Wed Aug 10 12:48:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Patchwork-Id: 12940532 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B4D17C25B06 for ; Wed, 10 Aug 2022 12:58:33 +0000 (UTC) Received: from localhost ([::1]:35256 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oLlI8-0001va-Ou for qemu-devel@archiver.kernel.org; Wed, 10 Aug 2022 08:58:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46782) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLl9e-0001po-Sl for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:49:53 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:51001) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLl9c-0007TZ-H9 for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:49:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1660135784; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=cXeHyRBJtGysaTbKi6BQA5NTou5Xw3Vjerjw7B6BxIY=; b=HE+7Jq29hLUXhhXJDuxLWfG5FVWXCp15wuoFvuj/g9mwIJzViUZDhuyHQnND3lUrJ4GlnX YF/s/172TKXCQeSPPDKWD2BPycQ9uDuzqnrpNL2qK1e0tOZXUuNDsaIVLusJn4CTzzWPDb J5kkKatF4K+jZkOFZo9KrB2tKh1+p8g= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-324-lEevv345MSCQ5ztdh0Q2kg-1; Wed, 10 Aug 2022 08:49:42 -0400 X-MC-Unique: lEevv345MSCQ5ztdh0Q2kg-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 4F4983C14CC5; Wed, 10 Aug 2022 12:49:42 +0000 (UTC) Received: from localhost (unknown [10.39.208.40]) by smtp.corp.redhat.com (Postfix) with ESMTP id 59F39492C3B; Wed, 10 Aug 2022 12:49:40 +0000 (UTC) From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Cc: Markus Armbruster , Peter Maydell , Cleber Rosa , Michael Roth , John Snow , Xie Yongji , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Subject: [PATCH v3 08/16] scripts/qapi-gen: add -i option Date: Wed, 10 Aug 2022 16:48:49 +0400 Message-Id: <20220810124857.1360211-9-marcandre.lureau@redhat.com> In-Reply-To: <20220810124857.1360211-1-marcandre.lureau@redhat.com> References: <20220810124857.1360211-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau Replace hard-coded "qemu/osdep.h" include with a qapi-gen option to specify the headers to include. This will allow to substitute QEMU osdep.h with glib.h for example, for projects with different global headers. For historical reasons, we can keep the default as "qemu/osdep.h". Signed-off-by: Marc-André Lureau --- scripts/qapi/commands.py | 15 ++++++++++----- scripts/qapi/events.py | 17 +++++++++++------ scripts/qapi/gen.py | 15 +++++++++++++++ scripts/qapi/introspect.py | 11 +++++++---- scripts/qapi/main.py | 17 +++++++++++------ scripts/qapi/types.py | 17 +++++++++++------ scripts/qapi/visit.py | 17 +++++++++++------ 7 files changed, 76 insertions(+), 33 deletions(-) diff --git a/scripts/qapi/commands.py b/scripts/qapi/commands.py index 38ca38a7b9..781491b639 100644 --- a/scripts/qapi/commands.py +++ b/scripts/qapi/commands.py @@ -294,9 +294,9 @@ def gen_register_command(name: str, class QAPISchemaGenCommandVisitor(QAPISchemaModularCVisitor): - def __init__(self, prefix: str, gen_tracing: bool): + def __init__(self, prefix: str, include: List[str], gen_tracing: bool): super().__init__( - prefix, 'qapi-commands', + prefix, include, 'qapi-commands', ' * Schema-defined QAPI/QMP commands', None, __doc__, gen_tracing=gen_tracing) self._visited_ret_types: Dict[QAPIGenC, Set[QAPISchemaType]] = {} @@ -308,7 +308,8 @@ def _begin_user_module(self, name: str) -> None: types = self._module_basename('qapi-types', name) visit = self._module_basename('qapi-visit', name) self._genc.add(mcgen(''' -#include "qemu/osdep.h" +%(include)s + #include "qapi/compat-policy.h" #include "qapi/visitor.h" #include "qapi/qmp/qdict.h" @@ -318,6 +319,7 @@ def _begin_user_module(self, name: str) -> None: #include "%(commands)s.h" ''', + include=self.genc_include(), commands=commands, visit=visit)) if self._gen_tracing and commands != 'qapi-commands': @@ -344,7 +346,8 @@ def visit_begin(self, schema: QAPISchema) -> None: ''', c_prefix=c_name(self._prefix, protect=False))) self._genc.add(mcgen(''' -#include "qemu/osdep.h" +%(include)s + #include "%(prefix)sqapi-commands.h" #include "%(prefix)sqapi-init-commands.h" @@ -353,6 +356,7 @@ def visit_begin(self, schema: QAPISchema) -> None: QTAILQ_INIT(cmds); ''', + include=self.genc_include(), prefix=self._prefix, c_prefix=c_name(self._prefix, protect=False))) @@ -404,7 +408,8 @@ def visit_command(self, def gen_commands(schema: QAPISchema, output_dir: str, prefix: str, + include: List[str], gen_tracing: bool) -> None: - vis = QAPISchemaGenCommandVisitor(prefix, gen_tracing) + vis = QAPISchemaGenCommandVisitor(prefix, include, gen_tracing) schema.visit(vis) vis.write(output_dir) diff --git a/scripts/qapi/events.py b/scripts/qapi/events.py index 27b44c49f5..6e677d11d2 100644 --- a/scripts/qapi/events.py +++ b/scripts/qapi/events.py @@ -175,9 +175,9 @@ def gen_event_send(name: str, class QAPISchemaGenEventVisitor(QAPISchemaModularCVisitor): - def __init__(self, prefix: str): + def __init__(self, prefix: str, include: List[str]): super().__init__( - prefix, 'qapi-events', + prefix, include, 'qapi-events', ' * Schema-defined QAPI/QMP events', None, __doc__) self._event_enum_name = c_name(prefix + 'QAPIEvent', protect=False) self._event_enum_members: List[QAPISchemaEnumMember] = [] @@ -188,7 +188,8 @@ def _begin_user_module(self, name: str) -> None: types = self._module_basename('qapi-types', name) visit = self._module_basename('qapi-visit', name) self._genc.add(mcgen(''' -#include "qemu/osdep.h" +%(include)s + #include "%(prefix)sqapi-emit-events.h" #include "%(events)s.h" #include "%(visit)s.h" @@ -198,6 +199,7 @@ def _begin_user_module(self, name: str) -> None: #include "qapi/qmp-event.h" ''', + include=self.genc_include(), events=events, visit=visit, prefix=self._prefix)) self._genh.add(mcgen(''' @@ -209,9 +211,11 @@ def _begin_user_module(self, name: str) -> None: def visit_end(self) -> None: self._add_module('./emit', ' * QAPI Events emission') self._genc.preamble_add(mcgen(''' -#include "qemu/osdep.h" +%(include)s + #include "%(prefix)sqapi-emit-events.h" ''', + include=self.genc_include(), prefix=self._prefix)) self._genh.preamble_add(mcgen(''' #include "qapi/util.h" @@ -246,7 +250,8 @@ def visit_event(self, def gen_events(schema: QAPISchema, output_dir: str, - prefix: str) -> None: - vis = QAPISchemaGenEventVisitor(prefix) + prefix: str, + include: List[str]) -> None: + vis = QAPISchemaGenEventVisitor(prefix, include) schema.visit(vis) vis.write(output_dir) diff --git a/scripts/qapi/gen.py b/scripts/qapi/gen.py index 113b49134d..7db46653de 100644 --- a/scripts/qapi/gen.py +++ b/scripts/qapi/gen.py @@ -17,6 +17,7 @@ from typing import ( Dict, Iterator, + List, Optional, Sequence, Tuple, @@ -45,6 +46,10 @@ def gen_special_features(features: Sequence[QAPISchemaFeature]) -> str: return ' | '.join(special_features) or '0' +def genc_include(include: List[str]) -> str: + return '\n'.join([f'#include "{inc}"' for inc in include]) + + class QAPIGen: def __init__(self, fname: str): self.fname = fname @@ -228,16 +233,21 @@ def ifcontext(ifcond: QAPISchemaIfCond, *args: QAPIGenCCode) -> Iterator[None]: class QAPISchemaMonolithicCVisitor(QAPISchemaVisitor): def __init__(self, prefix: str, + include: List[str], what: str, blurb: str, pydoc: str): self._prefix = prefix + self._include = include self._what = what self._genc = QAPIGenC(self._prefix + self._what + '.c', blurb, pydoc) self._genh = QAPIGenH(self._prefix + self._what + '.h', blurb, pydoc) + def genc_include(self) -> str: + return genc_include(self._include) + def write(self, output_dir: str) -> None: self._genc.write(output_dir) self._genh.write(output_dir) @@ -246,12 +256,14 @@ def write(self, output_dir: str) -> None: class QAPISchemaModularCVisitor(QAPISchemaVisitor): def __init__(self, prefix: str, + include: List[str], what: str, user_blurb: str, builtin_blurb: Optional[str], pydoc: str, gen_tracing: bool = False): self._prefix = prefix + self._include = include self._what = what self._user_blurb = user_blurb self._builtin_blurb = builtin_blurb @@ -262,6 +274,9 @@ def __init__(self, self._main_module: Optional[str] = None self._gen_tracing = gen_tracing + def genc_include(self) -> str: + return genc_include(self._include) + @property def _genc(self) -> QAPIGenC: assert self._current_module is not None diff --git a/scripts/qapi/introspect.py b/scripts/qapi/introspect.py index 67c7d89aae..d965d17694 100644 --- a/scripts/qapi/introspect.py +++ b/scripts/qapi/introspect.py @@ -170,9 +170,9 @@ def to_c_string(string: str) -> str: class QAPISchemaGenIntrospectVisitor(QAPISchemaMonolithicCVisitor): - def __init__(self, prefix: str, unmask: bool): + def __init__(self, prefix: str, include: List[str], unmask: bool): super().__init__( - prefix, 'qapi-introspect', + prefix, include, 'qapi-introspect', ' * QAPI/QMP schema introspection', __doc__) self._unmask = unmask self._schema: Optional[QAPISchema] = None @@ -180,10 +180,12 @@ def __init__(self, prefix: str, unmask: bool): self._used_types: List[QAPISchemaType] = [] self._name_map: Dict[str, str] = {} self._genc.add(mcgen(''' -#include "qemu/osdep.h" +%(include)s + #include "%(prefix)sqapi-introspect.h" ''', + include=self.genc_include(), prefix=prefix)) def visit_begin(self, schema: QAPISchema) -> None: @@ -384,7 +386,8 @@ def visit_event(self, name: str, info: Optional[QAPISourceInfo], def gen_introspect(schema: QAPISchema, output_dir: str, prefix: str, + include: List[str], opt_unmask: bool) -> None: - vis = QAPISchemaGenIntrospectVisitor(prefix, opt_unmask) + vis = QAPISchemaGenIntrospectVisitor(prefix, include, opt_unmask) schema.visit(vis) vis.write(output_dir) diff --git a/scripts/qapi/main.py b/scripts/qapi/main.py index fc216a53d3..eba98cb9ac 100644 --- a/scripts/qapi/main.py +++ b/scripts/qapi/main.py @@ -9,7 +9,7 @@ import argparse import sys -from typing import Optional +from typing import List, Optional from .commands import gen_commands from .common import must_match @@ -31,6 +31,7 @@ def invalid_prefix_char(prefix: str) -> Optional[str]: def generate(schema_file: str, output_dir: str, prefix: str, + include: List[str], unmask: bool = False, builtins: bool = False, gen_tracing: bool = False) -> None: @@ -48,11 +49,11 @@ def generate(schema_file: str, assert invalid_prefix_char(prefix) is None schema = QAPISchema(schema_file) - gen_types(schema, output_dir, prefix, builtins) - gen_visit(schema, output_dir, prefix, builtins) - gen_commands(schema, output_dir, prefix, gen_tracing) - gen_events(schema, output_dir, prefix) - gen_introspect(schema, output_dir, prefix, unmask) + gen_types(schema, output_dir, prefix, include, builtins) + gen_visit(schema, output_dir, prefix, include, builtins) + gen_commands(schema, output_dir, prefix, include, gen_tracing) + gen_events(schema, output_dir, prefix, include) + gen_introspect(schema, output_dir, prefix, include, unmask) def main() -> int: @@ -75,6 +76,9 @@ def main() -> int: parser.add_argument('-u', '--unmask-non-abi-names', action='store_true', dest='unmask', help="expose non-ABI names in introspection") + parser.add_argument('-i', '--include', nargs='*', + default=['qemu/osdep.h'], + help="top-level include headers") # Option --suppress-tracing exists so we can avoid solving build system # problems. TODO Drop it when we no longer need it. @@ -94,6 +98,7 @@ def main() -> int: generate(args.schema, output_dir=args.output_dir, prefix=args.prefix, + include=args.include, unmask=args.unmask, builtins=args.builtins, gen_tracing=not args.suppress_tracing) diff --git a/scripts/qapi/types.py b/scripts/qapi/types.py index 477d027001..9617b7d4ed 100644 --- a/scripts/qapi/types.py +++ b/scripts/qapi/types.py @@ -282,18 +282,20 @@ def gen_type_cleanup(name: str) -> str: class QAPISchemaGenTypeVisitor(QAPISchemaModularCVisitor): - def __init__(self, prefix: str): + def __init__(self, prefix: str, include: List[str]): super().__init__( - prefix, 'qapi-types', ' * Schema-defined QAPI types', + prefix, include, 'qapi-types', ' * Schema-defined QAPI types', ' * Built-in QAPI types', __doc__) def _begin_builtin_module(self) -> None: self._genc.preamble_add(mcgen(''' -#include "qemu/osdep.h" +%(include)s + #include "qapi/dealloc-visitor.h" #include "qapi/qapi-builtin-types.h" #include "qapi/qapi-builtin-visit.h" -''')) +''', + include=self.genc_include())) self._genh.preamble_add(mcgen(''' #include "qapi/util.h" ''')) @@ -302,11 +304,13 @@ def _begin_user_module(self, name: str) -> None: types = self._module_basename('qapi-types', name) visit = self._module_basename('qapi-visit', name) self._genc.preamble_add(mcgen(''' -#include "qemu/osdep.h" +%(include)s + #include "qapi/dealloc-visitor.h" #include "%(types)s.h" #include "%(visit)s.h" ''', + include=self.genc_include(), types=types, visit=visit)) self._genh.preamble_add(mcgen(''' #include "qapi/qapi-builtin-types.h" @@ -381,7 +385,8 @@ def visit_alternate_type(self, def gen_types(schema: QAPISchema, output_dir: str, prefix: str, + include: List[str], opt_builtins: bool) -> None: - vis = QAPISchemaGenTypeVisitor(prefix) + vis = QAPISchemaGenTypeVisitor(prefix, include) schema.visit(vis) vis.write(output_dir, opt_builtins) diff --git a/scripts/qapi/visit.py b/scripts/qapi/visit.py index 380fa197f5..1ff464c036 100644 --- a/scripts/qapi/visit.py +++ b/scripts/qapi/visit.py @@ -318,17 +318,19 @@ def gen_visit_object(name: str) -> str: class QAPISchemaGenVisitVisitor(QAPISchemaModularCVisitor): - def __init__(self, prefix: str): + def __init__(self, prefix: str, include: List[str]): super().__init__( - prefix, 'qapi-visit', ' * Schema-defined QAPI visitors', + prefix, include, 'qapi-visit', ' * Schema-defined QAPI visitors', ' * Built-in QAPI visitors', __doc__) def _begin_builtin_module(self) -> None: self._genc.preamble_add(mcgen(''' -#include "qemu/osdep.h" +%(include)s + #include "qapi/error.h" #include "qapi/qapi-builtin-visit.h" -''')) +''', + include=self.genc_include())) self._genh.preamble_add(mcgen(''' #include "qapi/visitor.h" #include "qapi/qapi-builtin-types.h" @@ -339,11 +341,13 @@ def _begin_user_module(self, name: str) -> None: types = self._module_basename('qapi-types', name) visit = self._module_basename('qapi-visit', name) self._genc.preamble_add(mcgen(''' -#include "qemu/osdep.h" +%(include)s + #include "qapi/error.h" #include "qapi/qmp/qerror.h" #include "%(visit)s.h" ''', + include=self.genc_include(), visit=visit)) self._genh.preamble_add(mcgen(''' #include "qapi/qapi-builtin-visit.h" @@ -408,7 +412,8 @@ def visit_alternate_type(self, def gen_visit(schema: QAPISchema, output_dir: str, prefix: str, + include: List[str], opt_builtins: bool) -> None: - vis = QAPISchemaGenVisitVisitor(prefix) + vis = QAPISchemaGenVisitVisitor(prefix, include) schema.visit(vis) vis.write(output_dir, opt_builtins) From patchwork Wed Aug 10 12:48:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Patchwork-Id: 12940552 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 891CFC00140 for ; Wed, 10 Aug 2022 13:08:12 +0000 (UTC) Received: from localhost ([::1]:49398 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oLlRT-0003mN-CU for qemu-devel@archiver.kernel.org; Wed, 10 Aug 2022 09:08:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46822) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLl9o-0001qt-5U for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:50:04 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:27982) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLl9m-0007X2-M0 for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:49:55 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1660135794; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=WP4Tsro7iq92SWtEJiexLXCN4s47+YUpCxoFN4SCMN0=; b=Ijl7gTfZGYWVrAikig6CuCzFF5EgcW5RnobMgi1t3VVL7jYw8m7C9ZjCGPkZb4h9dAFHCS U8zSXgSuidRMrcifXGxGefcLbGGJCk/+nPAynVQOy4L3ihIM5Zf7UXEr1jt3zbWSpbTVdp IRBzwNYDFRMPS/NcXeT2vRrizCnW2pE= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-304-I0TFpxAqM3y3xfvtX9H2hQ-1; Wed, 10 Aug 2022 08:49:51 -0400 X-MC-Unique: I0TFpxAqM3y3xfvtX9H2hQ-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 282BC3C10171; Wed, 10 Aug 2022 12:49:48 +0000 (UTC) Received: from localhost (unknown [10.39.208.40]) by smtp.corp.redhat.com (Postfix) with ESMTP id 051942026D64; Wed, 10 Aug 2022 12:49:46 +0000 (UTC) From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Cc: Markus Armbruster , Peter Maydell , Cleber Rosa , Michael Roth , John Snow , Xie Yongji , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Subject: [PATCH v3 09/16] scripts/qapi: add required system includes to visitor Date: Wed, 10 Aug 2022 16:48:50 +0400 Message-Id: <20220810124857.1360211-10-marcandre.lureau@redhat.com> In-Reply-To: <20220810124857.1360211-1-marcandre.lureau@redhat.com> References: <20220810124857.1360211-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau The generated visitor code includes abort() & assert(), we shouldn't rely on the global "-i" headers to include the necessary system headers. Signed-off-by: Marc-André Lureau Reviewed-by: Warner Losh --- scripts/qapi/visit.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/qapi/visit.py b/scripts/qapi/visit.py index 1ff464c036..4aba5ddd8a 100644 --- a/scripts/qapi/visit.py +++ b/scripts/qapi/visit.py @@ -342,6 +342,8 @@ def _begin_user_module(self, name: str) -> None: visit = self._module_basename('qapi-visit', name) self._genc.preamble_add(mcgen(''' %(include)s +#include +#include #include "qapi/error.h" #include "qapi/qmp/qerror.h" From patchwork Wed Aug 10 12:48:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Patchwork-Id: 12940541 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 11594C00140 for ; Wed, 10 Aug 2022 13:04:41 +0000 (UTC) Received: from localhost ([::1]:43794 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oLlO3-0008Gg-VX for qemu-devel@archiver.kernel.org; Wed, 10 Aug 2022 09:04:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46864) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLl9w-0001rA-HH for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:50:08 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:30339) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLl9u-0007YY-5B for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:50:04 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1660135801; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+eXohUduyjohEF9ww8ZVus4+1CSV2I4j5kLCxGMy+20=; b=MrQKRduYwNhwicrbSQZw6wF7P4F23yHLWlpLOMOmiDX3qQRNtMuGzz1Zkd/EUSBOgkkDI9 Rz4K7aFxPk4J2jJaJDJIvQyNlaeXf2ADf6Yflhg0xd/UTfH3FH4BwhI4vg9oZpoxE/QpKb miFnn1CZFMdzbOF0xtKhTcC7ixpvYuc= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-292-k3d5mrr8PmW5IghLuY5pEg-1; Wed, 10 Aug 2022 08:49:59 -0400 X-MC-Unique: k3d5mrr8PmW5IghLuY5pEg-1 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 4DF3F91B1FA; Wed, 10 Aug 2022 12:49:53 +0000 (UTC) Received: from localhost (unknown [10.39.208.40]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9B041492CA9; Wed, 10 Aug 2022 12:49:51 +0000 (UTC) From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Cc: Markus Armbruster , Peter Maydell , Cleber Rosa , Michael Roth , John Snow , Xie Yongji , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Subject: [PATCH v3 10/16] util: move 256-by-128 division helpers to int128 Date: Wed, 10 Aug 2022 16:48:51 +0400 Message-Id: <20220810124857.1360211-11-marcandre.lureau@redhat.com> In-Reply-To: <20220810124857.1360211-1-marcandre.lureau@redhat.com> References: <20220810124857.1360211-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.9 Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau Break a cyclic dependency between int128 and host-utils. Signed-off-by: Marc-André Lureau Reviewed-by: Lucas Mateus Castro --- include/qemu/host-utils.h | 3 - include/qemu/int128.h | 3 + util/host-utils.c | 180 -------------------------------------- util/int128.c | 180 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 183 insertions(+), 183 deletions(-) diff --git a/include/qemu/host-utils.h b/include/qemu/host-utils.h index 88d476161c..e8162fb6b0 100644 --- a/include/qemu/host-utils.h +++ b/include/qemu/host-utils.h @@ -32,7 +32,6 @@ #include "qemu/compiler.h" #include "qemu/bswap.h" -#include "qemu/int128.h" #ifdef CONFIG_INT128 static inline void mulu64(uint64_t *plow, uint64_t *phigh, @@ -784,6 +783,4 @@ static inline uint64_t udiv_qrnnd(uint64_t *r, uint64_t n1, #endif } -Int128 divu256(Int128 *plow, Int128 *phigh, Int128 divisor); -Int128 divs256(Int128 *plow, Int128 *phigh, Int128 divisor); #endif diff --git a/include/qemu/int128.h b/include/qemu/int128.h index d2b76ca6ac..823c61edb0 100644 --- a/include/qemu/int128.h +++ b/include/qemu/int128.h @@ -472,4 +472,7 @@ static inline void bswap128s(Int128 *s) #define INT128_MAX int128_make128(UINT64_MAX, INT64_MAX) #define INT128_MIN int128_make128(0, INT64_MIN) +Int128 divu256(Int128 *plow, Int128 *phigh, Int128 divisor); +Int128 divs256(Int128 *plow, Int128 *phigh, Int128 divisor); + #endif /* INT128_H */ diff --git a/util/host-utils.c b/util/host-utils.c index fb91bcba82..96d5dc0bed 100644 --- a/util/host-utils.c +++ b/util/host-utils.c @@ -266,183 +266,3 @@ void ulshift(uint64_t *plow, uint64_t *phigh, int32_t shift, bool *overflow) *plow = *plow << shift; } } - -/* - * Unsigned 256-by-128 division. - * Returns the remainder via r. - * Returns lower 128 bit of quotient. - * Needs a normalized divisor (most significant bit set to 1). - * - * Adapted from include/qemu/host-utils.h udiv_qrnnd, - * from the GNU Multi Precision Library - longlong.h __udiv_qrnnd - * (https://gmplib.org/repo/gmp/file/tip/longlong.h) - * - * Licensed under the GPLv2/LGPLv3 - */ -static Int128 udiv256_qrnnd(Int128 *r, Int128 n1, Int128 n0, Int128 d) -{ - Int128 d0, d1, q0, q1, r1, r0, m; - uint64_t mp0, mp1; - - d0 = int128_make64(int128_getlo(d)); - d1 = int128_make64(int128_gethi(d)); - - r1 = int128_remu(n1, d1); - q1 = int128_divu(n1, d1); - mp0 = int128_getlo(q1); - mp1 = int128_gethi(q1); - mulu128(&mp0, &mp1, int128_getlo(d0)); - m = int128_make128(mp0, mp1); - r1 = int128_make128(int128_gethi(n0), int128_getlo(r1)); - if (int128_ult(r1, m)) { - q1 = int128_sub(q1, int128_one()); - r1 = int128_add(r1, d); - if (int128_uge(r1, d)) { - if (int128_ult(r1, m)) { - q1 = int128_sub(q1, int128_one()); - r1 = int128_add(r1, d); - } - } - } - r1 = int128_sub(r1, m); - - r0 = int128_remu(r1, d1); - q0 = int128_divu(r1, d1); - mp0 = int128_getlo(q0); - mp1 = int128_gethi(q0); - mulu128(&mp0, &mp1, int128_getlo(d0)); - m = int128_make128(mp0, mp1); - r0 = int128_make128(int128_getlo(n0), int128_getlo(r0)); - if (int128_ult(r0, m)) { - q0 = int128_sub(q0, int128_one()); - r0 = int128_add(r0, d); - if (int128_uge(r0, d)) { - if (int128_ult(r0, m)) { - q0 = int128_sub(q0, int128_one()); - r0 = int128_add(r0, d); - } - } - } - r0 = int128_sub(r0, m); - - *r = r0; - return int128_or(int128_lshift(q1, 64), q0); -} - -/* - * Unsigned 256-by-128 division. - * Returns the remainder. - * Returns quotient via plow and phigh. - * Also returns the remainder via the function return value. - */ -Int128 divu256(Int128 *plow, Int128 *phigh, Int128 divisor) -{ - Int128 dhi = *phigh; - Int128 dlo = *plow; - Int128 rem, dhighest; - int sh; - - if (!int128_nz(divisor) || !int128_nz(dhi)) { - *plow = int128_divu(dlo, divisor); - *phigh = int128_zero(); - return int128_remu(dlo, divisor); - } else { - sh = clz128(divisor); - - if (int128_ult(dhi, divisor)) { - if (sh != 0) { - /* normalize the divisor, shifting the dividend accordingly */ - divisor = int128_lshift(divisor, sh); - dhi = int128_or(int128_lshift(dhi, sh), - int128_urshift(dlo, (128 - sh))); - dlo = int128_lshift(dlo, sh); - } - - *phigh = int128_zero(); - *plow = udiv256_qrnnd(&rem, dhi, dlo, divisor); - } else { - if (sh != 0) { - /* normalize the divisor, shifting the dividend accordingly */ - divisor = int128_lshift(divisor, sh); - dhighest = int128_rshift(dhi, (128 - sh)); - dhi = int128_or(int128_lshift(dhi, sh), - int128_urshift(dlo, (128 - sh))); - dlo = int128_lshift(dlo, sh); - - *phigh = udiv256_qrnnd(&dhi, dhighest, dhi, divisor); - } else { - /* - * dhi >= divisor - * Since the MSB of divisor is set (sh == 0), - * (dhi - divisor) < divisor - * - * Thus, the high part of the quotient is 1, and we can - * calculate the low part with a single call to udiv_qrnnd - * after subtracting divisor from dhi - */ - dhi = int128_sub(dhi, divisor); - *phigh = int128_one(); - } - - *plow = udiv256_qrnnd(&rem, dhi, dlo, divisor); - } - - /* - * since the dividend/divisor might have been normalized, - * the remainder might also have to be shifted back - */ - rem = int128_urshift(rem, sh); - return rem; - } -} - -/* - * Signed 256-by-128 division. - * Returns quotient via plow and phigh. - * Also returns the remainder via the function return value. - */ -Int128 divs256(Int128 *plow, Int128 *phigh, Int128 divisor) -{ - bool neg_quotient = false, neg_remainder = false; - Int128 unsig_hi = *phigh, unsig_lo = *plow; - Int128 rem; - - if (!int128_nonneg(*phigh)) { - neg_quotient = !neg_quotient; - neg_remainder = !neg_remainder; - - if (!int128_nz(unsig_lo)) { - unsig_hi = int128_neg(unsig_hi); - } else { - unsig_hi = int128_not(unsig_hi); - unsig_lo = int128_neg(unsig_lo); - } - } - - if (!int128_nonneg(divisor)) { - neg_quotient = !neg_quotient; - - divisor = int128_neg(divisor); - } - - rem = divu256(&unsig_lo, &unsig_hi, divisor); - - if (neg_quotient) { - if (!int128_nz(unsig_lo)) { - *phigh = int128_neg(unsig_hi); - *plow = int128_zero(); - } else { - *phigh = int128_not(unsig_hi); - *plow = int128_neg(unsig_lo); - } - } else { - *phigh = unsig_hi; - *plow = unsig_lo; - } - - if (neg_remainder) { - return int128_neg(rem); - } else { - return rem; - } -} diff --git a/util/int128.c b/util/int128.c index ed8f25fef1..482c63b655 100644 --- a/util/int128.c +++ b/util/int128.c @@ -145,3 +145,183 @@ Int128 int128_rems(Int128 a, Int128 b) } #endif + +/* + * Unsigned 256-by-128 division. + * Returns the remainder via r. + * Returns lower 128 bit of quotient. + * Needs a normalized divisor (most significant bit set to 1). + * + * Adapted from include/qemu/host-utils.h udiv_qrnnd, + * from the GNU Multi Precision Library - longlong.h __udiv_qrnnd + * (https://gmplib.org/repo/gmp/file/tip/longlong.h) + * + * Licensed under the GPLv2/LGPLv3 + */ +static Int128 udiv256_qrnnd(Int128 *r, Int128 n1, Int128 n0, Int128 d) +{ + Int128 d0, d1, q0, q1, r1, r0, m; + uint64_t mp0, mp1; + + d0 = int128_make64(int128_getlo(d)); + d1 = int128_make64(int128_gethi(d)); + + r1 = int128_remu(n1, d1); + q1 = int128_divu(n1, d1); + mp0 = int128_getlo(q1); + mp1 = int128_gethi(q1); + mulu128(&mp0, &mp1, int128_getlo(d0)); + m = int128_make128(mp0, mp1); + r1 = int128_make128(int128_gethi(n0), int128_getlo(r1)); + if (int128_ult(r1, m)) { + q1 = int128_sub(q1, int128_one()); + r1 = int128_add(r1, d); + if (int128_uge(r1, d)) { + if (int128_ult(r1, m)) { + q1 = int128_sub(q1, int128_one()); + r1 = int128_add(r1, d); + } + } + } + r1 = int128_sub(r1, m); + + r0 = int128_remu(r1, d1); + q0 = int128_divu(r1, d1); + mp0 = int128_getlo(q0); + mp1 = int128_gethi(q0); + mulu128(&mp0, &mp1, int128_getlo(d0)); + m = int128_make128(mp0, mp1); + r0 = int128_make128(int128_getlo(n0), int128_getlo(r0)); + if (int128_ult(r0, m)) { + q0 = int128_sub(q0, int128_one()); + r0 = int128_add(r0, d); + if (int128_uge(r0, d)) { + if (int128_ult(r0, m)) { + q0 = int128_sub(q0, int128_one()); + r0 = int128_add(r0, d); + } + } + } + r0 = int128_sub(r0, m); + + *r = r0; + return int128_or(int128_lshift(q1, 64), q0); +} + +/* + * Unsigned 256-by-128 division. + * Returns the remainder. + * Returns quotient via plow and phigh. + * Also returns the remainder via the function return value. + */ +Int128 divu256(Int128 *plow, Int128 *phigh, Int128 divisor) +{ + Int128 dhi = *phigh; + Int128 dlo = *plow; + Int128 rem, dhighest; + int sh; + + if (!int128_nz(divisor) || !int128_nz(dhi)) { + *plow = int128_divu(dlo, divisor); + *phigh = int128_zero(); + return int128_remu(dlo, divisor); + } else { + sh = clz128(divisor); + + if (int128_ult(dhi, divisor)) { + if (sh != 0) { + /* normalize the divisor, shifting the dividend accordingly */ + divisor = int128_lshift(divisor, sh); + dhi = int128_or(int128_lshift(dhi, sh), + int128_urshift(dlo, (128 - sh))); + dlo = int128_lshift(dlo, sh); + } + + *phigh = int128_zero(); + *plow = udiv256_qrnnd(&rem, dhi, dlo, divisor); + } else { + if (sh != 0) { + /* normalize the divisor, shifting the dividend accordingly */ + divisor = int128_lshift(divisor, sh); + dhighest = int128_rshift(dhi, (128 - sh)); + dhi = int128_or(int128_lshift(dhi, sh), + int128_urshift(dlo, (128 - sh))); + dlo = int128_lshift(dlo, sh); + + *phigh = udiv256_qrnnd(&dhi, dhighest, dhi, divisor); + } else { + /* + * dhi >= divisor + * Since the MSB of divisor is set (sh == 0), + * (dhi - divisor) < divisor + * + * Thus, the high part of the quotient is 1, and we can + * calculate the low part with a single call to udiv_qrnnd + * after subtracting divisor from dhi + */ + dhi = int128_sub(dhi, divisor); + *phigh = int128_one(); + } + + *plow = udiv256_qrnnd(&rem, dhi, dlo, divisor); + } + + /* + * since the dividend/divisor might have been normalized, + * the remainder might also have to be shifted back + */ + rem = int128_urshift(rem, sh); + return rem; + } +} + +/* + * Signed 256-by-128 division. + * Returns quotient via plow and phigh. + * Also returns the remainder via the function return value. + */ +Int128 divs256(Int128 *plow, Int128 *phigh, Int128 divisor) +{ + bool neg_quotient = false, neg_remainder = false; + Int128 unsig_hi = *phigh, unsig_lo = *plow; + Int128 rem; + + if (!int128_nonneg(*phigh)) { + neg_quotient = !neg_quotient; + neg_remainder = !neg_remainder; + + if (!int128_nz(unsig_lo)) { + unsig_hi = int128_neg(unsig_hi); + } else { + unsig_hi = int128_not(unsig_hi); + unsig_lo = int128_neg(unsig_lo); + } + } + + if (!int128_nonneg(divisor)) { + neg_quotient = !neg_quotient; + + divisor = int128_neg(divisor); + } + + rem = divu256(&unsig_lo, &unsig_hi, divisor); + + if (neg_quotient) { + if (!int128_nz(unsig_lo)) { + *phigh = int128_neg(unsig_hi); + *plow = int128_zero(); + } else { + *phigh = int128_not(unsig_hi); + *plow = int128_neg(unsig_lo); + } + } else { + *phigh = unsig_hi; + *plow = unsig_lo; + } + + if (neg_remainder) { + return int128_neg(rem); + } else { + return rem; + } +} From patchwork Wed Aug 10 12:48:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Patchwork-Id: 12940553 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6C7C9C25B08 for ; Wed, 10 Aug 2022 13:09:06 +0000 (UTC) Received: from localhost ([::1]:52278 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oLlSL-0005vE-D5 for qemu-devel@archiver.kernel.org; Wed, 10 Aug 2022 09:09:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47056) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLlAV-0001uI-2I for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:50:49 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:44907) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLlAD-0007qw-RF for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:50:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1660135817; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=FV5JOZPDoT9vhnkmPbtByhwUWEwvTo3eOwUz3nk743w=; b=bVyIf1zo4hx3sE/U/p7U5xwSgohx8DXhWcojnLvppjAgRPEA69bgee1tV4rI0nuoeYqJGO przHrrNZAjyzK4GherEuKB9qoCaXkuxIEDe4sZrSumxPX39d1soT5WWPBaiagTFBI0IKHr gCH/Fx7R+2XL9hSplB3Srpg+/QtOIbU= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-386-TluCTiIrOVyF1JJVtpcV6Q-1; Wed, 10 Aug 2022 08:50:14 -0400 X-MC-Unique: TluCTiIrOVyF1JJVtpcV6Q-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id AD86D3C138DF; Wed, 10 Aug 2022 12:49:58 +0000 (UTC) Received: from localhost (unknown [10.39.208.40]) by smtp.corp.redhat.com (Postfix) with ESMTP id 46DD640CFD21; Wed, 10 Aug 2022 12:49:56 +0000 (UTC) From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Cc: Markus Armbruster , Peter Maydell , Cleber Rosa , Michael Roth , John Snow , Xie Yongji , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Subject: [PATCH v3 11/16] qemu-common: introduce a common subproject Date: Wed, 10 Aug 2022 16:48:52 +0400 Message-Id: <20220810124857.1360211-12-marcandre.lureau@redhat.com> In-Reply-To: <20220810124857.1360211-1-marcandre.lureau@redhat.com> References: <20220810124857.1360211-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.11.54.1 Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau Add a new meson subproject to provide common code and scripts for QEMU and tools. Initially, it will offer QAPI/QMP code generation and common utilities. libvhost-user & libvduse will make use of the subproject to avoid having include/ links to common headers. The other targeted user is qemu-ga, which will also be converted to a subproject (so it can be built, moved, released etc independent from QEMU). Other projects such as qemu-storage-daemon could be built standalone eventually in the future. Note that with meson subprojects are "global". Projects will share subprojects (https://mesonbuild.com/Subprojects.html#subprojects-depending-on-other-subprojects). We will add extra subprojects/ links to allow standalone subproject compilation though. This initial commit simply set the stage to build and link against it. Signed-off-by: Marc-André Lureau --- meson.build | 9 ++++++++- .../qemu-common/include}/qemu/help-texts.h | 0 subprojects/libvduse/meson.build | 2 ++ subprojects/libvduse/subprojects/qemu-common | 1 + subprojects/libvhost-user/meson.build | 2 ++ subprojects/libvhost-user/subprojects/qemu-common | 1 + subprojects/qemu-common/meson.build | 8 ++++++++ 7 files changed, 22 insertions(+), 1 deletion(-) rename {include => subprojects/qemu-common/include}/qemu/help-texts.h (100%) create mode 120000 subprojects/libvduse/subprojects/qemu-common create mode 120000 subprojects/libvhost-user/subprojects/qemu-common create mode 100644 subprojects/qemu-common/meson.build diff --git a/meson.build b/meson.build index 294e9a8f32..a47ce88c84 100644 --- a/meson.build +++ b/meson.build @@ -169,6 +169,10 @@ if 'dtrace' in get_option('trace_backends') endif endif +add_project_arguments('-I' + meson.current_source_dir() / 'subprojects/qemu-common/include', + language: ['c', 'cpp', 'objc'], +) + if get_option('iasl') == '' iasl = find_program('iasl', required: false) else @@ -1583,6 +1587,9 @@ if libbpf.found() and not cc.links(''' endif endif +qemu_common = subproject('qemu-common') +qemu_common = qemu_common.get_variable('qemu_common_dep') + ################# # config-host.h # ################# @@ -3057,7 +3064,7 @@ util_ss.add_all(trace_ss) util_ss = util_ss.apply(config_all, strict: false) libqemuutil = static_library('qemuutil', sources: util_ss.sources() + stub_ss.sources() + genh, - dependencies: [util_ss.dependencies(), libm, threads, glib, socket, malloc, pixman]) + dependencies: [util_ss.dependencies(), libm, threads, glib, socket, malloc, pixman, qemu_common]) qemuutil = declare_dependency(link_with: libqemuutil, sources: genh + version_res, dependencies: [event_loop_base]) diff --git a/include/qemu/help-texts.h b/subprojects/qemu-common/include/qemu/help-texts.h similarity index 100% rename from include/qemu/help-texts.h rename to subprojects/qemu-common/include/qemu/help-texts.h diff --git a/subprojects/libvduse/meson.build b/subprojects/libvduse/meson.build index ba08f5ee1a..841509ecb9 100644 --- a/subprojects/libvduse/meson.build +++ b/subprojects/libvduse/meson.build @@ -2,6 +2,8 @@ project('libvduse', 'c', license: 'GPL-2.0-or-later', default_options: ['c_std=gnu99']) +qemu_common = subproject('qemu-common') + libvduse = static_library('vduse', files('libvduse.c'), c_args: '-D_GNU_SOURCE') diff --git a/subprojects/libvduse/subprojects/qemu-common b/subprojects/libvduse/subprojects/qemu-common new file mode 120000 index 0000000000..4c1c87018a --- /dev/null +++ b/subprojects/libvduse/subprojects/qemu-common @@ -0,0 +1 @@ +../../qemu-common \ No newline at end of file diff --git a/subprojects/libvhost-user/meson.build b/subprojects/libvhost-user/meson.build index 39825d9404..73355908e0 100644 --- a/subprojects/libvhost-user/meson.build +++ b/subprojects/libvhost-user/meson.build @@ -5,6 +5,8 @@ project('libvhost-user', 'c', threads = dependency('threads') glib = dependency('glib-2.0') +qemu_common = subproject('qemu-common') + vhost_user = static_library('vhost-user', files('libvhost-user.c'), dependencies: threads, diff --git a/subprojects/libvhost-user/subprojects/qemu-common b/subprojects/libvhost-user/subprojects/qemu-common new file mode 120000 index 0000000000..4c1c87018a --- /dev/null +++ b/subprojects/libvhost-user/subprojects/qemu-common @@ -0,0 +1 @@ +../../qemu-common \ No newline at end of file diff --git a/subprojects/qemu-common/meson.build b/subprojects/qemu-common/meson.build new file mode 100644 index 0000000000..8969b08473 --- /dev/null +++ b/subprojects/qemu-common/meson.build @@ -0,0 +1,8 @@ +project('qemu-common', 'c', + license: 'GPL-2.0-or-later', + default_options: ['c_std=gnu11'] +) + +qemu_common_dep = declare_dependency( + include_directories: include_directories('include'), +) From patchwork Wed Aug 10 12:48:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Patchwork-Id: 12940551 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id CCA1FC00140 for ; Wed, 10 Aug 2022 13:06:44 +0000 (UTC) Received: from localhost ([::1]:46432 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oLlQ3-0001hx-UR for qemu-devel@archiver.kernel.org; Wed, 10 Aug 2022 09:06:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47118) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLlAV-0001uN-2l for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:50:49 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]:45656) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLlAI-0007sV-H1 for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:50:33 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1660135823; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=eHKLpZT4lsKz8ntscq6c0yk6FA9n5rHUUvBl+QS1vU4=; b=TN91+knJdIueK8W1oZL9HuFTnzIJz1DUVeD1fIzpXlpiSSDYg1BCb0APH8lKUdpw6YU5WA B3Zg+eKZ7zPv4FOV9dVrJmsSvBGtknjzKrlBrwkTayTV/qZsW6yzRXBlcKN5HrhXWYbjv5 /XXOVFMxUe1buwO/b0+PQpGxJBx87/8= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-507-wfwJi-tIP9iZcZnoh0q1rw-1; Wed, 10 Aug 2022 08:50:19 -0400 X-MC-Unique: wfwJi-tIP9iZcZnoh0q1rw-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id EC155858F11; Wed, 10 Aug 2022 12:50:03 +0000 (UTC) Received: from localhost (unknown [10.39.208.40]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6CA899459C; Wed, 10 Aug 2022 12:50:02 +0000 (UTC) From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Cc: Markus Armbruster , Peter Maydell , Cleber Rosa , Michael Roth , John Snow , Xie Yongji , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Subject: [PATCH v3 12/16] qemu-common: move scripts/qapi Date: Wed, 10 Aug 2022 16:48:53 +0400 Message-Id: <20220810124857.1360211-13-marcandre.lureau@redhat.com> In-Reply-To: <20220810124857.1360211-1-marcandre.lureau@redhat.com> References: <20220810124857.1360211-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -28 X-Spam_score: -2.9 X-Spam_bar: -- X-Spam_report: (-2.9 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau This is just moving qapi-gen.py and related subdir to qemu-common, to ease review and proceed step by step. The following patches will move related necessary code, tests etc. Signed-off-by: Marc-André Lureau --- docs/conf.py | 2 +- meson.build | 19 ++----------------- MAINTAINERS | 4 ++-- subprojects/qemu-common/meson.build | 2 ++ subprojects/qemu-common/scripts/meson.build | 3 +++ .../qemu-common/scripts}/qapi-gen.py | 0 .../qemu-common/scripts}/qapi/.flake8 | 0 .../qemu-common/scripts}/qapi/.isort.cfg | 0 .../qemu-common/scripts}/qapi/__init__.py | 0 .../qemu-common/scripts}/qapi/commands.py | 0 .../qemu-common/scripts}/qapi/common.py | 0 .../qemu-common/scripts}/qapi/error.py | 0 .../qemu-common/scripts}/qapi/events.py | 0 .../qemu-common/scripts}/qapi/expr.py | 0 .../qemu-common/scripts}/qapi/gen.py | 0 .../qemu-common/scripts}/qapi/introspect.py | 0 .../qemu-common/scripts}/qapi/main.py | 0 .../qemu-common/scripts/qapi/meson.build | 16 ++++++++++++++++ .../qemu-common/scripts}/qapi/mypy.ini | 0 .../qemu-common/scripts}/qapi/parser.py | 0 .../qemu-common/scripts}/qapi/pylintrc | 0 .../qemu-common/scripts}/qapi/schema.py | 0 .../qemu-common/scripts}/qapi/source.py | 0 .../qemu-common/scripts}/qapi/types.py | 0 .../qemu-common/scripts}/qapi/visit.py | 0 tests/qapi-schema/meson.build | 2 +- 26 files changed, 27 insertions(+), 21 deletions(-) create mode 100644 subprojects/qemu-common/scripts/meson.build rename {scripts => subprojects/qemu-common/scripts}/qapi-gen.py (100%) rename {scripts => subprojects/qemu-common/scripts}/qapi/.flake8 (100%) rename {scripts => subprojects/qemu-common/scripts}/qapi/.isort.cfg (100%) rename {scripts => subprojects/qemu-common/scripts}/qapi/__init__.py (100%) rename {scripts => subprojects/qemu-common/scripts}/qapi/commands.py (100%) rename {scripts => subprojects/qemu-common/scripts}/qapi/common.py (100%) rename {scripts => subprojects/qemu-common/scripts}/qapi/error.py (100%) rename {scripts => subprojects/qemu-common/scripts}/qapi/events.py (100%) rename {scripts => subprojects/qemu-common/scripts}/qapi/expr.py (100%) rename {scripts => subprojects/qemu-common/scripts}/qapi/gen.py (100%) rename {scripts => subprojects/qemu-common/scripts}/qapi/introspect.py (100%) rename {scripts => subprojects/qemu-common/scripts}/qapi/main.py (100%) create mode 100644 subprojects/qemu-common/scripts/qapi/meson.build rename {scripts => subprojects/qemu-common/scripts}/qapi/mypy.ini (100%) rename {scripts => subprojects/qemu-common/scripts}/qapi/parser.py (100%) rename {scripts => subprojects/qemu-common/scripts}/qapi/pylintrc (100%) rename {scripts => subprojects/qemu-common/scripts}/qapi/schema.py (100%) rename {scripts => subprojects/qemu-common/scripts}/qapi/source.py (100%) rename {scripts => subprojects/qemu-common/scripts}/qapi/types.py (100%) rename {scripts => subprojects/qemu-common/scripts}/qapi/visit.py (100%) diff --git a/docs/conf.py b/docs/conf.py index e33cf3d381..02dcd987b4 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -56,7 +56,7 @@ # Our extensions are in docs/sphinx; the qapidoc extension requires # the QAPI modules from scripts/. sys.path.insert(0, os.path.join(qemu_docdir, "sphinx")) -sys.path.insert(0, os.path.join(qemu_docdir, "../scripts")) +sys.path.insert(0, os.path.join(qemu_docdir, "../subprojects/qemu-common/scripts")) # -- General configuration ------------------------------------------------ diff --git a/meson.build b/meson.build index a47ce88c84..e8ba4361df 100644 --- a/meson.build +++ b/meson.build @@ -1588,6 +1588,8 @@ if libbpf.found() and not cc.links(''' endif qemu_common = subproject('qemu-common') +qapi_gen = qemu_common.get_variable('qapi_gen') +qapi_gen_depends = qemu_common.get_variable('qapi_gen_depends') qemu_common = qemu_common.get_variable('qemu_common_dep') ################# @@ -2795,23 +2797,6 @@ genh += configure_file(output: 'config-host.h', configuration: config_host_data) hxtool = find_program('scripts/hxtool') shaderinclude = find_program('scripts/shaderinclude.pl') -qapi_gen = find_program('scripts/qapi-gen.py') -qapi_gen_depends = [ meson.current_source_dir() / 'scripts/qapi/__init__.py', - meson.current_source_dir() / 'scripts/qapi/commands.py', - meson.current_source_dir() / 'scripts/qapi/common.py', - meson.current_source_dir() / 'scripts/qapi/error.py', - meson.current_source_dir() / 'scripts/qapi/events.py', - meson.current_source_dir() / 'scripts/qapi/expr.py', - meson.current_source_dir() / 'scripts/qapi/gen.py', - meson.current_source_dir() / 'scripts/qapi/introspect.py', - meson.current_source_dir() / 'scripts/qapi/parser.py', - meson.current_source_dir() / 'scripts/qapi/schema.py', - meson.current_source_dir() / 'scripts/qapi/source.py', - meson.current_source_dir() / 'scripts/qapi/types.py', - meson.current_source_dir() / 'scripts/qapi/visit.py', - meson.current_source_dir() / 'scripts/qapi/common.py', - meson.current_source_dir() / 'scripts/qapi-gen.py' -] tracetool = [ python, files('scripts/tracetool.py'), diff --git a/MAINTAINERS b/MAINTAINERS index 5ce4227ff6..abb75008fb 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2848,8 +2848,8 @@ F: tests/unit/test-*-visitor.c F: tests/unit/test-qapi-*.c F: tests/unit/test-qmp-*.c F: tests/unit/test-visitor-serialization.c -F: scripts/qapi-gen.py -F: scripts/qapi/* +F: subprojects/qemu-common/scripts/qapi-gen.py +F: subprojects/qemu-common/scripts/qapi/* F: docs/sphinx/qapidoc.py F: docs/devel/qapi* T: git https://repo.or.cz/qemu/armbru.git qapi-next diff --git a/subprojects/qemu-common/meson.build b/subprojects/qemu-common/meson.build index 8969b08473..207e539910 100644 --- a/subprojects/qemu-common/meson.build +++ b/subprojects/qemu-common/meson.build @@ -6,3 +6,5 @@ project('qemu-common', 'c', qemu_common_dep = declare_dependency( include_directories: include_directories('include'), ) + +subdir('scripts') diff --git a/subprojects/qemu-common/scripts/meson.build b/subprojects/qemu-common/scripts/meson.build new file mode 100644 index 0000000000..626bed6dcd --- /dev/null +++ b/subprojects/qemu-common/scripts/meson.build @@ -0,0 +1,3 @@ +qapi_gen = find_program('qapi-gen.py') + +subdir('qapi') diff --git a/scripts/qapi-gen.py b/subprojects/qemu-common/scripts/qapi-gen.py similarity index 100% rename from scripts/qapi-gen.py rename to subprojects/qemu-common/scripts/qapi-gen.py diff --git a/scripts/qapi/.flake8 b/subprojects/qemu-common/scripts/qapi/.flake8 similarity index 100% rename from scripts/qapi/.flake8 rename to subprojects/qemu-common/scripts/qapi/.flake8 diff --git a/scripts/qapi/.isort.cfg b/subprojects/qemu-common/scripts/qapi/.isort.cfg similarity index 100% rename from scripts/qapi/.isort.cfg rename to subprojects/qemu-common/scripts/qapi/.isort.cfg diff --git a/scripts/qapi/__init__.py b/subprojects/qemu-common/scripts/qapi/__init__.py similarity index 100% rename from scripts/qapi/__init__.py rename to subprojects/qemu-common/scripts/qapi/__init__.py diff --git a/scripts/qapi/commands.py b/subprojects/qemu-common/scripts/qapi/commands.py similarity index 100% rename from scripts/qapi/commands.py rename to subprojects/qemu-common/scripts/qapi/commands.py diff --git a/scripts/qapi/common.py b/subprojects/qemu-common/scripts/qapi/common.py similarity index 100% rename from scripts/qapi/common.py rename to subprojects/qemu-common/scripts/qapi/common.py diff --git a/scripts/qapi/error.py b/subprojects/qemu-common/scripts/qapi/error.py similarity index 100% rename from scripts/qapi/error.py rename to subprojects/qemu-common/scripts/qapi/error.py diff --git a/scripts/qapi/events.py b/subprojects/qemu-common/scripts/qapi/events.py similarity index 100% rename from scripts/qapi/events.py rename to subprojects/qemu-common/scripts/qapi/events.py diff --git a/scripts/qapi/expr.py b/subprojects/qemu-common/scripts/qapi/expr.py similarity index 100% rename from scripts/qapi/expr.py rename to subprojects/qemu-common/scripts/qapi/expr.py diff --git a/scripts/qapi/gen.py b/subprojects/qemu-common/scripts/qapi/gen.py similarity index 100% rename from scripts/qapi/gen.py rename to subprojects/qemu-common/scripts/qapi/gen.py diff --git a/scripts/qapi/introspect.py b/subprojects/qemu-common/scripts/qapi/introspect.py similarity index 100% rename from scripts/qapi/introspect.py rename to subprojects/qemu-common/scripts/qapi/introspect.py diff --git a/scripts/qapi/main.py b/subprojects/qemu-common/scripts/qapi/main.py similarity index 100% rename from scripts/qapi/main.py rename to subprojects/qemu-common/scripts/qapi/main.py diff --git a/subprojects/qemu-common/scripts/qapi/meson.build b/subprojects/qemu-common/scripts/qapi/meson.build new file mode 100644 index 0000000000..5f73a966f3 --- /dev/null +++ b/subprojects/qemu-common/scripts/qapi/meson.build @@ -0,0 +1,16 @@ +qapi_gen_depends = files( + '__init__.py', + 'commands.py', + 'common.py', + 'error.py', + 'events.py', + 'expr.py', + 'gen.py', + 'introspect.py', + 'parser.py', + 'schema.py', + 'source.py', + 'types.py', + 'visit.py', + 'common.py', +) diff --git a/scripts/qapi/mypy.ini b/subprojects/qemu-common/scripts/qapi/mypy.ini similarity index 100% rename from scripts/qapi/mypy.ini rename to subprojects/qemu-common/scripts/qapi/mypy.ini diff --git a/scripts/qapi/parser.py b/subprojects/qemu-common/scripts/qapi/parser.py similarity index 100% rename from scripts/qapi/parser.py rename to subprojects/qemu-common/scripts/qapi/parser.py diff --git a/scripts/qapi/pylintrc b/subprojects/qemu-common/scripts/qapi/pylintrc similarity index 100% rename from scripts/qapi/pylintrc rename to subprojects/qemu-common/scripts/qapi/pylintrc diff --git a/scripts/qapi/schema.py b/subprojects/qemu-common/scripts/qapi/schema.py similarity index 100% rename from scripts/qapi/schema.py rename to subprojects/qemu-common/scripts/qapi/schema.py diff --git a/scripts/qapi/source.py b/subprojects/qemu-common/scripts/qapi/source.py similarity index 100% rename from scripts/qapi/source.py rename to subprojects/qemu-common/scripts/qapi/source.py diff --git a/scripts/qapi/types.py b/subprojects/qemu-common/scripts/qapi/types.py similarity index 100% rename from scripts/qapi/types.py rename to subprojects/qemu-common/scripts/qapi/types.py diff --git a/scripts/qapi/visit.py b/subprojects/qemu-common/scripts/qapi/visit.py similarity index 100% rename from scripts/qapi/visit.py rename to subprojects/qemu-common/scripts/qapi/visit.py diff --git a/tests/qapi-schema/meson.build b/tests/qapi-schema/meson.build index c18dd7d02f..2c67636004 100644 --- a/tests/qapi-schema/meson.build +++ b/tests/qapi-schema/meson.build @@ -1,5 +1,5 @@ test_env = environment() -test_env.set('PYTHONPATH', meson.project_source_root() / 'scripts') +test_env.set('PYTHONPATH', meson.project_source_root() / 'subprojects/qemu-common/scripts') test_env.set('PYTHONIOENCODING', 'utf-8') schemas = [ From patchwork Wed Aug 10 12:48:54 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Patchwork-Id: 12940557 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A59D7C00140 for ; Wed, 10 Aug 2022 13:13:10 +0000 (UTC) Received: from localhost ([::1]:35404 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oLlWH-0005Hn-OZ for qemu-devel@archiver.kernel.org; Wed, 10 Aug 2022 09:13:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47060) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLlAV-0001uJ-4N for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:50:49 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:29510) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLlAC-0007r0-Pg for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:50:24 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1660135817; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=m9he5H3XIAFx+28xTXCytUMSLUaO3/+gi4NHH9/XvKw=; b=MaGK/MO4zWVpUiiUjwddNb+qG7TlJP7jaD9M8d0cEUTJUDumhgX/9JCCBfH83Fl6d6YP8p /GlzMEopadObuo+nHstGkLRbngTRKlVbS6c5cQo5Jjz7nb2PbgX7KS6elXBULo8t6P7llN dT/IrKA7d4r24/O3TDJi3bnOCBXjjYg= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-222-xyh6rb4QMtm2s1I9iusCNA-1; Wed, 10 Aug 2022 08:50:16 -0400 X-MC-Unique: xyh6rb4QMtm2s1I9iusCNA-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5C4E63817A90; Wed, 10 Aug 2022 12:50:09 +0000 (UTC) Received: from localhost (unknown [10.39.208.40]) by smtp.corp.redhat.com (Postfix) with ESMTP id 05E511415124; Wed, 10 Aug 2022 12:50:07 +0000 (UTC) From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Cc: Markus Armbruster , Peter Maydell , Cleber Rosa , Michael Roth , John Snow , Xie Yongji , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Subject: [PATCH v3 13/16] qemu-common: move glib-compat.h Date: Wed, 10 Aug 2022 16:48:54 +0400 Message-Id: <20220810124857.1360211-14-marcandre.lureau@redhat.com> In-Reply-To: <20220810124857.1360211-1-marcandre.lureau@redhat.com> References: <20220810124857.1360211-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.7 Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau qemu-common will have compatible dependency requirements with QEMU. Since qemu-common won't have a toplevel qemu/osdep.h which would include various system headers, include stdbool.h (bool is used for some declarations here). Replace getenv() with g_getenv() to avoid extra header inclusion. Signed-off-by: Marc-André Lureau Reviewed-by: Warner Losh --- {include => subprojects/qemu-common/include}/glib-compat.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) rename {include => subprojects/qemu-common/include}/glib-compat.h (97%) diff --git a/include/glib-compat.h b/subprojects/qemu-common/include/glib-compat.h similarity index 97% rename from include/glib-compat.h rename to subprojects/qemu-common/include/glib-compat.h index 43a562974d..2b0f2962f3 100644 --- a/include/glib-compat.h +++ b/subprojects/qemu-common/include/glib-compat.h @@ -30,6 +30,8 @@ #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #include +#include + #if defined(G_OS_UNIX) #include #include @@ -133,7 +135,7 @@ qemu_g_test_slow(void) { static int cached = -1; if (cached == -1) { - cached = g_test_slow() || getenv("G_TEST_SLOW") != NULL; + cached = g_test_slow() || g_getenv("G_TEST_SLOW") != NULL; } return cached; } From patchwork Wed Aug 10 12:48:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Patchwork-Id: 12940555 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EBF7BC00140 for ; Wed, 10 Aug 2022 13:09:42 +0000 (UTC) Received: from localhost ([::1]:55142 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oLlSw-0007pf-3d for qemu-devel@archiver.kernel.org; Wed, 10 Aug 2022 09:09:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47064) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLlAV-0001uK-2L for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:50:49 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]:28554) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLlAE-0007sJ-FD for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:50:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1660135819; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=0HUTxhtgJORczNaSzLe/NTkSddDJpq5s+od7ABk2HhY=; b=VA3yafjNWe42g7MZKSL6gtlg+QZmJYIBed92DyVdTqeCCbhjhGmN7NYrUILybtmOdStk7G 4dS/iqDbiVpODhb34FhtxqqhqcBlYa+/0fh5HTATolwv0o9FIfCp1coH0C0IbXLTVuIheH 6fOEKxcZc1gPJhOkABZJTOC39nf+uzw= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-475-FhDdYDgCPBGazgpDwIcabQ-1; Wed, 10 Aug 2022 08:50:17 -0400 X-MC-Unique: FhDdYDgCPBGazgpDwIcabQ-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id EBF9383395D; Wed, 10 Aug 2022 12:50:13 +0000 (UTC) Received: from localhost (unknown [10.39.208.40]) by smtp.corp.redhat.com (Postfix) with ESMTP id BBEBF18EAA; Wed, 10 Aug 2022 12:50:12 +0000 (UTC) From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Cc: Markus Armbruster , Peter Maydell , Cleber Rosa , Michael Roth , John Snow , Xie Yongji , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Subject: [PATCH v3 14/16] qemu-common: move error-report Date: Wed, 10 Aug 2022 16:48:55 +0400 Message-Id: <20220810124857.1360211-15-marcandre.lureau@redhat.com> In-Reply-To: <20220810124857.1360211-1-marcandre.lureau@redhat.com> References: <20220810124857.1360211-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -28 X-Spam_score: -2.9 X-Spam_bar: -- X-Spam_report: (-2.9 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau Signed-off-by: Marc-André Lureau --- .../qemu-common/include}/qemu/error-report.h | 2 ++ .../qemu-common/src}/error-is-detailed.c | 1 - .../qemu-common/src}/error-report.c | 4 +++- .../qemu-common/src/error-vprintf.c | 5 ++--- stubs/meson.build | 2 -- subprojects/qemu-common/meson.build | 20 ++++++++++++++++--- subprojects/qemu-common/src/meson.build | 5 +++++ util/meson.build | 2 +- 8 files changed, 30 insertions(+), 11 deletions(-) rename {include => subprojects/qemu-common/include}/qemu/error-report.h (98%) rename {stubs => subprojects/qemu-common/src}/error-is-detailed.c (77%) rename {util => subprojects/qemu-common/src}/error-report.c (99%) rename stubs/error-printf.c => subprojects/qemu-common/src/error-vprintf.c (78%) create mode 100644 subprojects/qemu-common/src/meson.build diff --git a/include/qemu/error-report.h b/subprojects/qemu-common/include/qemu/error-report.h similarity index 98% rename from include/qemu/error-report.h rename to subprojects/qemu-common/include/qemu/error-report.h index 6ab25d4583..c62dd1a633 100644 --- a/include/qemu/error-report.h +++ b/subprojects/qemu-common/include/qemu/error-report.h @@ -13,6 +13,8 @@ #ifndef QEMU_ERROR_REPORT_H #define QEMU_ERROR_REPORT_H +#include "glib-compat.h" + typedef struct Location { /* all members are private to qemu-error.c */ enum { LOC_NONE, LOC_CMDLINE, LOC_FILE } kind; diff --git a/stubs/error-is-detailed.c b/subprojects/qemu-common/src/error-is-detailed.c similarity index 77% rename from stubs/error-is-detailed.c rename to subprojects/qemu-common/src/error-is-detailed.c index c47cd23693..c3d9c3454d 100644 --- a/stubs/error-is-detailed.c +++ b/subprojects/qemu-common/src/error-is-detailed.c @@ -1,4 +1,3 @@ -#include "qemu/osdep.h" #include "qemu/error-report.h" bool error_is_detailed(void) diff --git a/util/error-report.c b/subprojects/qemu-common/src/error-report.c similarity index 99% rename from util/error-report.c rename to subprojects/qemu-common/src/error-report.c index 4d1d66fc06..616428fe95 100644 --- a/util/error-report.c +++ b/subprojects/qemu-common/src/error-report.c @@ -10,7 +10,9 @@ * See the COPYING file in the top-level directory. */ -#include "qemu/osdep.h" +#include +#include + #include "qemu/error-report.h" /* diff --git a/stubs/error-printf.c b/subprojects/qemu-common/src/error-vprintf.c similarity index 78% rename from stubs/error-printf.c rename to subprojects/qemu-common/src/error-vprintf.c index 1afa0f62ca..b815d88dfe 100644 --- a/stubs/error-printf.c +++ b/subprojects/qemu-common/src/error-vprintf.c @@ -1,13 +1,12 @@ -#include "qemu/osdep.h" +#include #include "qemu/error-report.h" -#include "monitor/monitor.h" int error_vprintf(const char *fmt, va_list ap) { int ret; if (g_test_initialized() && !g_test_subprocess() && - getenv("QTEST_SILENT_ERRORS")) { + g_getenv("QTEST_SILENT_ERRORS")) { char *msg = g_strdup_vprintf(fmt, ap); g_test_message("%s", msg); ret = strlen(msg); diff --git a/stubs/meson.build b/stubs/meson.build index 14548633b0..865b677f2a 100644 --- a/stubs/meson.build +++ b/stubs/meson.build @@ -9,8 +9,6 @@ stub_ss.add(files('cpus-get-virtual-clock.c')) stub_ss.add(files('qemu-timer-notify-cb.c')) stub_ss.add(files('icount.c')) stub_ss.add(files('dump.c')) -stub_ss.add(files('error-is-detailed.c')) -stub_ss.add(files('error-printf.c')) stub_ss.add(files('fdset.c')) stub_ss.add(files('gdbstub.c')) stub_ss.add(files('get-vm-name.c')) diff --git a/subprojects/qemu-common/meson.build b/subprojects/qemu-common/meson.build index 207e539910..05bca6d30d 100644 --- a/subprojects/qemu-common/meson.build +++ b/subprojects/qemu-common/meson.build @@ -3,8 +3,22 @@ project('qemu-common', 'c', default_options: ['c_std=gnu11'] ) -qemu_common_dep = declare_dependency( - include_directories: include_directories('include'), -) +glib_dep = dependency('glib-2.0') +inc = include_directories('include') + +sources = [] subdir('scripts') +subdir('src') + +lib = static_library( + 'qemu-common', sources, + dependencies: [glib_dep], + include_directories: inc, +) + +qemu_common_dep = declare_dependency( + link_with: lib, + include_directories: inc, + dependencies: [glib_dep], +) diff --git a/subprojects/qemu-common/src/meson.build b/subprojects/qemu-common/src/meson.build new file mode 100644 index 0000000000..d85a314065 --- /dev/null +++ b/subprojects/qemu-common/src/meson.build @@ -0,0 +1,5 @@ +sources += files( + 'error-is-detailed.c', + 'error-report.c', + 'error-vprintf.c', +) diff --git a/util/meson.build b/util/meson.build index 5e282130df..38bb08675b 100644 --- a/util/meson.build +++ b/util/meson.build @@ -29,7 +29,7 @@ util_ss.add(files('host-utils.c')) util_ss.add(files('bitmap.c', 'bitops.c')) util_ss.add(files('fifo8.c')) util_ss.add(files('cacheflush.c')) -util_ss.add(files('error.c', 'error-report.c')) +util_ss.add(files('error.c')) util_ss.add(files('qemu-print.c')) util_ss.add(files('id.c')) util_ss.add(files('qemu-config.c', 'notify.c')) From patchwork Wed Aug 10 12:48:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Patchwork-Id: 12940561 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A93FAC00140 for ; Wed, 10 Aug 2022 13:17:01 +0000 (UTC) Received: from localhost ([::1]:43836 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oLla0-0002kB-M6 for qemu-devel@archiver.kernel.org; Wed, 10 Aug 2022 09:17:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47114) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLlAV-0001uL-35 for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:50:49 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:38530) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLlAM-0007t5-1O for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:50:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1660135826; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=OJEjBHrHzv11//F1wtjzfMSrHuEe+LS5JdAUogditrc=; b=PjUk81AkEm3YdMYvJ2PGdQ/5sN52xFKL7iZeXqhhMI66NWGW/xtt7QUEjSSry6rvUnNNNt 6ipkhclwhRTrnasg2JlKjHXRPczo3ywDi8DkaZoprtc3UPVOHDGogjPtVgxiaqafaIdyQY oa/lp3qbqVqS9K2XTGmikkzUKGE9cFY= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-630-2IOeSgQ_NXSG-kkmtZziwQ-1; Wed, 10 Aug 2022 08:50:25 -0400 X-MC-Unique: 2IOeSgQ_NXSG-kkmtZziwQ-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id A5144806002; Wed, 10 Aug 2022 12:50:18 +0000 (UTC) Received: from localhost (unknown [10.39.208.40]) by smtp.corp.redhat.com (Postfix) with ESMTP id A45FE1121315; Wed, 10 Aug 2022 12:50:17 +0000 (UTC) From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Cc: Markus Armbruster , Peter Maydell , Cleber Rosa , Michael Roth , John Snow , Xie Yongji , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Subject: [PATCH v3 15/16] mtest2make.py: teach suite name that are just "PROJECT" Date: Wed, 10 Aug 2022 16:48:56 +0400 Message-Id: <20220810124857.1360211-16-marcandre.lureau@redhat.com> In-Reply-To: <20220810124857.1360211-1-marcandre.lureau@redhat.com> References: <20220810124857.1360211-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau A subproject test may be simply in the "PROJECT" suite (such as "qemu-common" with the following patches) Signed-off-by: Marc-André Lureau --- scripts/mtest2make.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/scripts/mtest2make.py b/scripts/mtest2make.py index 0fe81efbbc..179dd54871 100644 --- a/scripts/mtest2make.py +++ b/scripts/mtest2make.py @@ -51,10 +51,11 @@ def process_tests(test, targets, suites): test_suites = test['suite'] or ['default'] for s in test_suites: - # The suite name in the introspection info is "PROJECT:SUITE" - s = s.split(':')[1] - if s == 'slow' or s == 'thorough': - continue + # The suite name in the introspection info is "PROJECT" or "PROJECT:SUITE" + if ':' in s: + s = s.split(':')[1] + if s == 'slow' or s == 'thorough': + continue if s.endswith('-slow'): s = s[:-5] suites[s].speeds.append('slow') From patchwork Wed Aug 10 12:48:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Patchwork-Id: 12940556 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1B69CC00140 for ; Wed, 10 Aug 2022 13:11:14 +0000 (UTC) Received: from localhost ([::1]:58084 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oLlUP-0001QD-1B for qemu-devel@archiver.kernel.org; Wed, 10 Aug 2022 09:11:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47116) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLlAU-0001uM-VV for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:50:49 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:50345) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLlAM-0007tQ-VJ for qemu-devel@nongnu.org; Wed, 10 Aug 2022 08:50:33 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1660135830; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QW2JkB+lQDvso8ZSmM25soHjoDYOqnfuVmKcQmRfYOk=; b=CL48cim94Ubl0IpOeyH0MymYdqhhY8Uu31Jf9yBPzWUe3RX7Vh45xqKL901HClE0MEQ0yk I0gT7gbV+G97SFb/VQ8jFCy31ywQuZ/ATjgGbU1Illk+JZWse0MJrHpqIiCCo/ZdumT5X3 EkyqufGZUUCS6WCPjUTpbKA7GKnjPWQ= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-266-euwjXadhOz-qM6XeYva41A-1; Wed, 10 Aug 2022 08:50:28 -0400 X-MC-Unique: euwjXadhOz-qM6XeYva41A-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 2CECD19711D0; Wed, 10 Aug 2022 12:50:23 +0000 (UTC) Received: from localhost (unknown [10.39.208.40]) by smtp.corp.redhat.com (Postfix) with ESMTP id BC9D340315E; Wed, 10 Aug 2022 12:50:21 +0000 (UTC) From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Cc: Markus Armbruster , Peter Maydell , Cleber Rosa , Michael Roth , John Snow , Xie Yongji , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Subject: [PATCH v3 16/16] qemu-common: add error-report test Date: Wed, 10 Aug 2022 16:48:57 +0400 Message-Id: <20220810124857.1360211-17-marcandre.lureau@redhat.com> In-Reply-To: <20220810124857.1360211-1-marcandre.lureau@redhat.com> References: <20220810124857.1360211-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau Add new tests to check the behaviour of error reporting functions. Signed-off-by: Marc-André Lureau --- .../qemu-common/tests/test-error-report.c | 120 ++++++++++++++++++ subprojects/qemu-common/meson.build | 2 + subprojects/qemu-common/tests/meson.build | 12 ++ 3 files changed, 134 insertions(+) create mode 100644 subprojects/qemu-common/tests/test-error-report.c create mode 100644 subprojects/qemu-common/tests/meson.build diff --git a/subprojects/qemu-common/tests/test-error-report.c b/subprojects/qemu-common/tests/test-error-report.c new file mode 100644 index 0000000000..09a2d122a0 --- /dev/null +++ b/subprojects/qemu-common/tests/test-error-report.c @@ -0,0 +1,120 @@ +/* + * Error reporting test + * + * Copyright (C) 2022 Red Hat Inc. + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#include "glib-compat.h" +#include + +#include "qemu/error-report.h" + +static void +test_error_report_simple(void) +{ + if (g_test_subprocess()) { + error_report("%s", "test error"); + warn_report("%s", "test warn"); + info_report("%s", "test info"); + return; + } + + g_test_trap_subprocess(NULL, 0, 0); + g_test_trap_assert_passed(); + g_test_trap_assert_stderr("\ +test-error-report: test error*\ +test-error-report: warning: test warn*\ +test-error-report: info: test info*\ +"); +} + +static void +test_error_report_loc(void) +{ + if (g_test_subprocess()) { + loc_set_file("some-file.c", 7717); + error_report("%s", "test error1"); + loc_set_none(); + error_report("%s", "test error2"); + return; + } + + g_test_trap_subprocess(NULL, 0, 0); + g_test_trap_assert_passed(); + g_test_trap_assert_stderr("\ +test-error-report:some-file.c:7717: test error1*\ +test-error-report: test error2*\ +"); +} + +static void +test_error_report_glog(void) +{ + if (g_test_subprocess()) { + g_message("gmessage"); + return; + } + + g_test_trap_subprocess(NULL, 0, 0); + g_test_trap_assert_passed(); + g_test_trap_assert_stderr("test-error-report: info: gmessage*"); +} + +static void +test_error_report_once(void) +{ + int i; + + if (g_test_subprocess()) { + for (i = 0; i < 3; i++) { + warn_report_once("warn"); + error_report_once("err"); + } + return; + } + + g_test_trap_subprocess(NULL, 0, 0); + g_test_trap_assert_passed(); + g_test_trap_assert_stderr("\ +test-error-report: warning: warn*\ +test-error-report: err*\ +"); +} + +static void +test_error_report_timestamp(void) +{ + if (g_test_subprocess()) { + message_with_timestamp = true; + warn_report("warn"); + error_report("err"); + return; + } + + g_test_trap_subprocess(NULL, 0, 0); + g_test_trap_assert_passed(); + g_test_trap_assert_stderr("\ +*-*-*:*:* test-error-report: warning: warn*\ +*-*-*:*:* test-error-report: err*\ +"); +} + +int +main(int argc, char *argv[]) +{ + setlocale(LC_ALL, ""); + + g_test_init(&argc, &argv, NULL); + error_init("test-error-report"); + + g_test_add_func("/error-report/simple", test_error_report_simple); + g_test_add_func("/error-report/loc", test_error_report_loc); + g_test_add_func("/error-report/glog", test_error_report_glog); + g_test_add_func("/error-report/once", test_error_report_once); + g_test_add_func("/error-report/timestamp", test_error_report_timestamp); + + return g_test_run(); +} diff --git a/subprojects/qemu-common/meson.build b/subprojects/qemu-common/meson.build index 05bca6d30d..991aaac520 100644 --- a/subprojects/qemu-common/meson.build +++ b/subprojects/qemu-common/meson.build @@ -22,3 +22,5 @@ qemu_common_dep = declare_dependency( include_directories: inc, dependencies: [glib_dep], ) + +subdir('tests') diff --git a/subprojects/qemu-common/tests/meson.build b/subprojects/qemu-common/tests/meson.build new file mode 100644 index 0000000000..3dd10c180b --- /dev/null +++ b/subprojects/qemu-common/tests/meson.build @@ -0,0 +1,12 @@ +env = [ + 'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()), + 'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()), +] + +test('error-report', + executable('test-error-report', + sources: files('test-error-report.c'), + dependencies: qemu_common_dep, + ), + env: env, +)