From patchwork Fri Mar 21 18:35:33 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025873 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 79289C36002 for ; Fri, 21 Mar 2025 18:36:31 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhE9-0001FO-IV; Fri, 21 Mar 2025 14:36:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhE5-00014x-U9 for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:14 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhE4-00070X-5X for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:13 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582171; 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=hM94b7RjZwD5r8G5ixj1lC759u1MwLyQq0Zg/KCwTz0=; b=R7WokSoJFIug2d95ofE+KkPZja6umwlJ/F7LbPOPCEJLZ+ynC1gGRO0RbiKRFfTPeFQhwb 5pIvT1OJH/7uxjCf/ArW/sEQ7pBf2q7lACwkJXTbJSX/lOEyWep3GOJdqgf8tjAy2DMmyh Qw/IroJYRfTxaeSMsbxV4flytCCFJqA= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-529-lrLPxnuIMnujFumsoRIo1Q-1; Fri, 21 Mar 2025 14:36:10 -0400 X-MC-Unique: lrLPxnuIMnujFumsoRIo1Q-1 X-Mimecast-MFC-AGG-ID: lrLPxnuIMnujFumsoRIo1Q_1742582169 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-43d025a52c2so16562385e9.0 for ; Fri, 21 Mar 2025 11:36:09 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582168; x=1743186968; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hM94b7RjZwD5r8G5ixj1lC759u1MwLyQq0Zg/KCwTz0=; b=gSdpQP2oZz7H+esM4Y5+NVVBY0VtzB/jqhPj7qOoAKHecWBd6DgIBTxJ+5eN/scJuf JnepCSHwrH6mDwHTBW1+Gkv6BnXMKN4TIjuhyIeddLrl/U14K59VV13GydZ+PQOP2zX+ m6U+f1I7xualBTzy7e+2ZqXCzesoS8KtHH9GN2KduTVhrpkW3hbyNnwEWLHPF9Y2ZWWI /OAsGtRizoU4CdxZOYrzIFSo0X+iDRebk1xp/Dps2lXkmABfwBWQdMkySXnD7zOrVqD2 1CJMT7ePtxvVO60W8gw3lS+GAyz+VugpB+es8TRy2PX8ZS38Q9cLZM+ZFgovbwNPsl4v WVug== X-Gm-Message-State: AOJu0YwiiV+2IS/4bPgl9WkA8ewjLFc3uInl1ciRQClzbtYLzo4UipRE +iMFz0mR8lZPEdtShRRMptcoJeed1C5ECC2QdfUeNmQNGDJ0TTZDsa80IgBz4QlzzqycggKCFIq m5EleqgcB0bjJt19rmSUsO6KaeE/RszOaYjpDOSK4TVIkA74DQL0BUG9aLwYzkemkQwKIH49qic jcS/W0DH/s/yLbAdvxj2FqJMv069b1xlq5+umh X-Gm-Gg: ASbGncvQwsxiPyVs3lim+JAntayTiaDzt14W9XKfqrboMqN7cQX7SBKTydXNk4sm4Jy fPYaPxRghviUXhlWhSegFc1jj1UxAwWL+YzEnqO++N3n9lhDadi8WmHejiZAMmsZvbCcb8iaF9r Co4aq+ywh9UDPvXmrsDhEQxYcyCgyFItbIQoNpS268dwzq75SozeTjPekUFsaDuFEhwiMSlfYIX 70fxxGaPC9o9I5DwRhPSo4XQrxh4/VlW5JEY7kdsgEfA9IBOhL6B7LJigApRdWfRvjRASPJHzjd SJZGI0eXfbnIBAEJUO4G X-Received: by 2002:a05:600c:4ed3:b0:43c:f85d:1245 with SMTP id 5b1f17b1804b1-43d509f8503mr48205675e9.17.1742582167648; Fri, 21 Mar 2025 11:36:07 -0700 (PDT) X-Google-Smtp-Source: AGHT+IERIdFFX2mSX424IJFKa6B987z61o6QPkdM24gRxnXfq56SCLHs/Jn34Hw4rHtd6jMRlzjLjQ== X-Received: by 2002:a05:600c:4ed3:b0:43c:f85d:1245 with SMTP id 5b1f17b1804b1-43d509f8503mr48205545e9.17.1742582167097; Fri, 21 Mar 2025 11:36:07 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d4174f8d3sm55870665e9.0.2025.03.21.11.36.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:06 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Peter Maydell , Tanish Desai , =?utf-8?q?Philippe_Mathieu-Daud?= =?utf-8?q?=C3=A9?= Subject: [PULL 01/24] rust: Kconfig: Factor out whether PL011 is Rust or C Date: Fri, 21 Mar 2025 19:35:33 +0100 Message-ID: <20250321183556.155097-2-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.129.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Peter Maydell Currently every board that uses the PL011 duplicates the logic that selects the Rust implementation if Rust was enabled and the C implementation if it does not. Factor this out into a separate Kconfig stanza, so that boards can go back to simply doing "select PL011" and get whichever implementation is correct for the build. This fixes a compilation failure if CONFIG_VMAPPLE is enabled in a Rust build, because hw/vmapple/Kconfig didn't have the "pick the Rust PL011 if Rust is enabled" logic in it. Fixes: 59f4d65584bd33 ("hw/vmapple/vmapple: Add vmapple machine type") Reported-by: Tanish Desai Analyzed-by: Tanish Desai Signed-off-by: Peter Maydell Reviewed-by: Philippe Mathieu-Daudé Link: https://lore.kernel.org/r/20250319193110.1565578-2-peter.maydell@linaro.org Signed-off-by: Paolo Bonzini --- hw/arm/Kconfig | 30 ++++++++++-------------------- hw/char/Kconfig | 6 ++++++ hw/char/meson.build | 2 +- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig index 15200a2d7e7..a55b44d7bde 100644 --- a/hw/arm/Kconfig +++ b/hw/arm/Kconfig @@ -21,8 +21,7 @@ config ARM_VIRT select PCI_EXPRESS select PCI_EXPRESS_GENERIC_BRIDGE select PFLASH_CFI01 - select PL011 if !HAVE_RUST # UART - select X_PL011_RUST if HAVE_RUST # UART + select PL011 # UART select PL031 # RTC select PL061 # GPIO select GPIO_PWR @@ -75,8 +74,7 @@ config HIGHBANK select AHCI_SYSBUS select ARM_TIMER # sp804 select ARM_V7M - select PL011 if !HAVE_RUST # UART - select X_PL011_RUST if HAVE_RUST # UART + select PL011 # UART select PL022 # SPI select PL031 # RTC select PL061 # GPIO @@ -89,8 +87,7 @@ config INTEGRATOR depends on TCG && ARM select ARM_TIMER select INTEGRATOR_DEBUG - select PL011 if !HAVE_RUST # UART - select X_PL011_RUST if HAVE_RUST # UART + select PL011 # UART select PL031 # RTC select PL041 # audio select PL050 # keyboard/mouse @@ -108,8 +105,7 @@ config MUSCA default y depends on TCG && ARM select ARMSSE - select PL011 if !HAVE_RUST # UART - select X_PL011_RUST if HAVE_RUST # UART + select PL011 # UART select PL031 select SPLIT_IRQ select UNIMP @@ -173,8 +169,7 @@ config REALVIEW select WM8750 # audio codec select LSI_SCSI_PCI select PCI - select PL011 if !HAVE_RUST # UART - select X_PL011_RUST if HAVE_RUST # UART + select PL011 # UART select PL031 # RTC select PL041 # audio codec select PL050 # keyboard/mouse @@ -199,8 +194,7 @@ config SBSA_REF select PCI_EXPRESS select PCI_EXPRESS_GENERIC_BRIDGE select PFLASH_CFI01 - select PL011 if !HAVE_RUST # UART - select X_PL011_RUST if HAVE_RUST # UART + select PL011 # UART select PL031 # RTC select PL061 # GPIO select USB_XHCI_SYSBUS @@ -224,8 +218,7 @@ config STELLARIS select ARM_V7M select CMSDK_APB_WATCHDOG select I2C - select PL011 if !HAVE_RUST # UART - select X_PL011_RUST if HAVE_RUST # UART + select PL011 # UART select PL022 # SPI select PL061 # GPIO select SSD0303 # OLED display @@ -285,8 +278,7 @@ config VEXPRESS select ARM_TIMER # sp804 select LAN9118 select PFLASH_CFI01 - select PL011 if !HAVE_RUST # UART - select X_PL011_RUST if HAVE_RUST # UART + select PL011 # UART select PL041 # audio codec select PL181 # display select REALVIEW @@ -371,8 +363,7 @@ config RASPI default y depends on TCG && ARM select FRAMEBUFFER - select PL011 if !HAVE_RUST # UART - select X_PL011_RUST if HAVE_RUST # UART + select PL011 # UART select SDHCI select USB_DWC2 select BCM2835_SPI @@ -448,8 +439,7 @@ config XLNX_VERSAL select ARM_GIC select CPU_CLUSTER select DEVICE_TREE - select PL011 if !HAVE_RUST # UART - select X_PL011_RUST if HAVE_RUST # UART + select PL011 # UART select CADENCE select VIRTIO_MMIO select UNIMP diff --git a/hw/char/Kconfig b/hw/char/Kconfig index 3f702565e67..9d517f3e287 100644 --- a/hw/char/Kconfig +++ b/hw/char/Kconfig @@ -11,6 +11,12 @@ config PARALLEL config PL011 bool + # The PL011 has both a Rust and a C implementation + select PL011_C if !HAVE_RUST + select X_PL011_RUST if HAVE_RUST + +config PL011_C + bool config SERIAL bool diff --git a/hw/char/meson.build b/hw/char/meson.build index 86ee808cae7..4e439da8b9e 100644 --- a/hw/char/meson.build +++ b/hw/char/meson.build @@ -9,7 +9,7 @@ system_ss.add(when: 'CONFIG_ISA_BUS', if_true: files('parallel-isa.c')) system_ss.add(when: 'CONFIG_ISA_DEBUG', if_true: files('debugcon.c')) system_ss.add(when: 'CONFIG_NRF51_SOC', if_true: files('nrf51_uart.c')) system_ss.add(when: 'CONFIG_PARALLEL', if_true: files('parallel.c')) -system_ss.add(when: 'CONFIG_PL011', if_true: files('pl011.c')) +system_ss.add(when: 'CONFIG_PL011_C', if_true: files('pl011.c')) system_ss.add(when: 'CONFIG_SCLPCONSOLE', if_true: files('sclpconsole.c', 'sclpconsole-lm.c')) system_ss.add(when: 'CONFIG_SERIAL', if_true: files('serial.c')) system_ss.add(when: 'CONFIG_SERIAL_ISA', if_true: files('serial-isa.c')) From patchwork Fri Mar 21 18:35:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025882 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 AF7BBC36000 for ; Fri, 21 Mar 2025 18:37:56 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhED-0001Xd-QW; Fri, 21 Mar 2025 14:36:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEA-0001KN-3a for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:18 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhE8-00070u-30 for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:17 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582175; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=DVg1tbjHDlf8QclYlE4W/Yr+fT0nQXJyVq0t9o0sx40=; b=JpLh63YUQark/EQG+b+GfP6cOhYxNtJngeWdgHL0zrupG/v/ARfyhqISkH/dk2Njy4JRY4 CCle8Jj29H9y0Zo1su+FRcH9wW6e5sEq4lIba6DpGeOY71L+VxNdOcS2Pd3Vu+593K15qO MNAqgKGmZ7Btz9vXPCjeQRRiNA0+gfM= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-274-RJ-JoDZPMLKniy4de0iqKQ-1; Fri, 21 Mar 2025 14:36:13 -0400 X-MC-Unique: RJ-JoDZPMLKniy4de0iqKQ-1 X-Mimecast-MFC-AGG-ID: RJ-JoDZPMLKniy4de0iqKQ_1742582172 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-39131851046so1011397f8f.0 for ; Fri, 21 Mar 2025 11:36:12 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582171; x=1743186971; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DVg1tbjHDlf8QclYlE4W/Yr+fT0nQXJyVq0t9o0sx40=; b=PnqNAUsWdcG/S7hlcYybY3haEMQjRZ0DGtgtduK+O6zVIfSjC0TvqlVPaRRkF97C3H T5wrkvfg0ClcsSjbX7aPTtUdKtdW4i0JYtR9RLUtoOtDzj5aLoN0Vi5I3CNIPiUsgOwB LvG99ZjydNKmlromGnnhEVhS5qfwCmPyleGoTJTGSg9HlpTLR8KklbdqkeTfrujoEqkA duz1rgiw8J1OmU+Fju+13jeRe3Ug8XcWu5Lqr5GG4ZE+5ZjwNyKGjqwomNh7YtKLZLqX 60o4YprvgKokmyOXhfk6p6+RbOaO4jg4YtXBFhPeyvvgDhnWglLaCuV4tGpeDV+oQouv ntCQ== X-Gm-Message-State: AOJu0YwmGswNx5bjeTCDxG0P9o8ECMR22fDJARFyejdyUdyyPOgig2V9 NNauD8Kv7OrC9uFWSRDb54UIyg+ap+oVTB8d3RmB5nfuDe1PZCptXvBxnxo5bWcqyURjpPiOtJ0 j9df0mxF0T9OGGE6AOq8FWJ+7DS2JfQGyNwQs/20wG+/m6Onl8bFKhbmAdI9CNpivKa2A5loODk Webc8t2KsrbYol4Jn7H+BgdQh/xbsMFG3q+d0r X-Gm-Gg: ASbGncslBDpj25K6l62Fyn3h/BpxfSGQNiZddtTcbwX0tX4rXP29ylB6gDJX1xARo2Y ctBXtcdLpT5jkMGTFQaGwpef7q/RS+Rod8bg6m7laMnimFYSNzlUubB5XVmCzZFlbQwxPwzS87U hTJTvfzGj6sOCvL+NPCfy9s0OdTxP62isMdCJR+JHe4ZkQlrsixDVJ9WHmq+QfL+UrbwFDZ6VzB jU+wIQ240TUhOr9J8tA29EY7uWWPl2nfRMrhm3H69wDem63L/BP4NlleWD0YS+eCzp7TwVW699R JkzN447Z5Bk5WcFiVdoB X-Received: by 2002:a05:6000:184d:b0:391:2391:2f79 with SMTP id ffacd0b85a97d-3997f932e9dmr4775099f8f.43.1742582170821; Fri, 21 Mar 2025 11:36:10 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE9hxRT2dy4L0zi6a1tvv2mvPdssWKs/VwK45g1jEhho9ibQ5uHZ1UgfkcIwSB2ePjhSi3/vw== X-Received: by 2002:a05:6000:184d:b0:391:2391:2f79 with SMTP id ffacd0b85a97d-3997f932e9dmr4775074f8f.43.1742582170253; Fri, 21 Mar 2025 11:36:10 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3997f9a345fsm3021188f8f.24.2025.03.21.11.36.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:07 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Peter Maydell Subject: [PULL 02/24] rust: Kconfig: Factor out whether HPET is Rust or C Date: Fri, 21 Mar 2025 19:35:34 +0100 Message-ID: <20250321183556.155097-3-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Peter Maydell Currently we require everywhere that wants to know if there is an HPET device to check for "CONFIG_HPET || CONFIG_X_HPET_RUST". Factor out whether the HPET device is Rust or C into a separate Kconfig stanza, so that CONFIG_HPET means "there is an HPET", and whether this has pulled in CONFIG_X_HPET_RUST or CONFIG_HPET_C is something the rest of QEMU can ignore. Signed-off-by: Peter Maydell Link: https://lore.kernel.org/r/20250319193110.1565578-3-peter.maydell@linaro.org Signed-off-by: Paolo Bonzini --- configs/devices/i386-softmmu/default.mak | 1 - hw/i386/fw_cfg.c | 2 +- hw/i386/pc.c | 2 +- hw/timer/Kconfig | 8 +++++++- hw/timer/meson.build | 2 +- rust/hw/timer/Kconfig | 1 - tests/qtest/meson.build | 3 +-- 7 files changed, 11 insertions(+), 8 deletions(-) diff --git a/configs/devices/i386-softmmu/default.mak b/configs/devices/i386-softmmu/default.mak index 9ef343cace0..4faf2f0315e 100644 --- a/configs/devices/i386-softmmu/default.mak +++ b/configs/devices/i386-softmmu/default.mak @@ -6,7 +6,6 @@ #CONFIG_APPLESMC=n #CONFIG_FDC=n #CONFIG_HPET=n -#CONFIG_X_HPET_RUST=n #CONFIG_HYPERV=n #CONFIG_ISA_DEBUG=n #CONFIG_ISA_IPMI_BT=n diff --git a/hw/i386/fw_cfg.c b/hw/i386/fw_cfg.c index a7f1b60b98c..5c0bcd5f8a9 100644 --- a/hw/i386/fw_cfg.c +++ b/hw/i386/fw_cfg.c @@ -26,7 +26,7 @@ #include CONFIG_DEVICES #include "target/i386/cpu.h" -#if !defined(CONFIG_HPET) && !defined(CONFIG_X_HPET_RUST) +#if !defined(CONFIG_HPET) struct hpet_fw_config hpet_fw_cfg = {.count = UINT8_MAX}; #endif diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 63a96cd23f8..01d0581f62a 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1704,7 +1704,7 @@ static void pc_machine_initfn(Object *obj) pcms->sata_enabled = true; pcms->i8042_enabled = true; pcms->max_fw_size = 8 * MiB; -#if defined(CONFIG_HPET) || defined(CONFIG_X_HPET_RUST) +#if defined(CONFIG_HPET) pcms->hpet_enabled = true; #endif pcms->fd_bootchk = true; diff --git a/hw/timer/Kconfig b/hw/timer/Kconfig index 9ac00845340..b3d823ce2c3 100644 --- a/hw/timer/Kconfig +++ b/hw/timer/Kconfig @@ -11,7 +11,13 @@ config A9_GTIMER config HPET bool - default y if PC && !HAVE_RUST + default y if PC + # The HPET has both a Rust and a C implementation + select HPET_C if !HAVE_RUST + select X_HPET_RUST if HAVE_RUST + +config HPET_C + bool config I8254 bool diff --git a/hw/timer/meson.build b/hw/timer/meson.build index f5f9eed2d0a..178321c029c 100644 --- a/hw/timer/meson.build +++ b/hw/timer/meson.build @@ -13,7 +13,7 @@ system_ss.add(when: 'CONFIG_DIGIC', if_true: files('digic-timer.c')) system_ss.add(when: 'CONFIG_EXYNOS4', if_true: files('exynos4210_mct.c')) system_ss.add(when: 'CONFIG_EXYNOS4', if_true: files('exynos4210_pwm.c')) system_ss.add(when: 'CONFIG_GRLIB', if_true: files('grlib_gptimer.c')) -system_ss.add(when: 'CONFIG_HPET', if_true: files('hpet.c')) +system_ss.add(when: 'CONFIG_HPET_C', if_true: files('hpet.c')) system_ss.add(when: 'CONFIG_I8254', if_true: files('i8254_common.c', 'i8254.c')) system_ss.add(when: 'CONFIG_IMX', if_true: files('imx_epit.c')) system_ss.add(when: 'CONFIG_IMX', if_true: files('imx_gpt.c')) diff --git a/rust/hw/timer/Kconfig b/rust/hw/timer/Kconfig index 42e421317a5..afd98033503 100644 --- a/rust/hw/timer/Kconfig +++ b/rust/hw/timer/Kconfig @@ -1,3 +1,2 @@ config X_HPET_RUST bool - default y if PC && HAVE_RUST diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build index 5a8c1f102c2..3136d15e0f8 100644 --- a/tests/qtest/meson.build +++ b/tests/qtest/meson.build @@ -103,8 +103,7 @@ qtests_i386 = \ config_all_devices.has_key('CONFIG_VIRTIO_PCI') and \ slirp.found() ? ['virtio-net-failover'] : []) + \ (unpack_edk2_blobs and \ - (config_all_devices.has_key('CONFIG_HPET') or \ - config_all_devices.has_key('CONFIG_X_HPET_RUST')) and \ + config_all_devices.has_key('CONFIG_HPET') and \ config_all_devices.has_key('CONFIG_PARALLEL') ? ['bios-tables-test'] : []) + \ qtests_pci + \ qtests_cxl + \ From patchwork Fri Mar 21 18:35:35 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025869 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 874E0C36000 for ; Fri, 21 Mar 2025 18:36:25 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhEC-0001Sp-Ah; Fri, 21 Mar 2025 14:36:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhE9-0001Hr-Nh for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:17 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhE8-00070x-53 for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:17 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582175; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rIoCzGEOqHsM41xIt3EuiCgJLmJ6D9tPJwGLj7vy+Rg=; b=ivY4V0b+xaZn//QzcNzqelEPlkaxgFWMpFA71zlUSMMWVLXTGBkxhACjYkdLRYQReGQJqG WDj7NAZOBqgqmfVYDVsDdYwzTlh2usD82CUW6obQNYAbWSQxFoVOtJQ5a/Af85JAbOfDKx VBAfm1KNIXnwbasqYoDPF6uDVRocHuA= Received: from mail-ed1-f71.google.com (mail-ed1-f71.google.com [209.85.208.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-224-iM4EgZevOOmWYwNLcjehKw-1; Fri, 21 Mar 2025 14:36:14 -0400 X-MC-Unique: iM4EgZevOOmWYwNLcjehKw-1 X-Mimecast-MFC-AGG-ID: iM4EgZevOOmWYwNLcjehKw_1742582173 Received: by mail-ed1-f71.google.com with SMTP id 4fb4d7f45d1cf-5e5edf8a509so1862762a12.1 for ; Fri, 21 Mar 2025 11:36:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582172; x=1743186972; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rIoCzGEOqHsM41xIt3EuiCgJLmJ6D9tPJwGLj7vy+Rg=; b=g4WhWdcNd1PEc37BqHw0eCjcZCIxg0JloAthyCT8WcLuDFt/SBcOsZLsgohQxq5mkd cnq+FPGNAd6dT/ZcFJLfEPH2TahTfyq8vWQRVCdET47JRIUJWWFV4LmOKWlfJXezdWh2 cZ7OnFCwmOlbhmWucxr50b+v6nCXF50Ma6vKd5dhg1+VfVa7saH97b8ktKIC+8aS/vkB a7SBn6lJ7oAtDk+ZPTszOG/rfRmNegvvZxvZW+8Ft2nsrsjUNPJCqG5sIuWDRN7zluHm u6MjKpa1sMfxeRteq/AmOZC9/cTfOAuhvG7xMNfRIJgHpjeXHwJCB4GyNWxauxB+6WKd 5opg== X-Gm-Message-State: AOJu0YzjvkKHZydPHD28qzrPe/yw92dkmHcT5FM7mczND/GAHLeh+/tv dx6WdnRZQg1oa1bSpaTLPv/90E1Jo5MmVWQQFjASbE+hMfwelCs6U8Io+GOFeur+/oxZQBHowsT Nul2LFFjv5r+1XMyp/MoRKPstakFkanSxmTpI1tprsMi5PyVOL+vQxwVWQTTfpH5/xNVKwdScmV YrbIwH3z9Ml+UQFbBXs7j6HUxZUdU9XqfaoLjO X-Gm-Gg: ASbGncvlmoFl+dhek/l7yUd64CNjULjK+8LV9PSFaGNJWTEI/JnVBF4UGjBgZlWS8a8 ZNzT9AQMliOc5rUPxF7LCNFTWQ4McSyoJtUApkGLOXjclnIJsu0cglEcdPuvllZpyonfdhxag0f gv9Z0xMABKxr+rhFfKQYXlR4zk25dA16FwNOjyNlD7CEMqr++5fO7ReiGAdnxF30FAm1SVG9deA aLIWpBLtgN+3XvikYlWRz+PIvqLQQ38hyTncJbmOz9Q/3qB5wMtYXLJ4Ts8DX+vuzByqj6MTMOf qyevzhNv3ZrHkCVhG5Mv X-Received: by 2002:a05:6402:50c7:b0:5e6:1602:bfbb with SMTP id 4fb4d7f45d1cf-5ebcd51c8damr3312649a12.27.1742582171990; Fri, 21 Mar 2025 11:36:11 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE/hWbjx27klsPWgHPxqvdRvwa1hcilhI71INluwbhCQQeIc5hQqPwb8iPNosPolzZGKdzUDA== X-Received: by 2002:a05:6402:50c7:b0:5e6:1602:bfbb with SMTP id 4fb4d7f45d1cf-5ebcd51c8damr3312639a12.27.1742582171408; Fri, 21 Mar 2025 11:36:11 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5ebcd0dfb33sm1748586a12.68.2025.03.21.11.36.10 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:11 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 03/24] qdev, rust/hpet: fix type of HPET "timers" property Date: Fri, 21 Mar 2025 19:35:35 +0100 Message-ID: <20250321183556.155097-4-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org Signed-off-by: Paolo Bonzini --- include/hw/qdev-properties.h | 1 + hw/core/qdev-properties.c | 37 ++++++++++++++++++++++++++++++++++ rust/hw/timer/hpet/src/hpet.rs | 6 +++--- 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h index 15fcec5260c..2c99856caac 100644 --- a/include/hw/qdev-properties.h +++ b/include/hw/qdev-properties.h @@ -52,6 +52,7 @@ extern const PropertyInfo qdev_prop_bool; extern const PropertyInfo qdev_prop_uint8; extern const PropertyInfo qdev_prop_uint16; extern const PropertyInfo qdev_prop_uint32; +extern const PropertyInfo qdev_prop_usize; extern const PropertyInfo qdev_prop_int32; extern const PropertyInfo qdev_prop_uint64; extern const PropertyInfo qdev_prop_uint64_checkmask; diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c index c04df3b337a..147b3ffd16e 100644 --- a/hw/core/qdev-properties.c +++ b/hw/core/qdev-properties.c @@ -442,6 +442,43 @@ const PropertyInfo qdev_prop_uint64_checkmask = { .set = set_uint64_checkmask, }; +/* --- pointer-size integer --- */ + +static void get_usize(Object *obj, Visitor *v, const char *name, void *opaque, + Error **errp) +{ + const Property *prop = opaque; + +#if HOST_LONG_BITS == 32 + uint32_t *ptr = object_field_prop_ptr(obj, prop); + visit_type_uint32(v, name, ptr, errp); +#else + uint64_t *ptr = object_field_prop_ptr(obj, prop); + visit_type_uint64(v, name, ptr, errp); +#endif +} + +static void set_usize(Object *obj, Visitor *v, const char *name, void *opaque, + Error **errp) +{ + const Property *prop = opaque; + +#if HOST_LONG_BITS == 32 + uint32_t *ptr = object_field_prop_ptr(obj, prop); + visit_type_uint32(v, name, ptr, errp); +#else + uint64_t *ptr = object_field_prop_ptr(obj, prop); + visit_type_uint64(v, name, ptr, errp); +#endif +} + +const PropertyInfo qdev_prop_usize = { + .type = "usize", + .get = get_usize, + .set = set_usize, + .set_default_value = qdev_propinfo_set_default_value_uint, +}; + /* --- string --- */ static void release_string(Object *obj, const char *name, void *opaque) diff --git a/rust/hw/timer/hpet/src/hpet.rs b/rust/hw/timer/hpet/src/hpet.rs index 20e0afdfca8..63c1971f0b5 100644 --- a/rust/hw/timer/hpet/src/hpet.rs +++ b/rust/hw/timer/hpet/src/hpet.rs @@ -12,7 +12,7 @@ use qemu_api::{ bindings::{ address_space_memory, address_space_stl_le, qdev_prop_bit, qdev_prop_bool, - qdev_prop_uint32, qdev_prop_uint8, + qdev_prop_uint32, qdev_prop_usize, }, c_str, cell::{BqlCell, BqlRefCell}, @@ -859,8 +859,8 @@ impl ObjectImpl for HPETState { c_str!("timers"), HPETState, num_timers, - unsafe { &qdev_prop_uint8 }, - u8, + unsafe { &qdev_prop_usize }, + usize, default = HPET_MIN_TIMERS ), qemu_api::define_property!( From patchwork Fri Mar 21 18:35:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025879 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 AE882C36000 for ; Fri, 21 Mar 2025 18:37:22 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhEJ-0001uh-3t; Fri, 21 Mar 2025 14:36:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEE-0001c1-IB for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:22 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhED-000721-1r for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582180; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=eJYKYEdYqunbqZeqDFgxfiUWf3ISoZFIFoRTEsG2okw=; b=Lv3d/+5khy+iuc9JuMxCJTDreityzFYJPXpuWpApSuekolNRUOZ6+5eUrnUMzr2VKXsIbL qyVIoGccmZnttsX3RrC/pfu5zzi34uLzUJ8PhB/8TOmH05HJd6qoQ8BWf/eEsI1PzDGsCK P/FkbUxuuwpksQowshH/o86XFyozQ/Q= Received: from mail-ej1-f72.google.com (mail-ej1-f72.google.com [209.85.218.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-633-dIX4ENo2Ohil7_2qkJn_3A-1; Fri, 21 Mar 2025 14:36:16 -0400 X-MC-Unique: dIX4ENo2Ohil7_2qkJn_3A-1 X-Mimecast-MFC-AGG-ID: dIX4ENo2Ohil7_2qkJn_3A_1742582175 Received: by mail-ej1-f72.google.com with SMTP id a640c23a62f3a-ac2aa3513ccso200186166b.0 for ; Fri, 21 Mar 2025 11:36:16 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582174; x=1743186974; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eJYKYEdYqunbqZeqDFgxfiUWf3ISoZFIFoRTEsG2okw=; b=ZBjiVUrLQNJq51tJcE8sLFpVq8mK3SLtVQTvrJqjcJXhypEOdqVvETq9NAuDlmDfKR dDwHEIBbeAu91ucAVxzduwqtv+p/FN+CwdP0pCzOyyAiD8PFtSHBBrwPXdcLZdFVTBMV wUmA0GDPVkkhyEQqdXIT4oDMCMmgEcrbT+/kQfifCbbOeGfbKYQwaZSjJVYFF+tVLIdR gux3nL6r8AozpZRS1xzfoD1qln8jGTL+FGNJaD0ijqwDgEibEtb+3OgYLgo879wY1xEz ZZYIrN1IlCISJiX6LYGp0BzHFmsBSPkekbnRQ152C9YamkPWRStCOHJCYjJLkky6IIIq i3DQ== X-Gm-Message-State: AOJu0YxXwF4hEXxDTttuycJGRuTCGEOchbiw1R6n9hGVjbqqXKDM/scN JOxxhYfVO8lLD+5dl54Jpo8tMuOSlHj3HuBxw/KeVp+GgIZsE+F7HM6AFxdawBXCFojGFT4LHXM KhPfIWuDaAASlrNA8E2VWLl2XRxNGYy+rn2nK0XmzWsfZBu6WCjgIjCwdJ5XIY52G2+W3JwR6Xi iIdJ+ERI2CBXSiJ7ZOIFdMRIOh9Vxf9XFPcFEs X-Gm-Gg: ASbGncuku8SJL1gqQJZ+222cJquj/rAhNVChdRNL5TbCfCY/OQUFVZPmZ9FMaiz3sD5 HGM28HKzaq6jbZC2bMhAobQfdEwfTEQ3Jlfys4JKQfLx7bzv3zKsgMYGUpOPBq7rYIBvAwU8Qk3 TJbCbFCVVDURGo40mVV9PoVDnfe1DjGxTPKf7XKliTVgKn3xua1fVID2tvFjcxgZUDHZzu1851a pLW63Gzxgn5K/TmLvOC+LWRFYiUSxEDARkPmPdsG0Em7sQc8Lw8Vin1fuq0GY/jGM6F/iTp5SB2 AYn1dEfbJz/LKPVU796K X-Received: by 2002:a17:907:1b2a:b0:ac2:8784:4bea with SMTP id a640c23a62f3a-ac3f20d30dbmr511750366b.8.1742582174134; Fri, 21 Mar 2025 11:36:14 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHL4YgOLDFgh9WOMJ8s5Q5SuMud/esYx0rtiJijczdi/umgHKyrZPamHaubZXyqWbh03KPGhQ== X-Received: by 2002:a17:907:1b2a:b0:ac2:8784:4bea with SMTP id a640c23a62f3a-ac3f20d30dbmr511747166b.8.1742582173616; Fri, 21 Mar 2025 11:36:13 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5ebccfb049csm1802736a12.42.2025.03.21.11.36.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:12 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Peter Maydell , Zhao Liu Subject: [PULL 04/24] rust: assertions: add static_assert Date: Fri, 21 Mar 2025 19:35:36 +0100 Message-ID: <20250321183556.155097-5-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.129.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org Add a new assertion that is similar to "const { assert!(...) }" but can be used outside functions and with older versions of Rust. A similar macro is found in Linux, whereas the "static_assertions" crate has a const_assert macro that produces worse error messages. Suggested-by: Peter Maydell Signed-off-by: Paolo Bonzini Reviewed-by: Zhao Liu Reviewed-by: Peter Maydell Signed-off-by: Peter Maydell Link: https://lore.kernel.org/r/20250321112523.1774131-2-peter.maydell@linaro.org Signed-off-by: Paolo Bonzini --- rust/qemu-api/src/assertions.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/rust/qemu-api/src/assertions.rs b/rust/qemu-api/src/assertions.rs index 104dec39774..bba38cfda11 100644 --- a/rust/qemu-api/src/assertions.rs +++ b/rust/qemu-api/src/assertions.rs @@ -120,3 +120,25 @@ macro_rules! assert_match { ); }; } + +/// Assert at compile time that an expression is true. This is similar +/// to `const { assert!(...); }` but it works outside functions, as well as +/// on versions of Rust before 1.79. +/// +/// # Examples +/// +/// ``` +/// # use qemu_api::static_assert; +/// static_assert!("abc".len() == 3); +/// ``` +/// +/// ```compile_fail +/// # use qemu_api::static_assert; +/// static_assert!("abc".len() == 2); // does not compile +/// ``` +#[macro_export] +macro_rules! static_assert { + ($x:expr) => { + const _: () = assert!($x); + }; +} From patchwork Fri Mar 21 18:35:37 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025886 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 70468C36002 for ; Fri, 21 Mar 2025 18:38:28 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhEK-00025s-OV; Fri, 21 Mar 2025 14:36:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEE-0001c7-My for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:22 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhED-000726-4y for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582180; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=kmzz+Z10cF8s6oKBzeZDluVa8sEBlKEmjUCkAgJ5/6I=; b=H8B92rHV6umBp2kGbM9xxYqLLXz+0Gk7CKfnPJqOefFUaZbOIPXTPHb5SjKGLZd80pbOwF 85SDOJOO5bJwZK2jGSu4X8DVPdWMXJ8++42LYvD5iWPuId6H5ch6j8u5oL+1jprXjQ0/1W F8dHeBZtYLjx20HBNkzTNC0CFQZz15g= Received: from mail-ej1-f72.google.com (mail-ej1-f72.google.com [209.85.218.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-594-o1X-onHtN9O72CbQe23b0g-1; Fri, 21 Mar 2025 14:36:19 -0400 X-MC-Unique: o1X-onHtN9O72CbQe23b0g-1 X-Mimecast-MFC-AGG-ID: o1X-onHtN9O72CbQe23b0g_1742582178 Received: by mail-ej1-f72.google.com with SMTP id a640c23a62f3a-ac25852291cso195405666b.2 for ; Fri, 21 Mar 2025 11:36:19 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582176; x=1743186976; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kmzz+Z10cF8s6oKBzeZDluVa8sEBlKEmjUCkAgJ5/6I=; b=mPw1hpo9OqD5OFH8J2X4X72WNwHreGMGprx8VZHaAwM5f9S0OxELUnLPeubiBMysOd csKxSr9GURtM4y9/smosz7gn4megV3VDCYTyqUmXyT9FB0xIlskn6X725vc1D3FsG4fr 0ko4xUQ0NPqDfCRT1F+WAT9wZq9PS9Age3Zu11S2A14hrOEVzxSmjjH6T9rrpicRBHv5 uKGbb7qKpUxm++/gvlC7fDwKfh3/M2gGKNGGlRK7x/qYtbfNMM1fHxoHT5w4Wq2H48AJ DICq23XTcRoZSJ1s60vjf8RiGjZzinJJf9elWLxDPmnytj+VEUMsA29+vzvL9WTRfVAh X0Cw== X-Gm-Message-State: AOJu0YzabG//H28ZR5nvYCWoebjcX8eivHo3GHsfGJbuI1vHFDAE85+m mZjLoOMtjkzNYUITfBO850CWMNNIhD056sqTo55gjMBxDxrqjQdTyDvNVMkU8M6gh4wLGvu5mCy Cb61XQEdL5klrEswzOfEnD2UkHZZlk1TiDdez4LUnREqTZiUTbct08qfjX0kV3Pgb//NXSmydJE bF6DWD/oRqal0TkjA2YMEgZufPyDlSTdAth9zm X-Gm-Gg: ASbGncv4IucfjgCcYdv0COjQqxuPKIyQl3h9OHZhUywxqpzJ9StqXmon/MZmvUTA+5T qbuAtSFHy/MGG9oaYSQxdmTCeMhVteudHFgvLI00KBpkl3RZhTkpmiEv1iF5LklUpW+1ge6/Sw1 lsjpneE9stA0/Q3gysp2i16slnwPE+3k9o/EFYBTY4bb2R3fgz6hogEGeHcTaxD4q+EKBHv1oOD 4PGWIGABoeyzkkP7A1nbzJh8jW2keWy9C6/E9gKkZAZzvq6Y3Rn8BJIdH1djpUbzag0XUuQBSqe aLtZwWDSF7J+3Ez68RhV X-Received: by 2002:a17:907:3ea2:b0:ac2:baab:681c with SMTP id a640c23a62f3a-ac3f22b2bddmr421988166b.28.1742582176360; Fri, 21 Mar 2025 11:36:16 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGG4RC6lChpnRUoT8qFxk85rSdD8ABIvBfoz+pBRkloQQbSxWUuit/uDEF9itMSxxXgFkVOZw== X-Received: by 2002:a17:907:3ea2:b0:ac2:baab:681c with SMTP id a640c23a62f3a-ac3f22b2bddmr421983866b.28.1742582175873; Fri, 21 Mar 2025 11:36:15 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ac3efb51cebsm194768966b.107.2025.03.21.11.36.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:14 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Peter Maydell , Zhao Liu Subject: [PULL 05/24] hw/char/pl011: Pad PL011State struct to same size as Rust impl Date: Fri, 21 Mar 2025 19:35:37 +0100 Message-ID: <20250321183556.155097-6-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Peter Maydell We have some users of the PL011 struct which embed it directly into their own state structs. This means that the Rust version of the device must have a state struct that is the same size or smaller than the C struct. In commit 9b642097d6b7 ("rust: pl011: switch to safe chardev operation") the Rust PL011 state struct changed from having a bindings::CharBackend to a chardev::CharBackend, which made it grow larger than the C version. This results in an assertion at startup when QEMU was built with Rust enabled: $ qemu-system-arm -M raspi2b -display none ERROR:../../qom/object.c:562:object_initialize_with_type: assertion failed: (size >= type->instance_size) The long-term better approach to this problem would be to move our C device code patterns away from "embed a struct" and (back) to "have a pointer to the device", so we can make the C PL011State struct a private implementation detail rather than exposed to its users. For the short term, add a padding field at the end of the C struct so it's big enough that the Rust state struct can fit. Fixes: 9b642097d6b7 ("rust: pl011: switch to safe chardev operation") Reviewed-by: Zhao Liu Signed-off-by: Peter Maydell Link: https://lore.kernel.org/r/20250321112523.1774131-3-peter.maydell@linaro.org Signed-off-by: Paolo Bonzini --- include/hw/char/pl011.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/hw/char/pl011.h b/include/hw/char/pl011.h index 4fcaf3d7d30..299ca9b18bb 100644 --- a/include/hw/char/pl011.h +++ b/include/hw/char/pl011.h @@ -52,6 +52,11 @@ struct PL011State { Clock *clk; bool migrate_clk; const unsigned char *id; + /* + * Since some users embed this struct directly, we must + * ensure that the C struct is at least as big as the Rust one. + */ + uint8_t padding_for_rust[16]; }; DeviceState *pl011_create(hwaddr addr, qemu_irq irq, Chardev *chr); From patchwork Fri Mar 21 18:35:38 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025890 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 40BA9C36000 for ; Fri, 21 Mar 2025 18:39:51 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhEM-0002Ge-9t; Fri, 21 Mar 2025 14:36:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEG-0001kB-Oy for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:24 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEF-00072K-2g for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:24 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582182; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=GxdsFjP0x5vh9Jd/1Uxx3cGM8EOg2J+L3U1w2scPDrQ=; b=dy/5NynkW1Fa0ic4di4zTGv0GGi8GhLqC4D65l2ns/Y8aJwSPnz4yrskMixv9y9QGgfrSv a93PKmywl1aKnASLDhvzJtwQ4vf1NCt71mHp/3ZGSllItc/pAEmGou1ahZWHjBdHjRkUXN zoPWNgV/kdIv68EjnDVetN5VHcr2tGg= Received: from mail-ej1-f69.google.com (mail-ej1-f69.google.com [209.85.218.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-269-7TWddNuRNiO5sNoKOvbR4g-1; Fri, 21 Mar 2025 14:36:20 -0400 X-MC-Unique: 7TWddNuRNiO5sNoKOvbR4g-1 X-Mimecast-MFC-AGG-ID: 7TWddNuRNiO5sNoKOvbR4g_1742582180 Received: by mail-ej1-f69.google.com with SMTP id a640c23a62f3a-ac2db121f95so188796966b.1 for ; Fri, 21 Mar 2025 11:36:20 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582178; x=1743186978; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=GxdsFjP0x5vh9Jd/1Uxx3cGM8EOg2J+L3U1w2scPDrQ=; b=M5RXweMCqA1aY9xZkugS5gK0NPRbO9Xzsj3R856cfi0NITeoHjZDueF/G6gR+vbvMA MQShFXpTRrx7MPoBgpLCmFM20rB/I82O5/PKpqjRapC4+nVwcNq85TTX2j/oAkAkhGGn 16tFrx0WrYNvarBPIhZxlcYv2z2/e0XNMOw2BWTIPqt/7de94bjWZBC77XQ6SIpfEW6J jWXSeRYET9369ijlcxJPUI7G4OGazwbUxCFlC+uEHNkwJsWFl9ur5eTFR46/JWeNnKRJ VuVwgjEdalFQFQSZFNL4Z8l8/MayWiUfgBWytzGLHNOtCXkctAzN+ijG3fN1lQUf++Ij u6kw== X-Gm-Message-State: AOJu0YzoEwo+6K28hp0KEWFr2nNydQ6yADxVbyK1wHL7UKxs1aVfC5JC mWSD2tT/r6pgVBiez/TpJOeII8DDcE1k8yDiCH6n+rWEdE1pNcFqm8O4lhNlIOFLUHlHe70WpoK MTfK4Ea7Mo5CDv3amHDpXOqSD/pdKaA8BAEVORbNoroyOvEhAt0xcdi37iUQ2Cl2l0UVhqbYnbb w2jiJN9Q5AsdJBmfw13b768THRUdfvb2ZupLJd X-Gm-Gg: ASbGncsUJpl38MsZ8AEWh4WbCN2F6kZ/XPPczQ2RkzZ5mSirsxX6gnl+jrInKCHE16o MGPdNHT1wq71DmUYM88k2uU04HvONXSVVS2G3lw1dzBihsYGBaLWUXt8vFJ02XVNOcAVDgYgvzw 3MIoIhEis/89ihgZbBWUwW3F81vWKiWN06wiqTXVLVUlz18XHpKSOTIgw14sy1mBjay8s38iOsq DcReLfFIKAMLUGMMNjqrXmC4HExyD3L7uf6JGfQqanGqaOm/HVPq2Ei4Hv4ZAXOJfAIqr5+zoX7 hJE+nHawYelxZTGddHa/ X-Received: by 2002:a17:907:d26:b0:ac3:45b5:f4cc with SMTP id a640c23a62f3a-ac3f25032d1mr453261666b.44.1742582177688; Fri, 21 Mar 2025 11:36:17 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEv3KqT8vGvDDwhAEfw+OPtmfmvMpoI4MpWRKTIuo9dCwkQQ1p02tb1PeIa0NlfluJZZrUvhQ== X-Received: by 2002:a17:907:d26:b0:ac3:45b5:f4cc with SMTP id a640c23a62f3a-ac3f25032d1mr453258666b.44.1742582177106; Fri, 21 Mar 2025 11:36:17 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5ebcd0c7737sm1766637a12.49.2025.03.21.11.36.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:16 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Peter Maydell , Zhao Liu Subject: [PULL 06/24] rust: pl011: Check size of state struct at compile time Date: Fri, 21 Mar 2025 19:35:38 +0100 Message-ID: <20250321183556.155097-7-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.129.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Peter Maydell The PL011 device's C implementation exposes its PL011State struct to users of the device, and one common usage pattern is to embed that struct into the user's own state struct. (The internals of the struct are technically visible to the C user of the device, but in practice are treated as implementation details.) This means that the Rust version of the state struct must not be larger than the C version's struct; otherwise it will trip a runtime assertion in object_initialize_type() when the C user attempts to in-place initialize the type. Add a compile-time assertion on the Rust side, so that if we accidentally make the Rust device state larger we know immediately that we need to expand the padding in the C version of the struct. Reviewed-by: Zhao Liu Signed-off-by: Peter Maydell Link: https://lore.kernel.org/r/20250321112523.1774131-4-peter.maydell@linaro.org Signed-off-by: Paolo Bonzini --- rust/wrapper.h | 1 + rust/hw/char/pl011/src/device.rs | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/rust/wrapper.h b/rust/wrapper.h index d927ad6799d..d4fec546571 100644 --- a/rust/wrapper.h +++ b/rust/wrapper.h @@ -65,3 +65,4 @@ typedef enum memory_order { #include "exec/memattrs.h" #include "qemu/timer.h" #include "exec/address-spaces.h" +#include "hw/char/pl011.h" diff --git a/rust/hw/char/pl011/src/device.rs b/rust/hw/char/pl011/src/device.rs index f137b49feaf..bf88e0b00a0 100644 --- a/rust/hw/char/pl011/src/device.rs +++ b/rust/hw/char/pl011/src/device.rs @@ -2,7 +2,7 @@ // Author(s): Manos Pitsidianakis // SPDX-License-Identifier: GPL-2.0-or-later -use std::{ffi::CStr, ptr::addr_of_mut}; +use std::{ffi::CStr, mem::size_of, ptr::addr_of_mut}; use qemu_api::{ chardev::{CharBackend, Chardev, Event}, @@ -12,6 +12,7 @@ prelude::*, qdev::{Clock, ClockEvent, DeviceImpl, DeviceState, Property, ResetType, ResettablePhasesImpl}, qom::{ObjectImpl, Owned, ParentField}, + static_assert, sysbus::{SysBusDevice, SysBusDeviceImpl}, vmstate::VMStateDescription, }; @@ -124,6 +125,12 @@ pub struct PL011State { pub migrate_clock: bool, } +// Some C users of this device embed its state struct into their own +// structs, so the size of the Rust version must not be any larger +// than the size of the C one. If this assert triggers you need to +// expand the padding_for_rust[] array in the C PL011State struct. +static_assert!(size_of::() <= size_of::()); + qom_isa!(PL011State : SysBusDevice, DeviceState, Object); #[repr(C)] From patchwork Fri Mar 21 18:35:39 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025883 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 BC185C36000 for ; Fri, 21 Mar 2025 18:37:59 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhEQ-0002P8-GR; Fri, 21 Mar 2025 14:36:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEL-0002CQ-FI for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:29 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEJ-00072q-Fn for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582186; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=dFRuN/PFPVxX94u+Hzbmt9NAGJi6Ilk0kcnMUquL6Qs=; b=aWWW0wVDPhDBJ1h+Am220U4r2yHUPXImS6bG9g2zihYV1jENWfO/gNV1Dd3E/iyBWnuVoK l2XyPpQiLQ1DZbCTTh6LcPXqpjBqarPXax6laqyllQUDqqvBX7wFmn0R6ZWKgRQ4w1sBb3 W31KMICGM8KZSJBKA8XefQTFoi7Uuh8= Received: from mail-ej1-f70.google.com (mail-ej1-f70.google.com [209.85.218.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-615-ouCX0_8ZNcGbvSaagCP_HQ-1; Fri, 21 Mar 2025 14:36:25 -0400 X-MC-Unique: ouCX0_8ZNcGbvSaagCP_HQ-1 X-Mimecast-MFC-AGG-ID: ouCX0_8ZNcGbvSaagCP_HQ_1742582184 Received: by mail-ej1-f70.google.com with SMTP id a640c23a62f3a-ac3db5469fbso177395066b.0 for ; Fri, 21 Mar 2025 11:36:24 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582183; x=1743186983; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dFRuN/PFPVxX94u+Hzbmt9NAGJi6Ilk0kcnMUquL6Qs=; b=I+FCEPYNYuHLpdTBi2ENaE4BXeGkABATkG+TvZu/sM50p9xLjGBf7KfcYxSRP7VNg0 RYria92gbQOoS/cs8AyciIu1SnPyRZ4pEsPb9hj8o66ehOd6jfdcHDDoZyAEXyfS9NoW OBLWZhiUcDU2W5vLZdmz1uOMQldQarG6wM0WpMqNrBZ0l+AdcpayNsB3YDOfaNpayOhw EoDdun8gXPsZenVpnV7buastOuaY/OnpyMNIDWpsjjmoKRh5rl5V0RtekoZBjgRoMWwo o4mopd9WhsjOnzs/ZNZ9vqJNpn6VneDZd1b9EkY2GnTlOK939lhb4RVY3b84FNL146J3 K1mQ== X-Gm-Message-State: AOJu0Yzo0fM7zTRnycoXPPb36WA+EaYc5j/HLW0sCzg/gv3J5jkeAtM9 E07B3VcQAdnQjZeDLypkROiFULibtH11y6XpZlA4pu/lN00sx83uFsgQOj97zoLQBfRoLJCZMrw 7NfZt/o3MiIhZ3zPBswwTfWcIWMr4fjvJOhwZHglY0mtSplImJ0weptHdbUxCP95YchyRsQJQjW FXPZ4ZkGuVk0yVzzPGVNRX9wRd1BjUKdrsPA+6 X-Gm-Gg: ASbGnct0gL6vYGy83ilAF207txHmoLChNhXRuAMaYuwArcsv/WQhWriKtVULIbPiqER LLDQ1SU2QLSOsEguZZQ2GzC8IqUij/TmAS/6BqsNjpNFuUI1kjMxnk/8jyTX4jUzCEF51atRCdD 6cn5Ke4yNVi97OLULa8IVvf1GZldsM8RGJmyw3kPyMmAuk3wXpMT3elQIOMKrUxpaoYd54IW5zN UhiICN6Qot4yp7z3AwBr7jAH6CbTgSCf1ydy5YYhROQzlmHZCFxqOGATeTztuLr8Gl4KtW7czCh VeL6UV7c2PWbKfwSXfaw X-Received: by 2002:a17:907:1b2a:b0:ac3:c2eb:bd66 with SMTP id a640c23a62f3a-ac3f2273481mr503210366b.23.1742582182954; Fri, 21 Mar 2025 11:36:22 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGa9IgGJHQz9iQ+QdQGJLTsxMfUK5p/UA/0DHZpcL6IZcUW0E3j0mN830bCe1/30yEhzPwyeg== X-Received: by 2002:a17:907:1b2a:b0:ac3:c2eb:bd66 with SMTP id a640c23a62f3a-ac3f2273481mr503205966b.23.1742582182430; Fri, 21 Mar 2025 11:36:22 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ac3ef8676c2sm193538566b.9.2025.03.21.11.36.17 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:17 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 07/24] load_aout: replace bswap_needed with big_endian Date: Fri, 21 Mar 2025 19:35:39 +0100 Message-ID: <20250321183556.155097-8-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.129.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org Targets know whether they are big-endian more than they know if the endianness is different from the host: the former is mostly a constant, at least in machine creation code, while the latter has to be computed with TARGET_BIG_ENDIAN != HOST_BIG_ENDIAN or something like that. load_aout, however, takes a "bswap_needed" argument. Replace it with a "big_endian" argument; even though all users are big-endian, it is cheap enough to keep the optional swapping functionality even for little-endian boards. Signed-off-by: Paolo Bonzini --- include/hw/loader.h | 2 +- hw/core/loader.c | 4 ++-- hw/ppc/mac_newworld.c | 7 +------ hw/ppc/mac_oldworld.c | 7 +------ hw/sparc/sun4m.c | 9 +-------- hw/sparc64/sun4u.c | 9 +-------- 6 files changed, 7 insertions(+), 31 deletions(-) diff --git a/include/hw/loader.h b/include/hw/loader.h index 784a93d6c17..d280dc33e96 100644 --- a/include/hw/loader.h +++ b/include/hw/loader.h @@ -190,7 +190,7 @@ ssize_t load_elf(const char *filename, void load_elf_hdr(const char *filename, void *hdr, bool *is64, Error **errp); ssize_t load_aout(const char *filename, hwaddr addr, int max_sz, - int bswap_needed, hwaddr target_page_size); + bool big_endian, hwaddr target_page_size); #define LOAD_UIMAGE_LOADADDR_INVALID (-1) diff --git a/hw/core/loader.c b/hw/core/loader.c index ce6ff1b52e3..2e35f0aa905 100644 --- a/hw/core/loader.c +++ b/hw/core/loader.c @@ -226,7 +226,7 @@ static void bswap_ahdr(struct exec *e) ssize_t load_aout(const char *filename, hwaddr addr, int max_sz, - int bswap_needed, hwaddr target_page_size) + bool big_endian, hwaddr target_page_size) { int fd; ssize_t size, ret; @@ -241,7 +241,7 @@ ssize_t load_aout(const char *filename, hwaddr addr, int max_sz, if (size < 0) goto fail; - if (bswap_needed) { + if (big_endian != HOST_BIG_ENDIAN) { bswap_ahdr(&e); } diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c index cb3dc3ab482..2d5309d6f55 100644 --- a/hw/ppc/mac_newworld.c +++ b/hw/ppc/mac_newworld.c @@ -197,11 +197,6 @@ static void ppc_core99_init(MachineState *machine) } if (machine->kernel_filename) { - int bswap_needed = 0; - -#ifdef BSWAP_NEEDED - bswap_needed = 1; -#endif kernel_base = KERNEL_LOAD_ADDR; kernel_size = load_elf(machine->kernel_filename, NULL, translate_kernel_address, NULL, NULL, NULL, @@ -209,7 +204,7 @@ static void ppc_core99_init(MachineState *machine) if (kernel_size < 0) { kernel_size = load_aout(machine->kernel_filename, kernel_base, machine->ram_size - kernel_base, - bswap_needed, TARGET_PAGE_SIZE); + true, TARGET_PAGE_SIZE); } if (kernel_size < 0) { kernel_size = load_image_targphys(machine->kernel_filename, diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c index 0dbcea035c3..b5814690f5a 100644 --- a/hw/ppc/mac_oldworld.c +++ b/hw/ppc/mac_oldworld.c @@ -153,11 +153,6 @@ static void ppc_heathrow_init(MachineState *machine) } if (machine->kernel_filename) { - int bswap_needed = 0; - -#ifdef BSWAP_NEEDED - bswap_needed = 1; -#endif kernel_base = KERNEL_LOAD_ADDR; kernel_size = load_elf(machine->kernel_filename, NULL, translate_kernel_address, NULL, NULL, NULL, @@ -165,7 +160,7 @@ static void ppc_heathrow_init(MachineState *machine) if (kernel_size < 0) { kernel_size = load_aout(machine->kernel_filename, kernel_base, machine->ram_size - kernel_base, - bswap_needed, TARGET_PAGE_SIZE); + true, TARGET_PAGE_SIZE); } if (kernel_size < 0) { kernel_size = load_image_targphys(machine->kernel_filename, diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c index a48d3622c5a..5aaafb40dac 100644 --- a/hw/sparc/sun4m.c +++ b/hw/sparc/sun4m.c @@ -233,20 +233,13 @@ static unsigned long sun4m_load_kernel(const char *kernel_filename, kernel_size = 0; if (linux_boot) { - int bswap_needed; - -#ifdef BSWAP_NEEDED - bswap_needed = 1; -#else - bswap_needed = 0; -#endif kernel_size = load_elf(kernel_filename, NULL, translate_kernel_address, NULL, NULL, NULL, NULL, NULL, ELFDATA2MSB, EM_SPARC, 0, 0); if (kernel_size < 0) kernel_size = load_aout(kernel_filename, KERNEL_LOAD_ADDR, - RAM_size - KERNEL_LOAD_ADDR, bswap_needed, + RAM_size - KERNEL_LOAD_ADDR, true, TARGET_PAGE_SIZE); if (kernel_size < 0) kernel_size = load_image_targphys(kernel_filename, diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c index 8ab5cf0461f..d3cb7270ff5 100644 --- a/hw/sparc64/sun4u.c +++ b/hw/sparc64/sun4u.c @@ -168,13 +168,6 @@ static uint64_t sun4u_load_kernel(const char *kernel_filename, kernel_size = 0; if (linux_boot) { - int bswap_needed; - -#ifdef BSWAP_NEEDED - bswap_needed = 1; -#else - bswap_needed = 0; -#endif kernel_size = load_elf(kernel_filename, NULL, NULL, NULL, kernel_entry, kernel_addr, &kernel_top, NULL, ELFDATA2MSB, EM_SPARCV9, 0, 0); @@ -182,7 +175,7 @@ static uint64_t sun4u_load_kernel(const char *kernel_filename, *kernel_addr = KERNEL_LOAD_ADDR; *kernel_entry = KERNEL_LOAD_ADDR; kernel_size = load_aout(kernel_filename, KERNEL_LOAD_ADDR, - RAM_size - KERNEL_LOAD_ADDR, bswap_needed, + RAM_size - KERNEL_LOAD_ADDR, true, TARGET_PAGE_SIZE); } if (kernel_size < 0) { From patchwork Fri Mar 21 18:35:40 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025894 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 86D08C36002 for ; Fri, 21 Mar 2025 18:40:37 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhEV-0002fJ-ET; Fri, 21 Mar 2025 14:36:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEN-0002Nl-Bs for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:31 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEL-000732-6u for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582188; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ARwQvT1yfemKSMVduMIcuJwWl7QM1d9mutRu5Jpdvbc=; b=ha3Acsru2kMEegsAo7IhiRlA4KsrkNdfjbQg2tscmW8LBsaIIeP+OeSRkZBgtJTOGm9h8R i9KuE0vuptrVYqJgXeAKtD+oDP0BykM+yAMSwsk4GxfeXlBjrus8mZj6q3lYdPnHAy/aC2 anbRiwSasqtcJGiLVagQ/bCdEdtNmGc= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-120-agGpQ4-mOYa3yLLE6PuHtA-1; Fri, 21 Mar 2025 14:36:26 -0400 X-MC-Unique: agGpQ4-mOYa3yLLE6PuHtA-1 X-Mimecast-MFC-AGG-ID: agGpQ4-mOYa3yLLE6PuHtA_1742582185 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-43cf172ffe1so16791975e9.3 for ; Fri, 21 Mar 2025 11:36:26 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582184; x=1743186984; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ARwQvT1yfemKSMVduMIcuJwWl7QM1d9mutRu5Jpdvbc=; b=gESUC63ObrCJF68W+plpmEqVYMLFYW+dVgZZ8xma7Ac14cQjKYLFM+mQ1Swp+4zxwX NaCXLSPRW/l7ft3+uOYwuRgsdT/6Pj+QpU8INYmiLjLxijx35M8f8bfwmG8GsIxvyyue d1pmz+HYmgmof/8Ml86SGY7d6Z5OJGnHp5AO8i0uTB3ONLxB79bqz95en8JcU99JGw65 BjOgUVp+fpsKgKilTtwchYeodwgExs6CYa0+aHykgqvztcSLRG3vCUf3GePdfSElvoHC zE2DTb6PqmS1e7FN7SsatgtRdOCOHoRpzesPtD74/lq0snRy3QiXqYHAK9KRy5kERBuP +7gA== X-Gm-Message-State: AOJu0YzjTRJCblAUfG6IvMyeZw/6a7XIGMmzZrdekiMiTqGnRJRD+ojJ jtlG7GSP//ZjTZ3AwbmCWENTrU+qm5vmcl69NFb4ilPyMHtvseUOY1yNcMjHaTNyfB+/nHZN9iq e6QPYolgEVeEDv6+gC+Sd3NnIZ8cq1rh5TOH6v+W0KGLQPY5Bg8fcFy+1rqvCBW7gNCIAm0KCpM qtAnBbklJ+EUIWsZcIG1XDki/7W17BizMUr0do X-Gm-Gg: ASbGncsLf5Cl3clRE4LEzDSAEABP/gWfGMxNxIYatF3VZDBDmwYluNZoAMVjQ0NpK33 Q3AScxz68IBCjc5OJEaxy5EtDRM/wgIgKkxvMQqbCiRq43ko30eWyFq4d84o8tCheuH3DORm/NH nx3ReWFhwraVJw7nccxVZ8ox+jNnztMPlDi6VevON2Duwrz0DsDbMvdJoRG25BmUvUoFXWGup2H bbkide9/+RmReAhHM1Mw0y2vPhW/+N3EqAkzlZEf2dAD1vY45v4Fg2MXacJEhmKWGeCTtEbuerH LLkCLNHNMG4RGGC7WoXs X-Received: by 2002:a05:600c:c07:b0:43d:45a:8fc1 with SMTP id 5b1f17b1804b1-43d509e4640mr41408395e9.4.1742582184450; Fri, 21 Mar 2025 11:36:24 -0700 (PDT) X-Google-Smtp-Source: AGHT+IExia5UvrQSVHPoBcIrkOomqSQ8Oaj7AVZIKYatjFo3b3QqoM9Cc7MiWAl7ZAuq8sRs+//gsA== X-Received: by 2002:a05:600c:c07:b0:43d:45a:8fc1 with SMTP id 5b1f17b1804b1-43d509e4640mr41408115e9.4.1742582183861; Fri, 21 Mar 2025 11:36:23 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3997f9a3a10sm3012109f8f.28.2025.03.21.11.36.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:23 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Pierrick Bouvier Subject: [PULL 08/24] exec/cpu-all: remove BSWAP_NEEDED Date: Fri, 21 Mar 2025 19:35:40 +0100 Message-ID: <20250321183556.155097-9-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Pierrick Bouvier This identifier is poisoned, so it can't be used from common code anyway. We replace all occurrences with its definition directly. Signed-off-by: Pierrick Bouvier Link: https://lore.kernel.org/r/20250320223002.2915728-2-pierrick.bouvier@linaro.org Signed-off-by: Paolo Bonzini --- include/exec/cpu-all.h | 12 ------------ include/exec/poison.h | 1 - linux-user/syscall_defs.h | 2 +- bsd-user/elfload.c | 6 +++--- linux-user/elfload.c | 8 ++++---- 5 files changed, 8 insertions(+), 21 deletions(-) diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h index 8cd6c00cf89..47b14446b8f 100644 --- a/include/exec/cpu-all.h +++ b/include/exec/cpu-all.h @@ -26,18 +26,6 @@ #include "exec/tswap.h" #include "hw/core/cpu.h" -/* some important defines: - * - * HOST_BIG_ENDIAN : whether the host cpu is big endian and - * otherwise little endian. - * - * TARGET_BIG_ENDIAN : same for the target cpu - */ - -#if HOST_BIG_ENDIAN != TARGET_BIG_ENDIAN -#define BSWAP_NEEDED -#endif - /* Target-endianness CPU memory access functions. These fit into the * {ld,st}{type}{sign}{size}{endian}_p naming scheme described in bswap.h. */ diff --git a/include/exec/poison.h b/include/exec/poison.h index 8ed04b31083..2c151fd1e0c 100644 --- a/include/exec/poison.h +++ b/include/exec/poison.h @@ -37,7 +37,6 @@ #pragma GCC poison TARGET_NAME #pragma GCC poison TARGET_SUPPORTS_MTTCG #pragma GCC poison TARGET_BIG_ENDIAN -#pragma GCC poison BSWAP_NEEDED #pragma GCC poison TARGET_LONG_BITS #pragma GCC poison TARGET_FMT_lx diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h index 86d773add75..5d227599924 100644 --- a/linux-user/syscall_defs.h +++ b/linux-user/syscall_defs.h @@ -462,7 +462,7 @@ typedef struct { abi_ulong sig[TARGET_NSIG_WORDS]; } target_sigset_t; -#ifdef BSWAP_NEEDED +#if HOST_BIG_ENDIAN != TARGET_BIG_ENDIAN static inline void tswap_sigset(target_sigset_t *d, const target_sigset_t *s) { int i; diff --git a/bsd-user/elfload.c b/bsd-user/elfload.c index 833fa3bd057..3bca0cc9ede 100644 --- a/bsd-user/elfload.c +++ b/bsd-user/elfload.c @@ -44,7 +44,7 @@ static inline void memcpy_fromfs(void *to, const void *from, unsigned long n) memcpy(to, from, n); } -#ifdef BSWAP_NEEDED +#if HOST_BIG_ENDIAN != TARGET_BIG_ENDIAN static void bswap_ehdr(struct elfhdr *ehdr) { bswap16s(&ehdr->e_type); /* Object file type */ @@ -111,7 +111,7 @@ static void bswap_note(struct elf_note *en) bswap32s(&en->n_type); } -#else /* ! BSWAP_NEEDED */ +#else static void bswap_ehdr(struct elfhdr *ehdr) { } static void bswap_phdr(struct elf_phdr *phdr, int phnum) { } @@ -119,7 +119,7 @@ static void bswap_shdr(struct elf_shdr *shdr, int shnum) { } static void bswap_sym(struct elf_sym *sym) { } static void bswap_note(struct elf_note *en) { } -#endif /* ! BSWAP_NEEDED */ +#endif /* HOST_BIG_ENDIAN != TARGET_BIG_ENDIAN */ #include "elfcore.c" diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 8799e4ea27d..fa83d78667c 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -2121,7 +2121,7 @@ static inline void memcpy_fromfs(void * to, const void * from, unsigned long n) memcpy(to, from, n); } -#ifdef BSWAP_NEEDED +#if HOST_BIG_ENDIAN != TARGET_BIG_ENDIAN static void bswap_ehdr(struct elfhdr *ehdr) { bswap16s(&ehdr->e_type); /* Object file type */ @@ -3143,7 +3143,7 @@ static bool parse_elf_properties(const ImageSource *src, * The contents of a valid PT_GNU_PROPERTY is a sequence of uint32_t. * Swap most of them now, beyond the header and namesz. */ -#ifdef BSWAP_NEEDED +#if HOST_BIG_ENDIAN != TARGET_BIG_ENDIAN for (int i = 4; i < n / 4; i++) { bswap32s(note.data + i); } @@ -3999,7 +3999,7 @@ struct target_elf_prpsinfo { char pr_psargs[ELF_PRARGSZ]; /* initial part of arg list */ }; -#ifdef BSWAP_NEEDED +#if HOST_BIG_ENDIAN != TARGET_BIG_ENDIAN static void bswap_prstatus(struct target_elf_prstatus *prstatus) { prstatus->pr_info.si_signo = tswap32(prstatus->pr_info.si_signo); @@ -4038,7 +4038,7 @@ static void bswap_note(struct elf_note *en) static inline void bswap_prstatus(struct target_elf_prstatus *p) { } static inline void bswap_psinfo(struct target_elf_prpsinfo *p) {} static inline void bswap_note(struct elf_note *en) { } -#endif /* BSWAP_NEEDED */ +#endif /* HOST_BIG_ENDIAN != TARGET_BIG_ENDIAN */ /* * Calculate file (dump) size of given memory region. From patchwork Fri Mar 21 18:35:41 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025880 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 1E0EAC36002 for ; Fri, 21 Mar 2025 18:37:40 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhEX-0002qg-RR; Fri, 21 Mar 2025 14:36:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEP-0002P9-1l for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:33 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEN-00073J-4a for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582190; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=NLiRCVPflMZBiuoT6PpWJ4Rvv6yoCgprry9CsORptr0=; b=FrmH6KqbTN7iBTKtmterIJWgrkbdL+jhGlgNvAptIj+IbKBvFZjGamwH1vACczCvZBsetY WIoWEomkj+qK7KVVhmwNyUi75tnjrHQsRMQ0cnAduzNx05UUdn2sS83yKM5e/6uuntuaCA rKvPywX2fWc4rl0y9Px75nuU1L5HycY= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-287-uKjOlCnCOkeJX08uJHN4ng-1; Fri, 21 Mar 2025 14:36:28 -0400 X-MC-Unique: uKjOlCnCOkeJX08uJHN4ng-1 X-Mimecast-MFC-AGG-ID: uKjOlCnCOkeJX08uJHN4ng_1742582188 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-43ceed237efso18710755e9.0 for ; Fri, 21 Mar 2025 11:36:28 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582187; x=1743186987; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NLiRCVPflMZBiuoT6PpWJ4Rvv6yoCgprry9CsORptr0=; b=HSB6aZ8VIj5thRVZR9rIOmLXRtR5K5R1f2bFyDO/teZh7Dn+cwGMNw8LyhXxtn0pyh BdfVxYxL+43zyBgHH0prMvwjgt0wmzvTmcrLZP4+TisKS8axFP1gFCvM3fI24MqTHNIp mUZEcSo2X7otVQ3q0dpdRhS2eI3xMlEI7bBG/4GzhqCYA73kUOx+Mmai+kd94N8EQd8t mGT041pA+vTXZd/wDXLtvyrAnwIRfOodPqMsAAbG1omPaqJMtHy2rZWKHPKFcrzYMaGc g+S9B6sXd87cufvkOpTzcjYGXq+CTIDCKPr4O0gXGi0YnbBtNv1CklklrRKefbftf+3O jxTQ== X-Gm-Message-State: AOJu0Yy8y9hphUvPueWP6Jykhxw1A1fMnAZEi1oQgp87pGgJTP7EZAlj CoJ6Kkwp5ly8OIA2nmTUFibP5J8sMm1kXQtgqeL16t3z9gFvhTW05PLt7Z5N2b924+hDHfg5lF9 oXjL6Xq8vfjVTTb458rQCw1+j8FHd5uClFpo6BiNKxHwFlcXzgexu7HM1DHlETqwT4HoxL3Zhin LWZaJ3E0kdk2XGRVmcqclS1c+ionCRTCMT6DDZ X-Gm-Gg: ASbGncvzLiOGvlqZUFAubHlB6tnoN2V99ck/p5wDaEUDDxtwsmJF3j66+OgUYkPyRD/ TQrPSA6rPMQlKJw2EVwVk1rXLbH6fGSqeLR9553f+OoKl6chPJMA/TPAGtrD7vU6U+BDIGf0vDr OpLgfiA3zjzRWFAubeq26FuaayRxuFtQShMSRlOBUapARiRdHg1YNoxVipHbHZAh74wbyX8wcvT pIT07INEISbPpsMnLYg1ZsTQZsD2UznQB2SBZY7oE72lXTIUwdTFr9SZqoS9SaBIB4Lze868DlU hhelaNynketpbn88/ETx X-Received: by 2002:a05:600c:1547:b0:43c:f64c:44a4 with SMTP id 5b1f17b1804b1-43d509ec734mr40116905e9.8.1742582187204; Fri, 21 Mar 2025 11:36:27 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHO0IOMLGDvkLwIhTUuBjv8p9yLjAZN86Kfvg1GNpVKlVwx0Fbi1MVhA1cBNLXaulRPzF8Kug== X-Received: by 2002:a05:600c:1547:b0:43c:f64c:44a4 with SMTP id 5b1f17b1804b1-43d509ec734mr40116695e9.8.1742582186661; Fri, 21 Mar 2025 11:36:26 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d43f43e2asm87107535e9.11.2025.03.21.11.36.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:24 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Zhao Liu Subject: [PULL 09/24] rust/vmstate: Remove unnecessary unsafe Date: Fri, 21 Mar 2025 19:35:41 +0100 Message-ID: <20250321183556.155097-10-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.129.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Zhao Liu Remove the `unsafe` block of vmsd, because vmsd (passed to vmstate_struct) is defined in Rust side now, and it doesn't need `unsafe`. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20250318130219.1799170-2-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/qemu-api/src/vmstate.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/qemu-api/src/vmstate.rs b/rust/qemu-api/src/vmstate.rs index f0510ae769d..6698dfe7aeb 100644 --- a/rust/qemu-api/src/vmstate.rs +++ b/rust/qemu-api/src/vmstate.rs @@ -447,7 +447,7 @@ macro_rules! vmstate_struct { }, size: ::core::mem::size_of::<$type>(), flags: $crate::bindings::VMStateFlags::VMS_STRUCT, - vmsd: unsafe { $vmsd }, + vmsd: $vmsd, ..$crate::zeroable::Zeroable::ZERO $( .with_varray_flag($crate::call_func_with_field!( $crate::vmstate::vmstate_varray_flag, From patchwork Fri Mar 21 18:35:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025881 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 C2C18C36000 for ; Fri, 21 Mar 2025 18:37:40 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhFC-0003UX-AM; Fri, 21 Mar 2025 14:37:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhER-0002Vc-2q for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:35 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEP-000741-EM for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:34 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582192; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=6+3mEWFo3Ciw+4x0yx2aFFWrzswVsxu+6KtQ7mPDXTc=; b=UbVf82Qj4wpNcVEShfq2DgC3X86BCsDU/oZ9NpSfc6ok+BF9uVZ0FDwo6y1EWrPWcCa0XP RJvIJnf3o8FJtiFv74M779ZzvmD+BPvU0TVmRYYHO0axahkyuSEkCA8KWtuZkWbmOpq/OC N+fkXMWg2ZxUn4sm23Q3nO57QW5CrLI= Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-371-WhU5_diMOe2FFqLQOCE2-Q-1; Fri, 21 Mar 2025 14:36:31 -0400 X-MC-Unique: WhU5_diMOe2FFqLQOCE2-Q-1 X-Mimecast-MFC-AGG-ID: WhU5_diMOe2FFqLQOCE2-Q_1742582190 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-43d51bd9b45so5509655e9.1 for ; Fri, 21 Mar 2025 11:36:30 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582189; x=1743186989; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6+3mEWFo3Ciw+4x0yx2aFFWrzswVsxu+6KtQ7mPDXTc=; b=ivtbDfoiZR/j28QQNLuxDwDc3VKt9MzmxlYxA7cmMpMPO49dd+q8fQSwS6iTcO9sLK AmG4fxT4dDceZjJkITJq8lQHj+75bDiwr1x1N28P40z6fpB55pi6PfsK60ZPN+ywqv2Z 0E91gXdfm17ITEKyYlZBB2gg5F//OcLm+yjSjyMwFeex74BYHWb60dbzBVU6iEGNrqlv ULxQrvkQPEWQxV7IlyOMLhYJbU9Lcj9/avFnmaStqG4vePQMpmiLpY3iIZwmT0DOEleD Mti2AxmFz9k/Og5k74ze5TipCt02SLMgK9IyR/aEKtsHL5EseJ0X80zVeG0SaxZMWKiU 1NWg== X-Gm-Message-State: AOJu0YyB2CXA3gZFt8WcPnRcz2n7Egf1YLjuMed0e2Tealg5ZzR2HGMe UxNULzRjs+K9ZxNAhW6jeOyPcuQH9EsbkLwLaZrQ7S98go6d2bCKbivTU/hVHQ9NUeCKGF68CMz kq9gH/7uDWgCKLuhUGs8LzPJmtZ8COBfjneQqSWr+wNIWF28ahpCdSBKbzqP0Vdj+NmRc8tE5Jj ZU48h+dVRJPWMnQnZHAf4xFeeU2E5NbeFTBpbY X-Gm-Gg: ASbGncu0tN16Yb2bufoZGKcH0igB4S6J902/VGTpqZfpruALbShBV2S6UGfQTjQmGvE TlDlNnBHozOcntjpDgUyPbb8s4SGOzYYhWgAO+Jt/0BcAs7QAlG3H+HfenYchSA0zhq0ygiVBQg Pl9cx8BTzJGkaxaZtynWymYOEFFSDe7UjVMrPp7w4VcBJho5WOOfzSKaFK97FWwM6nfKfoahDab zpgW2E/YD+aeHEfEuO/Bet677/LpICBHgJEvTF91EsYpmhiTFTyyLYF1vdHDbrhpH5CV7o2ajKS DmS1Gu+ujYR03Mao5Vqj X-Received: by 2002:a05:600c:3b9f:b0:43c:ec4c:25b4 with SMTP id 5b1f17b1804b1-43d509ea8e7mr42966085e9.10.1742582189042; Fri, 21 Mar 2025 11:36:29 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGJqNyRCkzfxPCIMKt/iaR0qyoOwkQqhjlp0pgJ7OF1urXv6qJChEHWZxUhKfDu746LgAHDlA== X-Received: by 2002:a05:600c:3b9f:b0:43c:ec4c:25b4 with SMTP id 5b1f17b1804b1-43d509ea8e7mr42965865e9.10.1742582188586; Fri, 21 Mar 2025 11:36:28 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3997f9957d9sm3023335f8f.9.2025.03.21.11.36.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:27 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Zhao Liu Subject: [PULL 10/24] rust/vmstate: Fix num_offset in vmstate macros Date: Fri, 21 Mar 2025 19:35:42 +0100 Message-ID: <20250321183556.155097-11-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.129.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Zhao Liu `num_offset` is a member of `VMStateField`, and there's no need to use "." to access this field in a `VMStateField` instance. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20250318130219.1799170-3-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/qemu-api/src/vmstate.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rust/qemu-api/src/vmstate.rs b/rust/qemu-api/src/vmstate.rs index 6698dfe7aeb..9533b1250fa 100644 --- a/rust/qemu-api/src/vmstate.rs +++ b/rust/qemu-api/src/vmstate.rs @@ -208,7 +208,7 @@ macro_rules! vmstate_of { .as_bytes() .as_ptr() as *const ::std::os::raw::c_char, offset: $crate::offset_of!($struct_name, $field_name), - $(.num_offset: $crate::offset_of!($struct_name, $num),)? + $(num_offset: $crate::offset_of!($struct_name, $num),)? // The calls to `call_func_with_field!` are the magic that // computes most of the VMStateField from the type of the field. info: $crate::info_enum_to_ref!($crate::call_func_with_field!( @@ -440,7 +440,7 @@ macro_rules! vmstate_struct { name: ::core::concat!(::core::stringify!($field_name), "\0") .as_bytes() .as_ptr() as *const ::std::os::raw::c_char, - $(.num_offset: $crate::offset_of!($struct_name, $num),)? + $(num_offset: $crate::offset_of!($struct_name, $num),)? offset: { $crate::assert_field_type!($struct_name, $field_name, $type); $crate::offset_of!($struct_name, $field_name) From patchwork Fri Mar 21 18:35:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025884 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 D4D59C36005 for ; Fri, 21 Mar 2025 18:38:01 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhFS-00048J-Ny; Fri, 21 Mar 2025 14:37:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEV-0002jd-P0 for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:40 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEU-00074U-3n for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582197; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7cqHsfdkAuuLT5axwfe786tbbJbT6rXGioO14sbzrY0=; b=GxlqnzJOtELQp3ppUPJWPKPYPceMrv4q/xBXuxdvxgsi5vyRtPfKu3A/0Nr6gxL5R3crRw yozM/f/wcthtNhWjCmpe77/34PD3kXYRjczXyKAX8erYFJOrcKt/pmuVq1G0BY/PWGZo8p qsGrKGSFpd1CW+kk5EX8qQ+1vCO2AIY= Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-387-lbt8mpTOO1-7Faj15FrYzA-1; Fri, 21 Mar 2025 14:36:32 -0400 X-MC-Unique: lbt8mpTOO1-7Faj15FrYzA-1 X-Mimecast-MFC-AGG-ID: lbt8mpTOO1-7Faj15FrYzA_1742582191 Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-3913f546dfdso1270128f8f.1 for ; Fri, 21 Mar 2025 11:36:32 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582190; x=1743186990; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7cqHsfdkAuuLT5axwfe786tbbJbT6rXGioO14sbzrY0=; b=j1GHaV+h/bZiCATYejsFM413/1M8SKSTt3m1P1lXFaa3QPIjdk1pF8Kpg1zn15Ov3Q dALLNf62PcYAW5szDRgiCX+E9KISeBHmaYtGHtf5D6+cmIghiupN3ZMt+q3uCet+CWx2 VRfGzkKJvD08JyGH2bCR2aQC1wN//zJ/92Y61TMHQjildR5I2HDTokspy9TXi8ieQ8R/ 1YFQUknDoCPxFnH9RKhxhTPE5nkjijC4qHmm/SBRtNl+vuLF70A9c9gEhJS+XdB9aFO4 e84JWuoG7SZbsELMJzOJAgMMpcJijJBP2+SxayKpwg2k9Yowyx6Kn5y7UpaRwux0w0Tn ROtQ== X-Gm-Message-State: AOJu0YyQnATgoki+x99Y+VAebFzz3dDlfnNw0iMz5J65Qrw4vn1FHKCx Cz3wSmSX6IcTCa3ua0cA7D5FFipD8/zdTNeuEJHroMCjo6kITiEi9vRfvo2oaYKu1kBuF7gOh0X lBk+OTmbfy/wS2FIh4mK4NMH48fYmxwObgFKozyBW/PlX2w6DvWRxwY96h9u5UV4IGuAblOcNJP rHFgazQmz0YKBBxugO0Rk0eLtWJ9AzZ8bKBOKi X-Gm-Gg: ASbGncvFymUroBeWCdt7yZ53KquGfGc79qeoTF/mwzc+u2JcrraFF8vf+R6tutFPWN9 onSG8tl3V6DZdIMQZ1ccW4qKczOyO/9uHkRioklmQkAoxbDFtjhzYNeUhkE5GyIAjD4EbKRYU8h eA1QBVDv56Qfso+hOPK1b/dxkOSWHEJywVejP6kbOFGPFtJeMVm5GoURv7trQ6igrhVYP/bXS4a Mu6+wW+RxH6oV8c1LU43dkwseVZji+UmjNe2jVnA5blyr4mgvEVc7JB8wl0Fi4JwavCmbxMZwsD SGTOMY70+qd+RBzHG+1A X-Received: by 2002:a05:6000:400a:b0:390:fe05:da85 with SMTP id ffacd0b85a97d-3997f8fc301mr5388188f8f.16.1742582190212; Fri, 21 Mar 2025 11:36:30 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF8d7QU7teNz4DARB4i3sE48DSlftgjQa9P+2f1sOKXWkmLlrygDpwf0BG8QCXuJyMdeZ8txg== X-Received: by 2002:a05:6000:400a:b0:390:fe05:da85 with SMTP id ffacd0b85a97d-3997f8fc301mr5388165f8f.16.1742582189663; Fri, 21 Mar 2025 11:36:29 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3997f9e6651sm3031201f8f.75.2025.03.21.11.36.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:29 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Zhao Liu Subject: [PULL 11/24] rust/vmstate: Fix num field when varray flags are set Date: Fri, 21 Mar 2025 19:35:43 +0100 Message-ID: <20250321183556.155097-12-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.129.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Zhao Liu Array type vmstate has the VMStateField with `num` equals its length. When the varray vmstate is built based a array type, the `num` field should be cleaned to 0, because varray uses `num_offset` instead of `num` to store elements number information. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20250318130219.1799170-4-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/qemu-api/src/vmstate.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/rust/qemu-api/src/vmstate.rs b/rust/qemu-api/src/vmstate.rs index 9533b1250fa..e3233303f20 100644 --- a/rust/qemu-api/src/vmstate.rs +++ b/rust/qemu-api/src/vmstate.rs @@ -275,6 +275,7 @@ pub const fn with_varray_flag(mut self, flag: VMStateFlags) -> VMSta assert!((self.flags.0 & VMStateFlags::VMS_ARRAY.0) != 0); self.flags = VMStateFlags(self.flags.0 & !VMStateFlags::VMS_ARRAY.0); self.flags = VMStateFlags(self.flags.0 | flag.0); + self.num = 0; // varray uses num_offset instead of num. self } From patchwork Fri Mar 21 18:35:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025899 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 8B373C36005 for ; Fri, 21 Mar 2025 18:41:36 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhEa-00031M-FF; Fri, 21 Mar 2025 14:36:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEV-0002jO-Kf for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:39 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhET-00074W-Ur for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582197; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Rl3sbMh8PhcAXlK/9RiOT6GC/ca8o4XQipdBcUVoe2k=; b=Wi+xg3z/NpJdTdvTVvFqt3jJoNX2YqAA4Q3jeeXXfGzqYPMqOaH/1OFZolspwlc88HA/qM 6SmnFHeJlNZxLAln49gx+5TvZl17xP9T/TY76Lar7t/fddzHxpWLHmHmPpkpGONLMqPiDK FotPumH39mC/w/H/2fdlH0qFJpT24eE= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-58-NdrRkrCZMQ6Pu6RnJx8VIw-1; Fri, 21 Mar 2025 14:36:35 -0400 X-MC-Unique: NdrRkrCZMQ6Pu6RnJx8VIw-1 X-Mimecast-MFC-AGG-ID: NdrRkrCZMQ6Pu6RnJx8VIw_1742582194 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-3913f97d115so1123809f8f.0 for ; Fri, 21 Mar 2025 11:36:34 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582193; x=1743186993; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Rl3sbMh8PhcAXlK/9RiOT6GC/ca8o4XQipdBcUVoe2k=; b=gDyAe455l4EroEyAIQq8rmiwYPDXKakQOUf1u8SpbByTwwR68daUjVSg/Zm/8r+gZU hZt4y+ktboEvqilzBYltPwON1fmwfK22Gs7hEaqcSOOy/7Q4QqZLR3KYnDRlaOwHESWU 1oXdS94+kllZXzvmldyd0loYXvmEoHlc6ZrptA5ixX+DpBJdDa6w3t+lUpuSibYXHTji EeL6YkqkqZ8INppc39bAyj5SZkMYvadf/OgaRy41/L11dkTVhd93qOQA796JZy4JkJpK IgZ8Oeax9q52358QM5Sq1BcomFrU0Tfr+0FeS033KCkqSDvWGuJBd1hcvcdzZ7WASmgC 7Ebg== X-Gm-Message-State: AOJu0Yy+SJtArxZRBzJ9vxCwXOu2mzqDqRUoPBwSP2tH7EoA2IoWqFCD q/5/NiN2YtFJ2YyBtlYL3qfzNvhc4yypicnndMiNnKqJ/u0UPT86bzwUhfXhGitQgLsMd2SaALH rSPEXzT/ZlMGepsC5RNWwxJBcDidYr4xNLAIrdqkOyncE2UrC8QjT3NjGf4cT+/OVmfnHQ3Lvh7 tJrttyTJvGvHECQjMa9ubeEA5kWFsSmSA/xqkE X-Gm-Gg: ASbGnct416vmpFCUwxBZJ8deusQtJcro5/RvTP/1NpN+qY9nwNq3SIuQcuSBzbKNiE8 d+53HOl9256G2v0DdVHywts5/UjGGniqU2G0x2Qu/oDNM1QW8b6XBOovonXr+u7Sdk8/RywntTm DwC9QXYdRlKPE9GbTViVx6eXeGAcMOSfjEhs9oDfwPF2OowGKkJfUo8v+DHei5bCVXEHuCjMHR4 Cg1WHp2uDlfXdZNY36z1UovkrOo/ooy/78L42icvjpzZ3kTXKcSjp12KB9pB+CVqC2m/NIkWIip ygGo9NtAHX/W2McoK239 X-Received: by 2002:a5d:6daa:0:b0:38d:ae1e:2f3c with SMTP id ffacd0b85a97d-3997f93c45dmr4407475f8f.25.1742582193217; Fri, 21 Mar 2025 11:36:33 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGyDzmnhNDpG1ZtLgqb789d242m21SkmGRHkW67zEKYXpF2BEkDjNyzf/gxquGzjkZwSd3R9g== X-Received: by 2002:a5d:6daa:0:b0:38d:ae1e:2f3c with SMTP id ffacd0b85a97d-3997f93c45dmr4407456f8f.25.1742582192708; Fri, 21 Mar 2025 11:36:32 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3997f9956b4sm3021725f8f.7.2025.03.21.11.36.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:30 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Zhao Liu Subject: [PULL 12/24] rust/vmstate: Fix size field of VMStateField with VMS_ARRAY_OF_POINTER flag Date: Fri, 21 Mar 2025 19:35:44 +0100 Message-ID: <20250321183556.155097-13-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Zhao Liu The `size` field of the VMStateField with VMS_ARRAY_OF_POINTER flag should stores the size of pointer, which depends on platform. Currently, `*const`, `*mut`, `NonNull`, `Box<>` and their wrapper are supported, and they have the same size as `usize`. Store the size (of `usize`) when VMS_ARRAY_OF_POINTER flag is set. The size may be changed when more smart pointers are supported, but now the size of "usize" is enough. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20250318130219.1799170-5-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/qemu-api/src/vmstate.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/rust/qemu-api/src/vmstate.rs b/rust/qemu-api/src/vmstate.rs index e3233303f20..e2a1f7a97aa 100644 --- a/rust/qemu-api/src/vmstate.rs +++ b/rust/qemu-api/src/vmstate.rs @@ -256,6 +256,10 @@ pub const fn with_array_flag(mut self, num: usize) -> Self { if (self.flags.0 & VMStateFlags::VMS_POINTER.0) != 0 { self.flags = VMStateFlags(self.flags.0 & !VMStateFlags::VMS_POINTER.0); self.flags = VMStateFlags(self.flags.0 | VMStateFlags::VMS_ARRAY_OF_POINTER.0); + // VMS_ARRAY_OF_POINTER flag stores the size of pointer. + // FIXME: *const, *mut, NonNull and Box<> have the same size as usize. + // Resize if more smart pointers are supported. + self.size = std::mem::size_of::(); } self.flags = VMStateFlags(self.flags.0 & !VMStateFlags::VMS_SINGLE.0); self.flags = VMStateFlags(self.flags.0 | VMStateFlags::VMS_ARRAY.0); From patchwork Fri Mar 21 18:35:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025891 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 DEC45C36000 for ; Fri, 21 Mar 2025 18:40:04 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhFY-0004di-QW; Fri, 21 Mar 2025 14:37:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEa-00036f-VO for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:45 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEZ-00075N-8L for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582202; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=8PRsXG8olna7mdtCEgxlJldcQSAzgu6Hx/iwD+YkCV8=; b=SiIjgYSulJSJxkhvyQGw7Hg7VHHPDdOyvU9c0x3dID64j/HOcpF2a+M7BL8ekRTDnNLUEP kzPbcOdbeQ78WQ3MG3ELgIJpF74KRGXV5R6ET5eK9O84HjYx4gS/GDmi3wmquhRVpuoe7+ 2kU/pTt8SbtpboXXAOUcASuOsczcFFE= Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-649-WUjD732jOC6NzLaDtCnCmA-1; Fri, 21 Mar 2025 14:36:37 -0400 X-MC-Unique: WUjD732jOC6NzLaDtCnCmA-1 X-Mimecast-MFC-AGG-ID: WUjD732jOC6NzLaDtCnCmA_1742582196 Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-391425471d6so1060525f8f.3 for ; Fri, 21 Mar 2025 11:36:37 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582195; x=1743186995; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8PRsXG8olna7mdtCEgxlJldcQSAzgu6Hx/iwD+YkCV8=; b=esDe4u8KhGCTRrcPNoCHU58sKoCXSbJ27MisTXc+6gjf2p8ZUBts17t4bZ1sv1OmFK WyPxdJnKcn172XQa1HDSzLoWYuENYOPLQeIILTAI4+mBxSSyC0CD8++a6D2H+Z3orScx DuzzUJ4gFZEZ2/jA79XsjMYoZoEfrnATzgArzOl9bRbuNHzb2h4gAESjr1557aZ/gH8L jbgGsB8nXWhPy/SSDJy/2PY6oROVMZ3KPCCkb+QHK77w3Yhim6TmCeUK9EqoejlCi642 J6u5ZngalAr51bGaAijD2Zx89AqQhYrKDFTs+Z/d0JN2is+osSlTwS9OPrSwccAKRX/q Qtsw== X-Gm-Message-State: AOJu0YyqCKrz3BiuDN099+J15l3d6IAozV3pp+TMptB06DtRrCzDnbi1 7QDMtLNJtjw0bTTN2hBrFZDXiSdDJXO2yJpeNg+09oUmaaCrhK4Xc756pg/nlaMqMsD6IlbvDMI ZK+kV4M2eEj4mH/1CPxFcM+ZbWjIGDJp0L7AcZBRGBgBZ09EwAVjgqUWpwdNuSqVyfBFHo+Uco7 eu9+27X3wF2Bl8xPlL4WR36r7Uqx0c8r2tk0l9 X-Gm-Gg: ASbGnct6iDoFGAJrGhHw5o5h+Rx8EZ/NaT1PM1RZSjXx0BPS7qbCAM92Qu8ITl9R57d kLlsxwQ5rwJnaK9f0XGFd7mmehBYPXztFU8vLXtkPKruu6ZYAAcgugfez2OIh3IOcTD1jsCb000 DjXrD99Zm4fXb9/3AwgIIweWR8454UkWI263WqJrX94TxValmdPZwRQMAlyGm2XwBU8piCMA32q C9EGZ6eln5rmjhWHcLl9k1HKQ90871dsdTnVRt/z1SKb8gcWaJzMX0HVphzBV9YCQLEdTLu1zt0 AaH/YcDa5jGNnu1VOdgR X-Received: by 2002:a5d:64e4:0:b0:391:43cb:43fa with SMTP id ffacd0b85a97d-3997f9595a8mr4379835f8f.51.1742582195400; Fri, 21 Mar 2025 11:36:35 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGEclRNjBFHrvbkrHLXBZdIGSc8zgR1dpg1iz6Bq9z7WpDhBl54xZtX/IeT8lNln+flMaVchA== X-Received: by 2002:a5d:64e4:0:b0:391:43cb:43fa with SMTP id ffacd0b85a97d-3997f9595a8mr4379810f8f.51.1742582194801; Fri, 21 Mar 2025 11:36:34 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3997f9b3ebcsm3010535f8f.47.2025.03.21.11.36.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:33 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Zhao Liu Subject: [PULL 13/24] rust/vmstate: Fix type check for varray in vmstate_struct Date: Fri, 21 Mar 2025 19:35:45 +0100 Message-ID: <20250321183556.155097-14-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.129.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Zhao Liu When pass a varray to vmstate_struct, the `type` parameter should be the type of the element in the varray, for example: vmstate_struct!(HPETState, timers, [0 .. num_timers], VMSTATE_HPET_TIMER, BqlRefCell).with_version_id(0) But this breaks current type check, because it checks the type of `field`, which is an array type (for the above example, type of timers is [BqlRefCell; 32], not BqlRefCell). But the current assert_field_type() can no longer be extended to include new arguments, so a variant of it (a second macro containing the `num = $num:ident` parameter) had to be added to handle array cases. In this new macro, it not only checks the type of element, but also checks whether the `num` (number of elements in varray) is out of range. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20250318130219.1799170-6-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/qemu-api/src/assertions.rs | 15 +++++++++++++++ rust/qemu-api/src/vmstate.rs | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/rust/qemu-api/src/assertions.rs b/rust/qemu-api/src/assertions.rs index bba38cfda11..eb12e9499a7 100644 --- a/rust/qemu-api/src/assertions.rs +++ b/rust/qemu-api/src/assertions.rs @@ -91,6 +91,21 @@ fn types_must_be_equal(_: T) } }; }; + + ($t:ty, $i:tt, $ti:ty, num = $num:ident) => { + const _: () = { + #[allow(unused)] + fn assert_field_type(v: $t) { + fn types_must_be_equal(_: T) + where + T: $crate::assertions::EqType, + { + } + let index: usize = v.$num.try_into().unwrap(); + types_must_be_equal::<_, &$ti>(&v.$i[index]); + } + }; + }; } /// Assert that an expression matches a pattern. This can also be diff --git a/rust/qemu-api/src/vmstate.rs b/rust/qemu-api/src/vmstate.rs index e2a1f7a97aa..9d9cdda993c 100644 --- a/rust/qemu-api/src/vmstate.rs +++ b/rust/qemu-api/src/vmstate.rs @@ -447,7 +447,7 @@ macro_rules! vmstate_struct { .as_ptr() as *const ::std::os::raw::c_char, $(num_offset: $crate::offset_of!($struct_name, $num),)? offset: { - $crate::assert_field_type!($struct_name, $field_name, $type); + $crate::assert_field_type!($struct_name, $field_name, $type $(, num = $num)?); $crate::offset_of!($struct_name, $field_name) }, size: ::core::mem::size_of::<$type>(), From patchwork Fri Mar 21 18:35:46 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025885 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 55A2EC36000 for ; Fri, 21 Mar 2025 18:38:24 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhF8-0003Q0-Oz; Fri, 21 Mar 2025 14:37:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEZ-000342-Bo for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:44 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEX-000751-JO for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582200; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ReqKjgFzNUJo0s5zSYwcl94ZW9nD5xC2C+v/UzPjG/k=; b=B4s8oKAh02M+kxI7UuMYNj7A46dPuDwxo0Xjz5MaWDVa7lKfuCQ659mI2fSb6trdx/HXFB B2JrhP5ZkC+uWkh1bzh/92KccJN4TSIAcqY4b3pjx/p3BCR+IE+5L2P1/1W0s+w03buro8 JC2F1QOH/GxsHXUyk3idqWRS7g05JDk= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-661-iKGvHK2INPSyG3p_ukGWMw-1; Fri, 21 Mar 2025 14:36:38 -0400 X-MC-Unique: iKGvHK2INPSyG3p_ukGWMw-1 X-Mimecast-MFC-AGG-ID: iKGvHK2INPSyG3p_ukGWMw_1742582198 Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-39141ffa913so1171817f8f.2 for ; Fri, 21 Mar 2025 11:36:38 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582197; x=1743186997; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ReqKjgFzNUJo0s5zSYwcl94ZW9nD5xC2C+v/UzPjG/k=; b=tTNQcMdIoFeeEmqWWv8hATsXy8+NrW5Z6IKVghMIUiqSQDDzIDSU4QwPDShqGFaBrt tc6FusNBwouiFVle5zh5punFyiJ2ZGiCyS1qf31N+D9rG6nsxX4fiIYYmGincilrZAyy 4YcPdz6WyqmQ9JeJSwj0JuJ4swuAdvhLYg8POkvAw9nGUqtwLDj23GYXwfTMU616CMzB 2LdHHIopTuxaeD72HQsmsgQlOeRuWxdKieQDYHJOLPhbV1jRb62jfJdEHErcLzsSllJJ zRZJ4zLVpzZWDTTc0YI5lhzIFlEQPoi9oAv8QXfrrnhbR6awRhxlsXrI1y7BpmcJVAdT HQTQ== X-Gm-Message-State: AOJu0YzDBEA7dzcJUIVtVL7VMtFKh4TMIb7GjcGRa82WT+1r8y8TxL5B FtVjmsJ900wNvV5iatrbrodVuGSogoapMGFeuO/qCS+bXEMRIME9wo38V/4LLgFVNb5yeIgnmyF 6KZTuSg3r+NPuc3OilnlAEjoWO1H2bl9bwLG39U4VnhrjtItyMrmD9mtxclBcekEcxKZLNl8DGv iiynIXiBVU8EL9UItoErTodjSZPG1E7HXmqFdy X-Gm-Gg: ASbGncv/omqkqUoHL9TMKSiqx00PxjACljt1fv31IJNhVw4zqSOPjc2Y2kpIR76O46s 6FuI+oWcdt+IzBTMKQ8Qd/8sQtjZs9gW5XswbwlpZF9jaaRVDJmllsX+aRZjCONcKRLzWXRa2rn X6Kf+2JdqUaitdWiSe/KkRwWbRO5Zy6WvgKQqEEi/l7qm1flpJpaeX7kAKvu3CQE6Zs2J/ZsHmF BBjesO1iawioVjgY7/AA66EM528Aa78Eq+556chek5WvtDDd+Q//Vrjbgw3M5Q+XBB1j62qs5bT tYj9rCms5a+vwvBBL2wS X-Received: by 2002:a5d:6c67:0:b0:391:4835:d8a8 with SMTP id ffacd0b85a97d-3997f8f97ecmr4924347f8f.1.1742582196599; Fri, 21 Mar 2025 11:36:36 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGXbFNu7+7WzN5HaI+juy3znczCMs8jaXuwkAZypqcJjzSl/0H/4JvhWXj+AWKF2WBsBdUdRg== X-Received: by 2002:a5d:6c67:0:b0:391:4835:d8a8 with SMTP id ffacd0b85a97d-3997f8f97ecmr4924328f8f.1.1742582196128; Fri, 21 Mar 2025 11:36:36 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d43fdac9dsm84409445e9.30.2025.03.21.11.36.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:35 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Zhao Liu Subject: [PULL 14/24] rust/vmstate: Fix "cannot infer type" error in vmstate_struct Date: Fri, 21 Mar 2025 19:35:46 +0100 Message-ID: <20250321183556.155097-15-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.129.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Zhao Liu Rust cannot infer the type (it should be VMStateField) after Zeroable::ZERO, which cause the compiling error. To fix this error, call with_varray_flag() after VMStateField's initialization. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20250318130219.1799170-7-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/qemu-api/src/vmstate.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/rust/qemu-api/src/vmstate.rs b/rust/qemu-api/src/vmstate.rs index 9d9cdda993c..3be3a7260fe 100644 --- a/rust/qemu-api/src/vmstate.rs +++ b/rust/qemu-api/src/vmstate.rs @@ -453,13 +453,15 @@ macro_rules! vmstate_struct { size: ::core::mem::size_of::<$type>(), flags: $crate::bindings::VMStateFlags::VMS_STRUCT, vmsd: $vmsd, - ..$crate::zeroable::Zeroable::ZERO $( - .with_varray_flag($crate::call_func_with_field!( - $crate::vmstate::vmstate_varray_flag, - $struct_name, - $num)) - $(.with_varray_multiply($factor))?)? - } + ..$crate::zeroable::Zeroable::ZERO + } $(.with_varray_flag( + $crate::call_func_with_field!( + $crate::vmstate::vmstate_varray_flag, + $struct_name, + $num + ) + ) + $(.with_varray_multiply($factor))?)? }; } From patchwork Fri Mar 21 18:35:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025893 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 4D76DC36000 for ; Fri, 21 Mar 2025 18:40:37 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhFx-0006ot-Hk; Fri, 21 Mar 2025 14:38:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEe-0003C8-3g for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:57 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEc-000760-GD for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582206; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=i/dAnBUJOA44LvY1dVtr1Z0PiQh72oKyIjeNgHJkIAE=; b=M4RHjRFhJqMyV8LCQDkK7J745iCSniBfQ3pjjPAYyD7CWxIjEbgO6NC/15h9rXNwl0z7Of lCNDoAwt/vajMdTUNfcX6aNmG+nKbmnBENch5SEfRayyPYsmyUbatYoqmiSc7Fy4MQS9jM XFiQmNIiDQwI+ijHKzcxJr6ebhU8AR0= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-490-QUZ7EXemMOKe8srBCiZYCQ-1; Fri, 21 Mar 2025 14:36:41 -0400 X-MC-Unique: QUZ7EXemMOKe8srBCiZYCQ-1 X-Mimecast-MFC-AGG-ID: QUZ7EXemMOKe8srBCiZYCQ_1742582200 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-3914608e90eso1434083f8f.2 for ; Fri, 21 Mar 2025 11:36:41 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582199; x=1743186999; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=i/dAnBUJOA44LvY1dVtr1Z0PiQh72oKyIjeNgHJkIAE=; b=YhX7iN+ZGyhGMEaMjIoNRcNhuO55HIOvrDwnePEB2HI/dgToRyvB0HrschhQepMxVo zYfp4dOa7S7j3dwaEy+eoVVS4sgGMMFXJ64v43RHT6HwE/WxzRhAxXOCWI4qUAoPGqsQ 7/5NelRCzG8SGKeMjQcpq4ESnookqGKmbDATBc021956ctNoYb+blcmD073VoFdBNeRv Dq1BKPeAHRjFQnsKCnm/k4YM1F6MXTwxJ9+a/PtF6hZbHxlsS5o4DgwQEgYcIG34obKL Cb0GcmT9Fx2nYygDVXgcUW27pXjOKmeg/1r5gEW7/E4bcLEFzWALRwNRAy8kgvtJSIMW kcLw== X-Gm-Message-State: AOJu0YzrzArUgM3ze2W32y7pzM3thyB3AjVIlHAr3uQAG2Bm8ZMz8Yql 4X/LujDcwHhsvxZdcNdniJ7tpqrzn5QoZAYrxsl8vTavlNyQs4PW330kwweEGy/Hjb3VVTDID1u wurPZPP6W7DsXeQlo7d4iSCOFrNO7yHmQ9nEy96LG32aSzgDyC13efbzmRVR+uZVAQq/NXLuFc1 3NKth2JtQxc0oDtW69ix49TzDbSRw6LVZ2h43y X-Gm-Gg: ASbGncvzGaoeNi3l7oq0ANKwP8RyGPNa2MDPv/gLWWscrAFdsfH+EAda7xXGW26YqcS fJ3/oYPLOEh9UeUa2sZs5KG4+R5e/VMIbPpmovEP5LLB8bIQb2W6tQk9JEh6fX4dfzEjpAsHTvu qVJ29+CAn+6qEJf/5coJMqcv8eS/7h/wPhprgih0++Pf5p77EWrSEyZkGKI4K6s03MfVsLHlaS0 KAw81BKYufgeyc7j7fs/mEw2ohzo1Rqp3qL9okDi6zivyep/XLWMpwvLf/GhdjQ1sEum9KJvmWZ Y0dwxi8qKltVWO5SiHdC X-Received: by 2002:a05:6000:1f8d:b0:390:ee34:228b with SMTP id ffacd0b85a97d-3997f910522mr3591937f8f.24.1742582199534; Fri, 21 Mar 2025 11:36:39 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHa1zaUOLNEj6Hmsf7qNVPMUCvTJ9B3t1S++6Iu65DRnagHHodKczXnzw1fE2dRoYEzc89w0w== X-Received: by 2002:a05:6000:1f8d:b0:390:ee34:228b with SMTP id ffacd0b85a97d-3997f910522mr3591918f8f.24.1742582199012; Fri, 21 Mar 2025 11:36:39 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3997f9957efsm3094662f8f.14.2025.03.21.11.36.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:36 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Zhao Liu Subject: [PULL 15/24] rust/vmstate: Fix unnecessary VMState bound of with_varray_flag() Date: Fri, 21 Mar 2025 19:35:47 +0100 Message-ID: <20250321183556.155097-16-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Zhao Liu The VMState type bound is not used in with_varray_flag(). And for vmstate_struct, Rust cannot infer the type of `num` from the call_func_with_field(), so this causes the compiling error because it complains "cannot satisfy `_: VMState`" in with_varray_flag(). Note Rust can infer the type in vmstate_of macro so that with_varray_flag() can work at there. It is possible that the different initialization ways in the two macros cause differences in Rust's type inference. But in fact, the VMState type bound is not used in with_varray_flag() and vmstate_varray_flag() has already checked the VMState type, it's safe to drop VMState bound of with_varray_flag(), which can fix the above compiling error. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20250318130219.1799170-8-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/qemu-api/src/vmstate.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/qemu-api/src/vmstate.rs b/rust/qemu-api/src/vmstate.rs index 3be3a7260fe..792a74fdfc0 100644 --- a/rust/qemu-api/src/vmstate.rs +++ b/rust/qemu-api/src/vmstate.rs @@ -275,7 +275,7 @@ pub const fn with_pointer_flag(mut self) -> Self { } #[must_use] - pub const fn with_varray_flag(mut self, flag: VMStateFlags) -> VMStateField { + pub const fn with_varray_flag(mut self, flag: VMStateFlags) -> VMStateField { assert!((self.flags.0 & VMStateFlags::VMS_ARRAY.0) != 0); self.flags = VMStateFlags(self.flags.0 & !VMStateFlags::VMS_ARRAY.0); self.flags = VMStateFlags(self.flags.0 | flag.0); From patchwork Fri Mar 21 18:35:48 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025896 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 77540C36000 for ; Fri, 21 Mar 2025 18:41:27 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhFs-0006fc-VC; Fri, 21 Mar 2025 14:38:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEf-0003CA-7H for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:57 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEd-000768-Dt for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:48 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582206; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=wVdKkjeQhfHMzxEC6hOIsA32MGrKnUfZiumo0Q4dgjU=; b=NONNGcdy3SUUHbFzCfG6Kh7+0lR9+KJBgIEMilqbwtIWz6q+0JSdfGNi2ODHYejCIRoHUC 1QXFwMzrfaYfuuF23aIcV3sUGJlQ3nsPbUuHWp5E9RDnaiTCHnQ30CUn/SER0B8WHEC4R/ cHsX/f5zHuy1zKbYk32F0PAJgMvr+LA= Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-15-vTuxltroNt2fXJMvY0dOCA-1; Fri, 21 Mar 2025 14:36:44 -0400 X-MC-Unique: vTuxltroNt2fXJMvY0dOCA-1 X-Mimecast-MFC-AGG-ID: vTuxltroNt2fXJMvY0dOCA_1742582203 Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-39126c3469fso1023510f8f.3 for ; Fri, 21 Mar 2025 11:36:44 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582203; x=1743187003; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wVdKkjeQhfHMzxEC6hOIsA32MGrKnUfZiumo0Q4dgjU=; b=WRkT0xNMJKZSrjNxGX7AY3tY4rNo4ducDugQeV4Unc+bnLw4K5UZgHjc74yQFx5Lgx 3Yvhah+iCv/W733YNXQaoR4TRq9vHA4za0i0VORCZPV5zYNZQyARdYQThLiehQeYR2uH zkC1+IELrZF7//WoaF4xGhmc4gdR1SgYTE2uvSrb6lqI8R2vZbNmKypIfg0scSffTY2M wj+VXgmE22H5Rf2sJ6PU4yMF7fwCg3SpYz21f6a9H7G7ys4Md2ethbWg4qFrUVGRSNGB BO/EoIYveHGVLkIyfOSxPnXhcQYhu++uUAYWelrorgTWBMTi2EvMntidumUqJTrVXUxC wUSQ== X-Gm-Message-State: AOJu0YydFhgiYbdCrFJ1b4cZGprnmFKufjvRZQaGjQwodYijf8wJwWYk xC8JCckz+UKPdJ8nvh+lhPyzjYBvXHxmNY7pt2VnMqIP0PeACOJe/5qxIUMclTLZNbTPaj1wFuv LWiJjW7z4x33XeFRf3aU9MBrodIYdhb90CW8hbe4vuAjOHF/s3vT993ByjPaWhAMGVQNMLAgOuF ESVPuOAQRZ0LjVAYdJNBhmJaHtcLiQ378LbZnA X-Gm-Gg: ASbGncvpgP4Pn1xOVdXxt4Pxh1SD+2jnrccrub4SIDN34C8bVCkQbt9V8r6dekanAhQ RFKLEzEdCFquu8fkb6WWlXoDd8Sc56c8lb1vkq/AS0MdtLS6FZTAAp7IABEPJoVPQicvHOwmi5G tUzYzVWI3JB+8pAUVgWFrTI24vgfQ8oI6q1nCvMZgt5OOPY2atgykqg0R5HmmXawh/liyif7zye Dkjan8OM0SWbQBZkefQdEPqhHsjZbLETg26sPDCC9PivAw1QPpUzLC61gjlboFy7F8qQzqFt6LE sjH5DG3spboLvZKdiVo1 X-Received: by 2002:a05:6000:2cd:b0:391:39fb:59c8 with SMTP id ffacd0b85a97d-3997f90d929mr5686312f8f.25.1742582202592; Fri, 21 Mar 2025 11:36:42 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGTzXCE825xF4rRIMIWWoNHokGnDq05qU0TW5F6W8/u0Bhk5Cf91sJA9t45XRzdOE5iUkGJGg== X-Received: by 2002:a05:6000:2cd:b0:391:39fb:59c8 with SMTP id ffacd0b85a97d-3997f90d929mr5686288f8f.25.1742582202048; Fri, 21 Mar 2025 11:36:42 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3997f9e6651sm3031627f8f.75.2025.03.21.11.36.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:39 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Zhao Liu Subject: [PULL 16/24] rust/vmstate: Relax array check when build varray in vmstate_struct Date: Fri, 21 Mar 2025 19:35:48 +0100 Message-ID: <20250321183556.155097-17-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.129.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Zhao Liu The varry of structure created by vmstate_struct is different with vmstate_of. This is because vmstate_struct uses the `vmsd` to traverse the vmstates of structure's fields, rather than treating the structure directly as a well-defined vmstate. Therefore, there's no need to check array flag when building varray by vmstate_struct. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20250318130219.1799170-9-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/qemu-api/src/vmstate.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/rust/qemu-api/src/vmstate.rs b/rust/qemu-api/src/vmstate.rs index 792a74fdfc0..0b5af1c90b1 100644 --- a/rust/qemu-api/src/vmstate.rs +++ b/rust/qemu-api/src/vmstate.rs @@ -275,14 +275,20 @@ pub const fn with_pointer_flag(mut self) -> Self { } #[must_use] - pub const fn with_varray_flag(mut self, flag: VMStateFlags) -> VMStateField { - assert!((self.flags.0 & VMStateFlags::VMS_ARRAY.0) != 0); + pub const fn with_varray_flag_unchecked(mut self, flag: VMStateFlags) -> VMStateField { self.flags = VMStateFlags(self.flags.0 & !VMStateFlags::VMS_ARRAY.0); self.flags = VMStateFlags(self.flags.0 | flag.0); self.num = 0; // varray uses num_offset instead of num. self } + #[must_use] + #[allow(unused_mut)] + pub const fn with_varray_flag(mut self, flag: VMStateFlags) -> VMStateField { + assert!((self.flags.0 & VMStateFlags::VMS_ARRAY.0) != 0); + self.with_varray_flag_unchecked(flag) + } + #[must_use] pub const fn with_varray_multiply(mut self, num: u32) -> VMStateField { assert!(num <= 0x7FFF_FFFFu32); @@ -454,7 +460,7 @@ macro_rules! vmstate_struct { flags: $crate::bindings::VMStateFlags::VMS_STRUCT, vmsd: $vmsd, ..$crate::zeroable::Zeroable::ZERO - } $(.with_varray_flag( + } $(.with_varray_flag_unchecked( $crate::call_func_with_field!( $crate::vmstate::vmstate_varray_flag, $struct_name, From patchwork Fri Mar 21 18:35:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025887 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 25AD3C36000 for ; Fri, 21 Mar 2025 18:38:39 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhFM-0003e7-2p; Fri, 21 Mar 2025 14:37:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEg-0003Cd-Np for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:37:00 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEe-00076L-Vr for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582208; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=k78nL9wKTuaLgNByzOaVa642KSVUTzjjwBq+ZhaFZTg=; b=EbzEYFqtoVQZGueW8gHlQeNEjiLKzNMFxaUpY8RqHV9e0HM6Z2xlX99nuor7DWkhEXsHhn LRougDMN06zkYcPkOtLJx94HBJBwXRsnNcClW/vPbYX0Q3WKLeFwuU1NNSryP0eKYxK+8M uwlLHQt82xJpbTc1EkP7eAXQy8uSiBc= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-464-SZotqt4DPCKEXwPWXuOGuA-1; Fri, 21 Mar 2025 14:36:46 -0400 X-MC-Unique: SZotqt4DPCKEXwPWXuOGuA-1 X-Mimecast-MFC-AGG-ID: SZotqt4DPCKEXwPWXuOGuA_1742582205 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-3912fc9861cso1018676f8f.1 for ; Fri, 21 Mar 2025 11:36:46 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582204; x=1743187004; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=k78nL9wKTuaLgNByzOaVa642KSVUTzjjwBq+ZhaFZTg=; b=Epem23VJ5h6J5ylLX8/6OLXXkERzTa9y5lRU9sY04rHlNvkz3GHRVDoD5FBXDtAruI wbP7kT9y7UfWUtLA6QZ7AfoigrJVGqIN8+E9L7+a+M2M1UPHXBrV3gYdFYdO/CsUBfHV AJOvErdy5xL1gGea4+0BuiLGqxNmeTD6OIsQ6TQF2Ukzjwji55SrdZuzDeHnPM1R03Y7 6etGzF+gJxvitOee/aaqUOk8adIxPZ2PoYtLX0kx9829rZPiigxJOBuT3VflolpiFQAV cGwMFKxz0pZiln9XWOQLrfIzPio1dn+XJpAMXw1OUbbTR2OfrA/Hh/nGScWb4e7qDnX3 yjIw== X-Gm-Message-State: AOJu0YwHL7VZgoQ5ZTwzX4TyVnRv7cVCyIfx+Lk1i36qM79/XT6akBRe r9j1Sof2qJ/lSNzfC0HTxQcANcvmmlfwcT+LdsBh6ibC69zFhSV/Yrj8WaX7PaVOQY1Ojc+cqf+ MKh0Pw0WhAn+kmZKkmrHZVEGDi96mVLR5NKYgDj7N09DbGSfm2hQYam7WvLd4MWPnfBJnn71iAg F4iaR0NOPhB2zhMDam6z65a7lubPfWldZgikQS X-Gm-Gg: ASbGncs9F91Gp1d/LP0w6LnTIHKDIHSyaDeo6CZkHtXF/Jn4COjEGX/qy8h/VzUYPd5 xeY7nW5YV9nYwHx37uxXLlNuhaIG/RlVci4qvbDjkZ5iLAK+Ug1XhpkJ3lswxTw2pqhhyqJ8gwg iCDUgt07nzZQ5zp46inRc45m+vonMK5E9/38jjm880gYdPZiWQxCVBOI9s878N+sQI6hpHV5y14 ZszOKpJk5IQa+QjLeZHpJj04GQghNQZ6dXeAFVYkgDwsE4+u0RR5DIt5FFPiYyVcbjpjQPUsccs m1fNgP0JoKaH4uw3lEhd X-Received: by 2002:a5d:64ab:0:b0:391:487f:27e4 with SMTP id ffacd0b85a97d-3997f90d377mr4892751f8f.27.1742582203703; Fri, 21 Mar 2025 11:36:43 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHhhuFZL9LtAlQYU+6afn2i5o2v0wR/LS1hEEa/facmGS7hN/qa4EaaEpSbmOgKfOqmzkDnRQ== X-Received: by 2002:a5d:64ab:0:b0:391:487f:27e4 with SMTP id ffacd0b85a97d-3997f90d377mr4892726f8f.27.1742582203168; Fri, 21 Mar 2025 11:36:43 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3997f9a3428sm3077477f8f.26.2025.03.21.11.36.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:42 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Zhao Liu Subject: [PULL 17/24] rust/vmstate: Re-implement VMState trait for timer binding Date: Fri, 21 Mar 2025 19:35:49 +0100 Message-ID: <20250321183556.155097-18-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Zhao Liu At present, Rust side has a timer binding "timer::Timer", so the vmstate for timer should base on that binding instead of the raw "binding::QEMUTimer". It's possible to apply impl_vmstate_transparent for cell::Opaque and then impl_vmstate_forward for timer::Timer. But binding::QEMUTimer shouldn't be used directly, so that vmstate for such raw timer type is useless. Thus, apply impl_vmstate_scalar for timer::Timer. And since Opaque<> is useful, apply impl_vmstate_transparent for cell::Opaque as well. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20250318130219.1799170-10-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/qemu-api/src/vmstate.rs | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/rust/qemu-api/src/vmstate.rs b/rust/qemu-api/src/vmstate.rs index 0b5af1c90b1..01f06ed7379 100644 --- a/rust/qemu-api/src/vmstate.rs +++ b/rust/qemu-api/src/vmstate.rs @@ -27,12 +27,7 @@ use core::{marker::PhantomData, mem, ptr::NonNull}; pub use crate::bindings::{VMStateDescription, VMStateField}; -use crate::{ - bindings::{self, VMStateFlags}, - prelude::*, - qom::Owned, - zeroable::Zeroable, -}; +use crate::{bindings::VMStateFlags, prelude::*, qom::Owned, zeroable::Zeroable}; /// This macro is used to call a function with a generic argument bound /// to the type of a field. The function must take a @@ -344,6 +339,7 @@ unsafe impl<$base> VMState for $type where $base: VMState $($where)* { impl_vmstate_transparent!(std::pin::Pin where T: VMState); impl_vmstate_transparent!(crate::cell::BqlCell where T: VMState); impl_vmstate_transparent!(crate::cell::BqlRefCell where T: VMState); +impl_vmstate_transparent!(crate::cell::Opaque where T: VMState); #[macro_export] macro_rules! impl_vmstate_bitsized { @@ -390,7 +386,7 @@ unsafe impl VMState for $type { impl_vmstate_scalar!(vmstate_info_uint16, u16, VMS_VARRAY_UINT16); impl_vmstate_scalar!(vmstate_info_uint32, u32, VMS_VARRAY_UINT32); impl_vmstate_scalar!(vmstate_info_uint64, u64); -impl_vmstate_scalar!(vmstate_info_timer, bindings::QEMUTimer); +impl_vmstate_scalar!(vmstate_info_timer, crate::timer::Timer); // Pointer types using the underlying type's VMState plus VMS_POINTER // Note that references are not supported, though references to cells From patchwork Fri Mar 21 18:35:50 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025895 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 47BAFC36000 for ; Fri, 21 Mar 2025 18:40:55 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhFT-0004GP-Un; Fri, 21 Mar 2025 14:37:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEs-0003NV-6I for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:37:07 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEo-000780-O6 for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:37:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582218; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=zxHQkV48tuPPh4skSGkR+Kk+7dztE2eJ25IcFhaYuDw=; b=hnF922Ubj75bJf5JnfasYewTPXH3KZ2fYeKdfjsBgVKUO/LDniL1AZuzaLPQYKs930dH+H roVthlvZav7MN+fR5s+67TMV9fkQcSxG2HIMb4SnMWwh/ekwzN0oLVcjBwK6o50H0RRsem dDoGt8Kp5Iu6dTEgJKC5roYv8Nsl+0M= Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-670-Wxv2xBd8PEyIJkCpbaS6AA-1; Fri, 21 Mar 2025 14:36:49 -0400 X-MC-Unique: Wxv2xBd8PEyIJkCpbaS6AA-1 X-Mimecast-MFC-AGG-ID: Wxv2xBd8PEyIJkCpbaS6AA_1742582208 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-3914bc0cc4aso1156855f8f.3 for ; Fri, 21 Mar 2025 11:36:48 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582207; x=1743187007; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zxHQkV48tuPPh4skSGkR+Kk+7dztE2eJ25IcFhaYuDw=; b=E2bpMdjzu+ofaWiFFvScHqUObZHGiucK87Xle3eFFSjkou8ZqzaEwPyBbs67MssbSM j+5+Nk9xOelBaTDbEe00XwhuKhvujdxNPU/1bkgPb6fYbU4EpuFSH/HxibGsGHefwOrP NNYW1ZXE7NYaFVjVKVDheki8QR3xP03jnk2t94doH9Q3z7lLo4tDc1vtCKQbIQvCewn6 gQZxDvmZignb7XPKRLSQW00FGuarfRuy/xNcNFktxanpRqqQUzK5R6EKkYuCDxigjIgh C/9XZRruP90TPgiBs7kKRTnl5XxYXW4nWEWVVl2QQ3kpM3ssQzNcWXti1YSVBmmdQN/t q5Fg== X-Gm-Message-State: AOJu0YwQ35ky9qsPVy8ZmOMbcqyqVhWFnzAeZUW1aG/VH/1wSiatlPl6 73SqoOWmIc58vTlKlAH1rtBMliXHcU7NI5Aov4ysdREhB9mg0QDIJ4FWURKbmgN1+5NcyARLyy1 e+8mdLkQ4zKStFiTrIrmTaiqPSJ28FCdup8shnf4iK3AFHVA68VTRbuMssDEY2WhBmcDD2/pugs 79bfOkUGPEF7LttHbzoW3wLpULmSJ29ZLWKvCm X-Gm-Gg: ASbGncsfJGQ/R3QmutVyo5/ObYGlMBzxvUIG1DFTi6LaccQWWLYBz7CvQCYVCXgVnLc JxFN115CTGBKEu6RjrXwG3xPhZA0MUKpovo8wMwjX3i8zvHzVGZ8hhKqvjcEZkZ2w02wDU78/LW dp2l+WecU1r6Fcl7mw8vyV8saDxfMe+zuPzpDyhpgsdXTSKOcvKaCZHF8KfKoi9fNevXCxVie6z 0SLDf6AMuTaoyUtairyTq6/Al7v6s3i/Rf8f37PHUAgb1IB0eWeEGckklcDkTHn+mveX/ClOixS llZDrtGa87Fzrv7UircH X-Received: by 2002:a5d:6d88:0:b0:391:1473:336a with SMTP id ffacd0b85a97d-3997f937d76mr4210009f8f.36.1742582206816; Fri, 21 Mar 2025 11:36:46 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGdmEXaFsqQICMncMlB+Im2KoVQ0WuRm+oQI7eQBf/kavf0U6/RvXqgRMDxpjx7DUDCoTL14A== X-Received: by 2002:a5d:6d88:0:b0:391:1473:336a with SMTP id ffacd0b85a97d-3997f937d76mr4209992f8f.36.1742582206284; Fri, 21 Mar 2025 11:36:46 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3997f995789sm3089435f8f.17.2025.03.21.11.36.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:43 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Zhao Liu Subject: [PULL 18/24] rust/vmstate: Support vmstate_validate Date: Fri, 21 Mar 2025 19:35:50 +0100 Message-ID: <20250321183556.155097-19-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Zhao Liu In C version, VMSTATE_VALIDATE accepts the function pointer, which is used to check if some conditions of structure could meet, although the C version macro doesn't accept any structure as the opaque type. But it's hard to integrate VMSTATE_VALIDAE into vmstate_struct, a new macro has to be introduced to specifically handle the case corresponding to VMSTATE_VALIDATE. One of the difficulties is inferring the type of a callback by its name `test_fn`. We can't directly use `test_fn` as a parameter of test_cb_builder__() to get its type "F", because in this way, Rust compiler will be too conservative on drop check and complain "the destructor for this type cannot be evaluated in constant functions". Fortunately, PhantomData could help in this case, because it is considered to never have a destructor, no matter its field type [*]. The `phantom__()` in the `call_func_with_field` macro provides a good example of using PhantomData to infer type. So copy this idea and apply it to the `vmstate_validate` macro. [*]: https://doc.rust-lang.org/std/ops/trait.Drop.html#drop-check Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20250318130219.1799170-11-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/qemu-api/src/vmstate.rs | 52 +++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/rust/qemu-api/src/vmstate.rs b/rust/qemu-api/src/vmstate.rs index 01f06ed7379..9740931fb16 100644 --- a/rust/qemu-api/src/vmstate.rs +++ b/rust/qemu-api/src/vmstate.rs @@ -25,9 +25,12 @@ //! functionality that is missing from `vmstate_of!`. use core::{marker::PhantomData, mem, ptr::NonNull}; +use std::os::raw::{c_int, c_void}; pub use crate::bindings::{VMStateDescription, VMStateField}; -use crate::{bindings::VMStateFlags, prelude::*, qom::Owned, zeroable::Zeroable}; +use crate::{ + bindings::VMStateFlags, callbacks::FnCall, prelude::*, qom::Owned, zeroable::Zeroable, +}; /// This macro is used to call a function with a generic argument bound /// to the type of a field. The function must take a @@ -508,6 +511,53 @@ macro_rules! vmstate_fields { }} } +pub extern "C" fn rust_vms_test_field_exists FnCall<(&'a T, u8), bool>>( + opaque: *mut c_void, + version_id: c_int, +) -> bool { + let owner: &T = unsafe { &*(opaque.cast::()) }; + let version: u8 = version_id.try_into().unwrap(); + // SAFETY: the opaque was passed as a reference to `T`. + F::call((owner, version)) +} + +pub type VMSFieldExistCb = unsafe extern "C" fn( + opaque: *mut std::os::raw::c_void, + version_id: std::os::raw::c_int, +) -> bool; + +#[doc(alias = "VMSTATE_VALIDATE")] +#[macro_export] +macro_rules! vmstate_validate { + ($struct_name:ty, $test_name:expr, $test_fn:expr $(,)?) => { + $crate::bindings::VMStateField { + name: ::std::ffi::CStr::as_ptr($test_name), + field_exists: { + const fn test_cb_builder__< + T, + F: for<'a> $crate::callbacks::FnCall<(&'a T, u8), bool>, + >( + _phantom: ::core::marker::PhantomData, + ) -> $crate::vmstate::VMSFieldExistCb { + let _: () = F::ASSERT_IS_SOME; + $crate::vmstate::rust_vms_test_field_exists:: + } + + const fn phantom__(_: &T) -> ::core::marker::PhantomData { + ::core::marker::PhantomData + } + Some(test_cb_builder__::<$struct_name, _>(phantom__(&$test_fn))) + }, + flags: $crate::bindings::VMStateFlags( + $crate::bindings::VMStateFlags::VMS_MUST_EXIST.0 + | $crate::bindings::VMStateFlags::VMS_ARRAY.0, + ), + num: 0, // 0 elements: no data, only run test_fn callback + ..$crate::zeroable::Zeroable::ZERO + } + }; +} + /// A transparent wrapper type for the `subsections` field of /// [`VMStateDescription`]. /// From patchwork Fri Mar 21 18:35:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025897 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 1759FC36002 for ; Fri, 21 Mar 2025 18:41:30 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhFl-0005dd-A6; Fri, 21 Mar 2025 14:37:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEk-0003H0-N2 for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:37:03 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEi-00076r-Jk for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582212; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pcyVK0Ky40+jKcAU7SkEAV4PP044DRu6ufX6WoYHJU0=; b=V0uVzU+n08QbEYd2vAiiXcuK04Aztclk2bPhhBAc8N6wPr2cRpJbkk2/xJw2BRq77hV+SP JogcHUYEFxx2bNd/F87IoOfGhj+27+Lxv/IlU3loufdUGCg1uo7wCi3chGhUhbSEcQAZYv yHouaSME0gyhrMn7V2cQRaOaZ9Eps6k= Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-654-xnbq1i0YOQiUz7Nl7n00Lw-1; Fri, 21 Mar 2025 14:36:50 -0400 X-MC-Unique: xnbq1i0YOQiUz7Nl7n00Lw-1 X-Mimecast-MFC-AGG-ID: xnbq1i0YOQiUz7Nl7n00Lw_1742582209 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-43935e09897so15071465e9.1 for ; Fri, 21 Mar 2025 11:36:50 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582208; x=1743187008; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pcyVK0Ky40+jKcAU7SkEAV4PP044DRu6ufX6WoYHJU0=; b=HS+P/44wsEM1SmxRN8BIPEPCsNv4Pt11ATPcS9Z2BbLjQTKZStFszd2FZ1zzSOs0Of CUz8q40Wq9L8nHM73VdX7r7vKmGfL5rp7gOilso6cj5tOkU06dop56csvamB6HmEMTwv 1eKwmwwS0YE/kr+94f9rx+09O8zXf76TCmXvMXZJz1ODeTlwM8NDo0WC1hp4SaCiqcj+ VV1DeV3sfnOb9/RZMI2Lp33DO9dzERfyqD1BG8RCMuJs7ei1RJXy0Uq+fLXJiISPgJIt pbjiS3pLB6fuvlMbCLV0eXos2cnGxSXsikmxrzehux01TUkyO/8xaXhHSGlRmLOEKLqp GFZA== X-Gm-Message-State: AOJu0YxV6g4pxcroc5X3JCL7XiokAJ+kr3eFc/0CCXf5F82vAkoXdnzJ c4NzGDEI9MLr5w0+KWo3ujJ1iZlvX0Xa75LuPSW8Rpi0J8QnZZiqJsRh0835gn7tZaoNyujt6/S iBLCQkTMx3zBwSV2wg++02JEGAF6JEdhF8KxB/MZFZg+Xjg7yWseoqkAwslFgzKJeOfHfHoW5c6 akm36ZoPIfFaxxd2yqdxEJO87ol5Vq/YIfhcZ1 X-Gm-Gg: ASbGncsVh2g2jOs/VEHUimZuKTb47AGUm8K0eDNIwlYmTL0qZH+HIVaQwWvKjvqk15X l6cAE3mHrVPkywERIBswusCcC159L8GJqsBnafgAZQVl0A3CtL0ndd4xWbwO/In+Wiuubehqz70 VhBK9m8ItpqSiTlJrBYnQA6hEryDIHHUibIQGEzhTzbjpNPtChSRQG02I+aidRM/cgvyu69N/5j 5AdSIWud4ZIJ7oMZfyjcKN0UNIiBPIfdtNpj/KISG6syAAhnLNW2IkHigdNqapBgggx2xK4OoQk 4XS6eC+Txxb2NmZb5/69 X-Received: by 2002:a05:600c:c0c:b0:43c:f64c:447f with SMTP id 5b1f17b1804b1-43d50a35aaemr48151735e9.29.1742582207960; Fri, 21 Mar 2025 11:36:47 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEy57PaLAZzNf+1AnjppVEEzJZrmpyJtnOm8DpjSokdP2AC7rFe3vqA0oI/H9fo9cu2okUPTg== X-Received: by 2002:a05:600c:c0c:b0:43c:f64c:447f with SMTP id 5b1f17b1804b1-43d50a35aaemr48151455e9.29.1742582207407; Fri, 21 Mar 2025 11:36:47 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d3adc4488sm75247505e9.0.2025.03.21.11.36.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:46 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Zhao Liu Subject: [PULL 19/24] rust/vmstate: Add unit test for vmstate_of macro Date: Fri, 21 Mar 2025 19:35:51 +0100 Message-ID: <20250321183556.155097-20-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Zhao Liu The vmstate has too many combinations of VMStateFlags and VMStateField. Currently, the best way to test is to ensure that the Rust vmstate definition is consistent with the (possibly corresponding) C version. Add a unit test to cover some patterns accepted by vmstate_of macro, which correspond to the following C version macros: * VMSTATE_U16 * VMSTATE_UNUSED * VMSTATE_VARRAY_UINT16_UNSAFE * VMSTATE_VARRAY_MULTIPLY Note: Because vmstate_info_* are defined in vmstate-types.c, it's necessary to link libmigration to rust unit tests. In the future, maybe it's possible to spilt libmigration from rust_qemu_api_objs. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20250318130219.1799170-12-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/qemu-api/meson.build | 5 +- rust/qemu-api/tests/tests.rs | 2 + rust/qemu-api/tests/vmstate_tests.rs | 134 +++++++++++++++++++++++++++ 3 files changed, 139 insertions(+), 2 deletions(-) create mode 100644 rust/qemu-api/tests/vmstate_tests.rs diff --git a/rust/qemu-api/meson.build b/rust/qemu-api/meson.build index a3f226ccc2a..858685ddd4a 100644 --- a/rust/qemu-api/meson.build +++ b/rust/qemu-api/meson.build @@ -58,7 +58,8 @@ rust_qemu_api_objs = static_library( libchardev.extract_all_objects(recursive: false), libcrypto.extract_all_objects(recursive: false), libauthz.extract_all_objects(recursive: false), - libio.extract_all_objects(recursive: false)]) + libio.extract_all_objects(recursive: false), + libmigration.extract_all_objects(recursive: false)]) rust_qemu_api_deps = declare_dependency( dependencies: [ qom_ss.dependencies(), @@ -71,7 +72,7 @@ rust_qemu_api_deps = declare_dependency( test('rust-qemu-api-integration', executable( 'rust-qemu-api-integration', - 'tests/tests.rs', + files('tests/tests.rs', 'tests/vmstate_tests.rs'), override_options: ['rust_std=2021', 'build.rust_std=2021'], rust_args: ['--test'], install: false, diff --git a/rust/qemu-api/tests/tests.rs b/rust/qemu-api/tests/tests.rs index 269122e7ec1..99a7aab6fed 100644 --- a/rust/qemu-api/tests/tests.rs +++ b/rust/qemu-api/tests/tests.rs @@ -17,6 +17,8 @@ zeroable::Zeroable, }; +mod vmstate_tests; + // Test that macros can compile. pub static VMSTATE: VMStateDescription = VMStateDescription { name: c_str!("name").as_ptr(), diff --git a/rust/qemu-api/tests/vmstate_tests.rs b/rust/qemu-api/tests/vmstate_tests.rs new file mode 100644 index 00000000000..eb1bb2f8a04 --- /dev/null +++ b/rust/qemu-api/tests/vmstate_tests.rs @@ -0,0 +1,134 @@ +// Copyright (C) 2025 Intel Corporation. +// Author(s): Zhao Liu +// SPDX-License-Identifier: GPL-2.0-or-later + +use std::{ffi::CStr, mem::size_of, slice}; + +use qemu_api::{ + bindings::{vmstate_info_int8, vmstate_info_uint8, vmstate_info_unused_buffer, VMStateFlags}, + c_str, + vmstate::{VMStateDescription, VMStateField}, + vmstate_fields, vmstate_of, vmstate_unused, + zeroable::Zeroable, +}; + +const FOO_ARRAY_MAX: usize = 3; + +// =========================== Test VMSTATE_FOOA =========================== +// Test the use cases of the vmstate macro, corresponding to the following C +// macro variants: +// * VMSTATE_FOOA: +// - VMSTATE_U16 +// - VMSTATE_UNUSED +// - VMSTATE_VARRAY_UINT16_UNSAFE +// - VMSTATE_VARRAY_MULTIPLY +#[repr(C)] +#[derive(qemu_api_macros::offsets)] +struct FooA { + arr: [u8; FOO_ARRAY_MAX], + num: u16, + arr_mul: [i8; FOO_ARRAY_MAX], + num_mul: u32, + elem: i8, +} + +static VMSTATE_FOOA: VMStateDescription = VMStateDescription { + name: c_str!("foo_a").as_ptr(), + version_id: 1, + minimum_version_id: 1, + fields: vmstate_fields! { + vmstate_of!(FooA, elem), + vmstate_unused!(size_of::()), + vmstate_of!(FooA, arr[0 .. num]).with_version_id(0), + vmstate_of!(FooA, arr_mul[0 .. num_mul * 16]), + }, + ..Zeroable::ZERO +}; + +#[test] +fn test_vmstate_uint16() { + let foo_fields: &[VMStateField] = unsafe { slice::from_raw_parts(VMSTATE_FOOA.fields, 5) }; + + // 1st VMStateField ("elem") in VMSTATE_FOOA (corresponding to VMSTATE_UINT16) + assert_eq!( + unsafe { CStr::from_ptr(foo_fields[0].name) }.to_bytes_with_nul(), + b"elem\0" + ); + assert_eq!(foo_fields[0].offset, 16); + assert_eq!(foo_fields[0].num_offset, 0); + assert_eq!(foo_fields[0].info, unsafe { &vmstate_info_int8 }); + assert_eq!(foo_fields[0].version_id, 0); + assert_eq!(foo_fields[0].size, 1); + assert_eq!(foo_fields[0].num, 0); + assert_eq!(foo_fields[0].flags, VMStateFlags::VMS_SINGLE); + assert!(foo_fields[0].vmsd.is_null()); + assert!(foo_fields[0].field_exists.is_none()); +} + +#[test] +fn test_vmstate_unused() { + let foo_fields: &[VMStateField] = unsafe { slice::from_raw_parts(VMSTATE_FOOA.fields, 5) }; + + // 2nd VMStateField ("unused") in VMSTATE_FOOA (corresponding to VMSTATE_UNUSED) + assert_eq!( + unsafe { CStr::from_ptr(foo_fields[1].name) }.to_bytes_with_nul(), + b"unused\0" + ); + assert_eq!(foo_fields[1].offset, 0); + assert_eq!(foo_fields[1].num_offset, 0); + assert_eq!(foo_fields[1].info, unsafe { &vmstate_info_unused_buffer }); + assert_eq!(foo_fields[1].version_id, 0); + assert_eq!(foo_fields[1].size, 8); + assert_eq!(foo_fields[1].num, 0); + assert_eq!(foo_fields[1].flags, VMStateFlags::VMS_BUFFER); + assert!(foo_fields[1].vmsd.is_null()); + assert!(foo_fields[1].field_exists.is_none()); +} + +#[test] +fn test_vmstate_varray_uint16_unsafe() { + let foo_fields: &[VMStateField] = unsafe { slice::from_raw_parts(VMSTATE_FOOA.fields, 5) }; + + // 3rd VMStateField ("arr") in VMSTATE_FOOA (corresponding to + // VMSTATE_VARRAY_UINT16_UNSAFE) + assert_eq!( + unsafe { CStr::from_ptr(foo_fields[2].name) }.to_bytes_with_nul(), + b"arr\0" + ); + assert_eq!(foo_fields[2].offset, 0); + assert_eq!(foo_fields[2].num_offset, 4); + assert_eq!(foo_fields[2].info, unsafe { &vmstate_info_uint8 }); + assert_eq!(foo_fields[2].version_id, 0); + assert_eq!(foo_fields[2].size, 1); + assert_eq!(foo_fields[2].num, 0); + assert_eq!(foo_fields[2].flags, VMStateFlags::VMS_VARRAY_UINT16); + assert!(foo_fields[2].vmsd.is_null()); + assert!(foo_fields[2].field_exists.is_none()); +} + +#[test] +fn test_vmstate_varray_multiply() { + let foo_fields: &[VMStateField] = unsafe { slice::from_raw_parts(VMSTATE_FOOA.fields, 5) }; + + // 4th VMStateField ("arr_mul") in VMSTATE_FOOA (corresponding to + // VMSTATE_VARRAY_MULTIPLY) + assert_eq!( + unsafe { CStr::from_ptr(foo_fields[3].name) }.to_bytes_with_nul(), + b"arr_mul\0" + ); + assert_eq!(foo_fields[3].offset, 6); + assert_eq!(foo_fields[3].num_offset, 12); + assert_eq!(foo_fields[3].info, unsafe { &vmstate_info_int8 }); + assert_eq!(foo_fields[3].version_id, 0); + assert_eq!(foo_fields[3].size, 1); + assert_eq!(foo_fields[3].num, 16); + assert_eq!( + foo_fields[3].flags.0, + VMStateFlags::VMS_VARRAY_UINT32.0 | VMStateFlags::VMS_MULTIPLY_ELEMENTS.0 + ); + assert!(foo_fields[3].vmsd.is_null()); + assert!(foo_fields[3].field_exists.is_none()); + + // The last VMStateField in VMSTATE_FOOA. + assert_eq!(foo_fields[4].flags, VMStateFlags::VMS_END); +} From patchwork Fri Mar 21 18:35:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025892 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 C4C3DC36000 for ; Fri, 21 Mar 2025 18:40:12 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhFg-00050H-6l; Fri, 21 Mar 2025 14:37:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEn-0003K0-10 for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:37:03 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEk-000774-S0 for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:56 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582214; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=LPHhMj1Xxuz7O/11AXvujJmBVBPeJBVatLFwLDa/u7s=; b=DBd0CQ8A8vvF7DjRYmtiHlmMae4ytfpgZgUvPco0Vljzj5GM4fkJii10aaKgOMYZUFHqc4 3800xpMClv1/lF5KoAos76WoCbD8p25xP9fVSJK07Kxr2QHPLnM9vbzRsL8NXKcHF6RWt1 GFDSMyVcq2yzttBqP0QafPWtt9XJdQM= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-120-CLJoKt3MPjCNDMgXjJ4FHw-1; Fri, 21 Mar 2025 14:36:52 -0400 X-MC-Unique: CLJoKt3MPjCNDMgXjJ4FHw-1 X-Mimecast-MFC-AGG-ID: CLJoKt3MPjCNDMgXjJ4FHw_1742582212 Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-39126c3469fso1023546f8f.3 for ; Fri, 21 Mar 2025 11:36:52 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582211; x=1743187011; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LPHhMj1Xxuz7O/11AXvujJmBVBPeJBVatLFwLDa/u7s=; b=EsuvuM/i5w1Rmoh3e5ABoiIUFaBOVG4yhRGWeaUkscEKfBLO07RnI5VdUkoz2U9tyg ahPO3Ts/wVSeRJ6jWKf2yHtXDvocRou4j2G4O5z92dVQbsk2vBkW2FgZjnuxSJI4M3I1 Josykky40eTHGPMqUixnEE9psX7i9rxDOgjnjb7WfsxwQz4/1AWm8jtHwS+A0zpaBCkT UyGclESEfqxH7WMLJJ53ZtE8oA+fCQi4K25lPKRei2piwSidEGVPjqyuHWrESMVWJs2o K+MWEVJ1InHLJE0aMJsdZizNVZp8qV/vptF6+FjMNdcPEaT/2KyslUnzOJwNSYlBRDk1 KFRA== X-Gm-Message-State: AOJu0YwLFXhqfAuxHCROhH1LLe78lh6p2ztHq8ZMKaIe/OwPcy54z1gx ayd/ObzxtGTuPwX364cwM0qkgPpnESZst7nCqyLyOKH9GnLYk0KJVJ6YeNLaRo8lkuVvNoeRVbs PgK5oTcnyNBFnckT4nYckpJZXvRZsJapr6OlUrde9X2veNFTUcHAkvzWu+54VML0m0rxOSdAtW0 fuHPzCJ37uPf2IEyTCNcCQjCF/0hS89N6bVP3c X-Gm-Gg: ASbGncuk+/oqwWBLJ/xf+PJklmhMxPxAdy7alDqUAwyumsVCXf8/UkSPjEjjCYnq7/X oPzFQm9jfeVRoC+sKkWTugV0NaLAzgjio0tghfCTODBdW6tm8FUtHKPORZQsiA79lG3x4pQWTBZ nPGbOpgpLZnM9r2Htrhr/dBACrW0ZOYcrkwsS7LGZ+aHTbYY4Fw6AhjCCH7PbPmKzERpxl1CSCN IySJ0VnqYnUrCWr/ANZJUB9R+CNCUHum6JDucSPRh2jGPxVXzfbDB3ifD8Ia3nx8jLKB9GL5oM2 eCVhOGLm5MOYpsfl+eB2 X-Received: by 2002:a05:6000:1a8d:b0:391:489a:ce12 with SMTP id ffacd0b85a97d-3997f90de52mr4418660f8f.26.1742582210923; Fri, 21 Mar 2025 11:36:50 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGsNmwLLghu4EcbJ3YotQlVIDZzKeabA7qMNIYunBBkFnu4Oi5b18ce2XGGYFpYXY/nD/sMpA== X-Received: by 2002:a05:6000:1a8d:b0:391:489a:ce12 with SMTP id ffacd0b85a97d-3997f90de52mr4418640f8f.26.1742582210383; Fri, 21 Mar 2025 11:36:50 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3997f9957aasm3096706f8f.10.2025.03.21.11.36.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:48 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Zhao Liu Subject: [PULL 20/24] rust/vmstate: Add unit test for vmstate_{of|struct} macro Date: Fri, 21 Mar 2025 19:35:52 +0100 Message-ID: <20250321183556.155097-21-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Zhao Liu Add a unit test to cover some patterns accepted by vmstate_of and vmstate_struct macros, which correspond to the following C version macros: * VMSTATE_BOOL_V * VMSTATE_U64 * VMSTATE_STRUCT_VARRAY_UINT8 * (no C version) MULTIPLY variant of VMSTATE_STRUCT_VARRAY_UINT32 * VMSTATE_ARRAY Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20250318130219.1799170-13-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/qemu-api/tests/vmstate_tests.rs | 158 ++++++++++++++++++++++++++- 1 file changed, 156 insertions(+), 2 deletions(-) diff --git a/rust/qemu-api/tests/vmstate_tests.rs b/rust/qemu-api/tests/vmstate_tests.rs index eb1bb2f8a04..2c3301e02af 100644 --- a/rust/qemu-api/tests/vmstate_tests.rs +++ b/rust/qemu-api/tests/vmstate_tests.rs @@ -5,10 +5,14 @@ use std::{ffi::CStr, mem::size_of, slice}; use qemu_api::{ - bindings::{vmstate_info_int8, vmstate_info_uint8, vmstate_info_unused_buffer, VMStateFlags}, + bindings::{ + vmstate_info_bool, vmstate_info_int64, vmstate_info_int8, vmstate_info_uint64, + vmstate_info_uint8, vmstate_info_unused_buffer, VMStateFlags, + }, c_str, + cell::BqlCell, vmstate::{VMStateDescription, VMStateField}, - vmstate_fields, vmstate_of, vmstate_unused, + vmstate_fields, vmstate_of, vmstate_struct, vmstate_unused, zeroable::Zeroable, }; @@ -132,3 +136,153 @@ fn test_vmstate_varray_multiply() { // The last VMStateField in VMSTATE_FOOA. assert_eq!(foo_fields[4].flags, VMStateFlags::VMS_END); } + +// =========================== Test VMSTATE_FOOB =========================== +// Test the use cases of the vmstate macro, corresponding to the following C +// macro variants: +// * VMSTATE_FOOB: +// - VMSTATE_BOOL_V +// - VMSTATE_U64 +// - VMSTATE_STRUCT_VARRAY_UINT8 +// - (no C version) MULTIPLY variant of VMSTATE_STRUCT_VARRAY_UINT32 +// - VMSTATE_ARRAY +#[repr(C)] +#[derive(qemu_api_macros::offsets)] +struct FooB { + arr_a: [FooA; FOO_ARRAY_MAX], + num_a: u8, + arr_a_mul: [FooA; FOO_ARRAY_MAX], + num_a_mul: u32, + wrap: BqlCell, + val: bool, + // FIXME: Use Timer array. Now we can't since it's hard to link savevm.c to test. + arr_i64: [i64; FOO_ARRAY_MAX], +} + +static VMSTATE_FOOB: VMStateDescription = VMStateDescription { + name: c_str!("foo_b").as_ptr(), + version_id: 2, + minimum_version_id: 1, + fields: vmstate_fields! { + vmstate_of!(FooB, val).with_version_id(2), + vmstate_of!(FooB, wrap), + vmstate_struct!(FooB, arr_a[0 .. num_a], &VMSTATE_FOOA, FooA).with_version_id(1), + vmstate_struct!(FooB, arr_a_mul[0 .. num_a_mul * 32], &VMSTATE_FOOA, FooA).with_version_id(2), + vmstate_of!(FooB, arr_i64), + }, + ..Zeroable::ZERO +}; + +#[test] +fn test_vmstate_bool_v() { + let foo_fields: &[VMStateField] = unsafe { slice::from_raw_parts(VMSTATE_FOOB.fields, 6) }; + + // 1st VMStateField ("val") in VMSTATE_FOOB (corresponding to VMSTATE_BOOL_V) + assert_eq!( + unsafe { CStr::from_ptr(foo_fields[0].name) }.to_bytes_with_nul(), + b"val\0" + ); + assert_eq!(foo_fields[0].offset, 136); + assert_eq!(foo_fields[0].num_offset, 0); + assert_eq!(foo_fields[0].info, unsafe { &vmstate_info_bool }); + assert_eq!(foo_fields[0].version_id, 2); + assert_eq!(foo_fields[0].size, 1); + assert_eq!(foo_fields[0].num, 0); + assert_eq!(foo_fields[0].flags, VMStateFlags::VMS_SINGLE); + assert!(foo_fields[0].vmsd.is_null()); + assert!(foo_fields[0].field_exists.is_none()); +} + +#[test] +fn test_vmstate_uint64() { + let foo_fields: &[VMStateField] = unsafe { slice::from_raw_parts(VMSTATE_FOOB.fields, 6) }; + + // 2nd VMStateField ("wrap") in VMSTATE_FOOB (corresponding to VMSTATE_U64) + assert_eq!( + unsafe { CStr::from_ptr(foo_fields[1].name) }.to_bytes_with_nul(), + b"wrap\0" + ); + assert_eq!(foo_fields[1].offset, 128); + assert_eq!(foo_fields[1].num_offset, 0); + assert_eq!(foo_fields[1].info, unsafe { &vmstate_info_uint64 }); + assert_eq!(foo_fields[1].version_id, 0); + assert_eq!(foo_fields[1].size, 8); + assert_eq!(foo_fields[1].num, 0); + assert_eq!(foo_fields[1].flags, VMStateFlags::VMS_SINGLE); + assert!(foo_fields[1].vmsd.is_null()); + assert!(foo_fields[1].field_exists.is_none()); +} + +#[test] +fn test_vmstate_struct_varray_uint8() { + let foo_fields: &[VMStateField] = unsafe { slice::from_raw_parts(VMSTATE_FOOB.fields, 6) }; + + // 3rd VMStateField ("arr_a") in VMSTATE_FOOB (corresponding to + // VMSTATE_STRUCT_VARRAY_UINT8) + assert_eq!( + unsafe { CStr::from_ptr(foo_fields[2].name) }.to_bytes_with_nul(), + b"arr_a\0" + ); + assert_eq!(foo_fields[2].offset, 0); + assert_eq!(foo_fields[2].num_offset, 60); + assert!(foo_fields[2].info.is_null()); // VMSTATE_STRUCT_VARRAY_UINT8 doesn't set info field. + assert_eq!(foo_fields[2].version_id, 1); + assert_eq!(foo_fields[2].size, 20); + assert_eq!(foo_fields[2].num, 0); + assert_eq!( + foo_fields[2].flags.0, + VMStateFlags::VMS_STRUCT.0 | VMStateFlags::VMS_VARRAY_UINT8.0 + ); + assert_eq!(foo_fields[2].vmsd, &VMSTATE_FOOA); + assert!(foo_fields[2].field_exists.is_none()); +} + +#[test] +fn test_vmstate_struct_varray_uint32_multiply() { + let foo_fields: &[VMStateField] = unsafe { slice::from_raw_parts(VMSTATE_FOOB.fields, 6) }; + + // 4th VMStateField ("arr_a_mul") in VMSTATE_FOOB (corresponding to + // (no C version) MULTIPLY variant of VMSTATE_STRUCT_VARRAY_UINT32) + assert_eq!( + unsafe { CStr::from_ptr(foo_fields[3].name) }.to_bytes_with_nul(), + b"arr_a_mul\0" + ); + assert_eq!(foo_fields[3].offset, 64); + assert_eq!(foo_fields[3].num_offset, 124); + assert!(foo_fields[3].info.is_null()); // VMSTATE_STRUCT_VARRAY_UINT8 doesn't set info field. + assert_eq!(foo_fields[3].version_id, 2); + assert_eq!(foo_fields[3].size, 20); + assert_eq!(foo_fields[3].num, 32); + assert_eq!( + foo_fields[3].flags.0, + VMStateFlags::VMS_STRUCT.0 + | VMStateFlags::VMS_VARRAY_UINT32.0 + | VMStateFlags::VMS_MULTIPLY_ELEMENTS.0 + ); + assert_eq!(foo_fields[3].vmsd, &VMSTATE_FOOA); + assert!(foo_fields[3].field_exists.is_none()); +} + +#[test] +fn test_vmstate_macro_array() { + let foo_fields: &[VMStateField] = unsafe { slice::from_raw_parts(VMSTATE_FOOB.fields, 6) }; + + // 5th VMStateField ("arr_i64") in VMSTATE_FOOB (corresponding to + // VMSTATE_ARRAY) + assert_eq!( + unsafe { CStr::from_ptr(foo_fields[4].name) }.to_bytes_with_nul(), + b"arr_i64\0" + ); + assert_eq!(foo_fields[4].offset, 144); + assert_eq!(foo_fields[4].num_offset, 0); + assert_eq!(foo_fields[4].info, unsafe { &vmstate_info_int64 }); + assert_eq!(foo_fields[4].version_id, 0); + assert_eq!(foo_fields[4].size, 8); + assert_eq!(foo_fields[4].num, FOO_ARRAY_MAX as i32); + assert_eq!(foo_fields[4].flags, VMStateFlags::VMS_ARRAY); + assert!(foo_fields[4].vmsd.is_null()); + assert!(foo_fields[4].field_exists.is_none()); + + // The last VMStateField in VMSTATE_FOOB. + assert_eq!(foo_fields[5].flags, VMStateFlags::VMS_END); +} From patchwork Fri Mar 21 18:35:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025888 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 A8776C36000 for ; Fri, 21 Mar 2025 18:39:22 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhFo-0006BP-TN; Fri, 21 Mar 2025 14:38:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEo-0003Le-LI for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:37:07 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEm-00077J-Fk for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:58 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582215; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Z4A4b9/OXiyaSRX/qk8oeDehU/YXPK8pcQSTIn5TX0I=; b=CrcWKop4EPIa1EmlUvDmvvKY16AIdZlh/1qAGIC58amwGYzUBky9KcHP9L1qAwwLa+toQz w0AnmhWPT5f1LGmUUkjJEruR8HuNvg+ALtTDyjgiEwLJihCzxytgCpuInYCvevs+zhYb65 RiV44OE1YKCrsxbGOsSVIsKr4HAjHKI= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-687-e-iGnkIvM-WG5W8T6LuiMQ-1; Fri, 21 Mar 2025 14:36:54 -0400 X-MC-Unique: e-iGnkIvM-WG5W8T6LuiMQ-1 X-Mimecast-MFC-AGG-ID: e-iGnkIvM-WG5W8T6LuiMQ_1742582213 Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-39979ad285bso1339010f8f.2 for ; Fri, 21 Mar 2025 11:36:54 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582212; x=1743187012; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Z4A4b9/OXiyaSRX/qk8oeDehU/YXPK8pcQSTIn5TX0I=; b=wB9ijbi+oYgG0/rIkpYN1In28swMVfj1tq9JZvo6i+AecqdhVeBBoIgzV+8+f0cxXw DD3F0tPYfBbiRJXxHW6ZjS6BCtZbqTzWM0j3cgapD5NxzR+5Tt3vILtFBTeiaFhAGgdi uK6uEFErg28OIku0OtZOgY/x5nhdSeKBHQoJfdfMob9+dKzh/Uy0duLa6xZ5HdnU4Ybb 8syny99aJ0w7GbGBvaG0Xuk7ssSSH3TrublOYyX2INk/baWSioHRxNhVLERS0pkugAnP lH8FXNEoM5dPTHjdhWE//hi+AhXXfUdWko9esY1HSutt2ezuYz3OPa7XXtT5OPLc682P vLRQ== X-Gm-Message-State: AOJu0YxUDIrjGAALTvWHwc1g5HiL1gZ1C+w2/q8XWjZItgGPVHsrw4a8 UA1KlZeQA6io4+MV+wTx+jkBjQxzTyOPKw71dNw9gCwuuw347+io/VKf7gaw0i6sZSFdOZVXRnJ wx6GF/sZZ+znifSanzfjkWFDDuB6SsJZpr6XktcjPOhDyeLfXjD5kdn5eMfrgkH7cuBfqnoAMV+ MPwgG+Yli0Xze8FofTLXOasyVYEwfhWF1zk8aD X-Gm-Gg: ASbGncvlw5Rw0QCmLDobd8AqT3OCuHOMZZ7UEROj3YTxL5NwGci4Xs/ZsXFi6GfZLGL iebrcPHpgADSDbIXJV6yskpeKMkpeAI66VhElhjuTbVXVPU33PX6jIngs7CIlDJoSusKRE1pYcf stra0LTVqL0oKToNbaPgg+OYoZNv6ULZzdgYcCchVzS0UvfMXPSNgZOdmgQFFUwK4QlvsxCAXur eB7p2gBquf+MzCG13AEaQ6mCV6QQe07x1aDHOMDf3zLR5sAE/MXIXR77MLPDxTThPAB1niR15m9 d2grED6uFd8RmbMrmTWs X-Received: by 2002:a05:6000:1543:b0:390:f987:26a1 with SMTP id ffacd0b85a97d-3997f911531mr4606720f8f.29.1742582212077; Fri, 21 Mar 2025 11:36:52 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFphEiDkT9cdo4ZZYqJH9AHvJPpaVJZ5+H5hK4DQi4iDzQbcTG7Uf1LICBlQ9PQfAhZosgtUg== X-Received: by 2002:a05:6000:1543:b0:390:f987:26a1 with SMTP id ffacd0b85a97d-3997f911531mr4606695f8f.29.1742582211548; Fri, 21 Mar 2025 11:36:51 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d4fd9df6bsm33907585e9.31.2025.03.21.11.36.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:51 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Zhao Liu Subject: [PULL 21/24] rust/vmstate: Add unit test for pointer case Date: Fri, 21 Mar 2025 19:35:53 +0100 Message-ID: <20250321183556.155097-22-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.129.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Zhao Liu Add a unit test to cover some patterns accepted by vmstate_of macro, which correspond to the following C version macros: * VMSTATE_POINTER * VMSTATE_ARRAY_OF_POINTER Note: Currently, vmstate_struct can't handle the pointer to structure case. Leave this case as a FIXME and use vmstate_unused as a place holder. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20250318130219.1799170-14-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/qemu-api/tests/vmstate_tests.rs | 119 ++++++++++++++++++++++++++- 1 file changed, 115 insertions(+), 4 deletions(-) diff --git a/rust/qemu-api/tests/vmstate_tests.rs b/rust/qemu-api/tests/vmstate_tests.rs index 2c3301e02af..027b2266753 100644 --- a/rust/qemu-api/tests/vmstate_tests.rs +++ b/rust/qemu-api/tests/vmstate_tests.rs @@ -2,15 +2,16 @@ // Author(s): Zhao Liu // SPDX-License-Identifier: GPL-2.0-or-later -use std::{ffi::CStr, mem::size_of, slice}; +use std::{ffi::CStr, mem::size_of, ptr::NonNull, slice}; use qemu_api::{ bindings::{ - vmstate_info_bool, vmstate_info_int64, vmstate_info_int8, vmstate_info_uint64, - vmstate_info_uint8, vmstate_info_unused_buffer, VMStateFlags, + vmstate_info_bool, vmstate_info_int32, vmstate_info_int64, vmstate_info_int8, + vmstate_info_uint64, vmstate_info_uint8, vmstate_info_unused_buffer, VMStateFlags, }, c_str, - cell::BqlCell, + cell::{BqlCell, Opaque}, + impl_vmstate_forward, vmstate::{VMStateDescription, VMStateField}, vmstate_fields, vmstate_of, vmstate_struct, vmstate_unused, zeroable::Zeroable, @@ -286,3 +287,113 @@ fn test_vmstate_macro_array() { // The last VMStateField in VMSTATE_FOOB. assert_eq!(foo_fields[5].flags, VMStateFlags::VMS_END); } + +// =========================== Test VMSTATE_FOOC =========================== +// Test the use cases of the vmstate macro, corresponding to the following C +// macro variants: +// * VMSTATE_FOOC: +// - VMSTATE_POINTER +// - VMSTATE_ARRAY_OF_POINTER +struct FooCWrapper([Opaque<*mut u8>; FOO_ARRAY_MAX]); // Though Opaque<> array is almost impossible. + +impl_vmstate_forward!(FooCWrapper); + +#[repr(C)] +#[derive(qemu_api_macros::offsets)] +struct FooC { + ptr: *const i32, + ptr_a: NonNull, + arr_ptr: [Box; FOO_ARRAY_MAX], + arr_ptr_wrap: FooCWrapper, +} + +static VMSTATE_FOOC: VMStateDescription = VMStateDescription { + name: c_str!("foo_c").as_ptr(), + version_id: 3, + minimum_version_id: 1, + fields: vmstate_fields! { + vmstate_of!(FooC, ptr).with_version_id(2), + // FIXME: Currently vmstate_struct doesn't support the pointer to structure. + // VMSTATE_STRUCT_POINTER: vmstate_struct!(FooC, ptr_a, VMSTATE_FOOA, NonNull) + vmstate_unused!(size_of::>()), + vmstate_of!(FooC, arr_ptr), + vmstate_of!(FooC, arr_ptr_wrap), + }, + ..Zeroable::ZERO +}; + +const PTR_SIZE: usize = size_of::<*mut ()>(); + +#[test] +fn test_vmstate_pointer() { + let foo_fields: &[VMStateField] = unsafe { slice::from_raw_parts(VMSTATE_FOOC.fields, 6) }; + + // 1st VMStateField ("ptr") in VMSTATE_FOOC (corresponding to VMSTATE_POINTER) + assert_eq!( + unsafe { CStr::from_ptr(foo_fields[0].name) }.to_bytes_with_nul(), + b"ptr\0" + ); + assert_eq!(foo_fields[0].offset, 0); + assert_eq!(foo_fields[0].num_offset, 0); + assert_eq!(foo_fields[0].info, unsafe { &vmstate_info_int32 }); + assert_eq!(foo_fields[0].version_id, 2); + assert_eq!(foo_fields[0].size, 4); + assert_eq!(foo_fields[0].num, 0); + assert_eq!( + foo_fields[0].flags.0, + VMStateFlags::VMS_SINGLE.0 | VMStateFlags::VMS_POINTER.0 + ); + assert!(foo_fields[0].vmsd.is_null()); + assert!(foo_fields[0].field_exists.is_none()); +} + +#[test] +fn test_vmstate_macro_array_of_pointer() { + let foo_fields: &[VMStateField] = unsafe { slice::from_raw_parts(VMSTATE_FOOC.fields, 6) }; + + // 3rd VMStateField ("arr_ptr") in VMSTATE_FOOC (corresponding to + // VMSTATE_ARRAY_OF_POINTER) + assert_eq!( + unsafe { CStr::from_ptr(foo_fields[2].name) }.to_bytes_with_nul(), + b"arr_ptr\0" + ); + assert_eq!(foo_fields[2].offset, 2 * PTR_SIZE); + assert_eq!(foo_fields[2].num_offset, 0); + assert_eq!(foo_fields[2].info, unsafe { &vmstate_info_uint8 }); + assert_eq!(foo_fields[2].version_id, 0); + assert_eq!(foo_fields[2].size, PTR_SIZE); + assert_eq!(foo_fields[2].num, FOO_ARRAY_MAX as i32); + assert_eq!( + foo_fields[2].flags.0, + VMStateFlags::VMS_ARRAY.0 | VMStateFlags::VMS_ARRAY_OF_POINTER.0 + ); + assert!(foo_fields[2].vmsd.is_null()); + assert!(foo_fields[2].field_exists.is_none()); +} + +#[test] +fn test_vmstate_macro_array_of_pointer_wrapped() { + let foo_fields: &[VMStateField] = unsafe { slice::from_raw_parts(VMSTATE_FOOC.fields, 6) }; + + // 4th VMStateField ("arr_ptr_wrap") in VMSTATE_FOOC (corresponding to + // VMSTATE_ARRAY_OF_POINTER) + assert_eq!( + unsafe { CStr::from_ptr(foo_fields[3].name) }.to_bytes_with_nul(), + b"arr_ptr_wrap\0" + ); + assert_eq!(foo_fields[3].offset, (FOO_ARRAY_MAX + 2) * PTR_SIZE); + assert_eq!(foo_fields[3].num_offset, 0); + assert_eq!(foo_fields[2].info, unsafe { &vmstate_info_uint8 }); + assert_eq!(foo_fields[3].version_id, 0); + assert_eq!(foo_fields[3].size, PTR_SIZE); + assert_eq!(foo_fields[3].num, FOO_ARRAY_MAX as i32); + assert_eq!( + foo_fields[2].flags.0, + VMStateFlags::VMS_ARRAY.0 | VMStateFlags::VMS_ARRAY_OF_POINTER.0 + ); + assert!(foo_fields[3].vmsd.is_null()); + assert!(foo_fields[3].field_exists.is_none()); + + // The last VMStateField in VMSTATE_FOOC. + assert_eq!(foo_fields[4].flags, VMStateFlags::VMS_END); +} From patchwork Fri Mar 21 18:35:54 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025889 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 1B044C36002 for ; Fri, 21 Mar 2025 18:39:33 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhFT-0004GG-UV; Fri, 21 Mar 2025 14:37:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEp-0003MW-DL for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:37:07 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEn-00077t-JB for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:36:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582217; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=tf/SDamM19yAM6CCTmMmuE8QR5FpAhIVUEPhMergYRQ=; b=UBbrxKB1zz4JzjmflTCMojXJAJcyRk8lFy1qr7TKtU0LpXpFntO1S8N2urKLIpzaypA1oK fQMAvx0njC7FK4Wf8QmO3ew79mgj58cnMUOzUxol7Nprrg9jpMQ4QxyQZwDYb4pLNfnZxG xLNnIpILR0YZ5cbWpYHzxwWW7lWi3nQ= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-146-joKmhasPNBePNnQ9Kiy2ZA-1; Fri, 21 Mar 2025 14:36:55 -0400 X-MC-Unique: joKmhasPNBePNnQ9Kiy2ZA-1 X-Mimecast-MFC-AGG-ID: joKmhasPNBePNnQ9Kiy2ZA_1742582214 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-3913f97d115so1123890f8f.0 for ; Fri, 21 Mar 2025 11:36:55 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582213; x=1743187013; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tf/SDamM19yAM6CCTmMmuE8QR5FpAhIVUEPhMergYRQ=; b=w2QjfPASnscHGQVTxm1UNAEGCj/xt9FF9a0In5u63A/k4G2o0mrh3MJRw5ySaUU24o krR1W1bGsUijyKSfmgT62p/e2YpFnWfDKh6G2cFsecDvpslXafTt5tB0ifLYlYOkV/Ti 6+fECPQPOnS4qshFbXiT2A5KDQeaOxNLLU9lkcJSNH+FxVgyotQhr4M5Ggatu7c39cjI hZeoRgqPKXzgF/sZpxbJhN4FGv8I5A1Qh/l2utIPqbE1kihjlG8W1/KeCrXb6xlJ2KKE jf0yml2NyCFbsRV9YRmsRXn/VW5Dg8EzyxB9lz2b2FeuHokkPcIJ5a7X8yxCvrZlZ4yR WVRw== X-Gm-Message-State: AOJu0Yzw/gPwHuEgRJGJDyXy8PAzBspUgrJSO/Czxny3dxpLob33SWYf AIf3R9dmuvvbtYRdogTipyZy2dz4DeXP81UWtpJQim2tK8ZDqq5EAwd4JXpfBF0VVoqGt7NsQZx lTjm0xpmDd7ywNVnl06grFXGKLHNxTJXn27fvOpqSlXm4mxjRVK/fZ6N2RHUH59jXD2HCFRts7m W5OF4OveIYqjhPh0leDvmujKRrMhhb5Fkzkxdh X-Gm-Gg: ASbGncsoS10ftUbgoFbmUB1Bje/Qnqk/Yu+n2Q5wPpbUOIfSUL3DquTr3jIdDJHwt+T pY46M5Wkp+/ZFos6++roAOa7fVk9XvTVP9hYfDif92LJxN8XlsIOIEmjtM0M/1zC02mDjH7dM2e 2BfK4vwn/RrLYj9YIWWUvSCmGCdq/6yJYVMpZmj4A9odpj8aGGkwnr2tyu9NSKGJPVK3FqttpFQ bFibsz0pdmFWtwv5N2lnRkC8CCqJuP+W/DZTPzgNrxPMrHJBl1dXgYNckUslwKKsc8NvIhniA0k Ato4zaXtSJorhai7N0mg X-Received: by 2002:a5d:5f4b:0:b0:38d:ba8e:7327 with SMTP id ffacd0b85a97d-3997f900873mr4709398f8f.8.1742582213217; Fri, 21 Mar 2025 11:36:53 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFm8OPdeBraUHB8MTmakWzrOd6aOcLN0/FDGDD1nY/YJQI4ypbSpHkyuWUhwJ5FkDovuHR8dA== X-Received: by 2002:a5d:5f4b:0:b0:38d:ba8e:7327 with SMTP id ffacd0b85a97d-3997f900873mr4709373f8f.8.1742582212648; Fri, 21 Mar 2025 11:36:52 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3997f9a3c7fsm3096780f8f.34.2025.03.21.11.36.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:52 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Zhao Liu Subject: [PULL 22/24] rust/vmstate: Add unit test for vmstate_validate Date: Fri, 21 Mar 2025 19:35:54 +0100 Message-ID: <20250321183556.155097-23-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Zhao Liu Add a unit test for vmstate_validate, which corresponds to the C version macro: VMSTATE_VALIDATE. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20250318130219.1799170-15-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/qemu-api/tests/vmstate_tests.rs | 82 +++++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 2 deletions(-) diff --git a/rust/qemu-api/tests/vmstate_tests.rs b/rust/qemu-api/tests/vmstate_tests.rs index 027b2266753..b8d8b45b19d 100644 --- a/rust/qemu-api/tests/vmstate_tests.rs +++ b/rust/qemu-api/tests/vmstate_tests.rs @@ -2,7 +2,7 @@ // Author(s): Zhao Liu // SPDX-License-Identifier: GPL-2.0-or-later -use std::{ffi::CStr, mem::size_of, ptr::NonNull, slice}; +use std::{ffi::CStr, mem::size_of, os::raw::c_void, ptr::NonNull, slice}; use qemu_api::{ bindings::{ @@ -13,7 +13,7 @@ cell::{BqlCell, Opaque}, impl_vmstate_forward, vmstate::{VMStateDescription, VMStateField}, - vmstate_fields, vmstate_of, vmstate_struct, vmstate_unused, + vmstate_fields, vmstate_of, vmstate_struct, vmstate_unused, vmstate_validate, zeroable::Zeroable, }; @@ -397,3 +397,81 @@ fn test_vmstate_macro_array_of_pointer_wrapped() { // The last VMStateField in VMSTATE_FOOC. assert_eq!(foo_fields[4].flags, VMStateFlags::VMS_END); } + +// =========================== Test VMSTATE_FOOD =========================== +// Test the use cases of the vmstate macro, corresponding to the following C +// macro variants: +// * VMSTATE_FOOD: +// - VMSTATE_VALIDATE + +// Add more member fields when vmstate_of/vmstate_struct support "test" +// parameter. +struct FooD; + +impl FooD { + fn validate_food_0(&self, _version_id: u8) -> bool { + true + } + + fn validate_food_1(_state: &FooD, _version_id: u8) -> bool { + false + } +} + +fn validate_food_2(_state: &FooD, _version_id: u8) -> bool { + true +} + +static VMSTATE_FOOD: VMStateDescription = VMStateDescription { + name: c_str!("foo_d").as_ptr(), + version_id: 3, + minimum_version_id: 1, + fields: vmstate_fields! { + vmstate_validate!(FooD, c_str!("foo_d_0"), FooD::validate_food_0), + vmstate_validate!(FooD, c_str!("foo_d_1"), FooD::validate_food_1), + vmstate_validate!(FooD, c_str!("foo_d_2"), validate_food_2), + }, + ..Zeroable::ZERO +}; + +#[test] +fn test_vmstate_validate() { + let foo_fields: &[VMStateField] = unsafe { slice::from_raw_parts(VMSTATE_FOOD.fields, 4) }; + let mut foo_d = FooD; + let foo_d_p = std::ptr::addr_of_mut!(foo_d).cast::(); + + // 1st VMStateField in VMSTATE_FOOD + assert_eq!( + unsafe { CStr::from_ptr(foo_fields[0].name) }.to_bytes_with_nul(), + b"foo_d_0\0" + ); + assert_eq!(foo_fields[0].offset, 0); + assert_eq!(foo_fields[0].num_offset, 0); + assert!(foo_fields[0].info.is_null()); + assert_eq!(foo_fields[0].version_id, 0); + assert_eq!(foo_fields[0].size, 0); + assert_eq!(foo_fields[0].num, 0); + assert_eq!( + foo_fields[0].flags.0, + VMStateFlags::VMS_ARRAY.0 | VMStateFlags::VMS_MUST_EXIST.0 + ); + assert!(foo_fields[0].vmsd.is_null()); + assert!(unsafe { foo_fields[0].field_exists.unwrap()(foo_d_p, 0) }); + + // 2nd VMStateField in VMSTATE_FOOD + assert_eq!( + unsafe { CStr::from_ptr(foo_fields[1].name) }.to_bytes_with_nul(), + b"foo_d_1\0" + ); + assert!(!unsafe { foo_fields[1].field_exists.unwrap()(foo_d_p, 1) }); + + // 3rd VMStateField in VMSTATE_FOOD + assert_eq!( + unsafe { CStr::from_ptr(foo_fields[2].name) }.to_bytes_with_nul(), + b"foo_d_2\0" + ); + assert!(unsafe { foo_fields[2].field_exists.unwrap()(foo_d_p, 2) }); + + // The last VMStateField in VMSTATE_FOOD. + assert_eq!(foo_fields[3].flags, VMStateFlags::VMS_END); +} From patchwork Fri Mar 21 18:35:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025898 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 DCB51C36002 for ; Fri, 21 Mar 2025 18:41:34 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhFa-0004qV-LK; Fri, 21 Mar 2025 14:37:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEw-0003PS-0I for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:37:07 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEt-00078u-OE for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:37:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582222; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=sQLaituN3aYs4wbMz+tZ+slNW5qicDoFAjD2Be2hepc=; b=gmvlfDVDRbczD+b7/yK/ezcXGo4xDCc26U/HzsFZ6GoUU91uI85OZTa72wjmYVxmmW3r2o SuDZF3gJxhELAZVLNPL6cUL2TJeTYUBd6o2F+X/Yw10kldEPNzhrLvnfXKnW8xXhbET3LM fTCeaUbwBaW2ObC7FHNFbwKzPyfeVDU= Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-614-qApRgpmoMve-tU2WMKsbgQ-1; Fri, 21 Mar 2025 14:36:58 -0400 X-MC-Unique: qApRgpmoMve-tU2WMKsbgQ-1 X-Mimecast-MFC-AGG-ID: qApRgpmoMve-tU2WMKsbgQ_1742582218 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-43ced8c2eb7so17509455e9.1 for ; Fri, 21 Mar 2025 11:36:58 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582216; x=1743187016; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sQLaituN3aYs4wbMz+tZ+slNW5qicDoFAjD2Be2hepc=; b=lc3Xbhz0IcYgs9/QFCHcFGok+gN9HFtLxlm0OJxbnrVa/fOXl26pLhvwvoQnwBi4s1 UZBbhUha9Ndb3mxxnzXTl3Fbnk+h/ucFdmjbyTDkPTH/MKEG9gUm510uybkewJhx0t/8 qgg1/kYSXy+Q1GkhBbT2GEx28vyC6Vbm6QoVzvJoUMqGJJ6a8TIXG0rwIjCku08bAvWp 4QgAXVdDTh6Ppy0ncRNvavoAUjoNL0kKnOyK/2eE2CKSM9Inq2EwsiPMq5dCKSrPKiTD 658G8x/PXFRPJ2bWhfMwDvwImNmcTVm2CMpfVm4rYU4lmjqmn4oVCo39IJmdtiaGexie M9+g== X-Gm-Message-State: AOJu0YyWPcGm/UQN6UeimlaFP8tv5zA0DFgreomZ9739kPBL6XHPnO67 pfkRqmabq4A0YPNC+aZJBT8xjUPOWVOu71YMzQbeCeVO8A1yxt1KDYuYP8jHGhEJTmYtqYkh0SW Ds7XKHPX9uRUIwKZojt4fW9hWHjpVoSRJEVPP6XXnMB5msnPJNBizwHy4WRsjPk2CgAQhIkQfPA n85fbmT29FlO+0kfslsqFTZIrLZEmOjevqS5a2 X-Gm-Gg: ASbGncvQEO0+fO3LRXOOaDRvDgY68eLhWTIKxnjQ2Dq6GRN/+iK8RSqzbK7y7mPHufT vmOredbdn54+xXL9yirL0UenC2orTXylzbpcmf6BezSQ8jmjfTt9QidAZU3zU7zMlYmvpJUXQmX 3udZGIv1LXB2kjc7Ok0CX/efyXnK8c1UwEitdR74kl7MZ47/AY3fNp+Uw/wah8Pe568nMSo3saT 6aDCBunPeFzW0v2fOErOwYvGP28N3hoQzUXSFKM/OSwArOvFPBxmAl2ZebhdW7NKXh0I175ovUt 4powA1ej/z5tejd1lkIP X-Received: by 2002:a05:600c:4512:b0:43d:160:cd9e with SMTP id 5b1f17b1804b1-43d509f4581mr45625475e9.17.1742582216482; Fri, 21 Mar 2025 11:36:56 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFWDL7cwWynzC/mbB3EChvC1iPMwC6uZnF60FXPdqln5bsplOTYlk6zMpPyLJeQnfsKGTFrHg== X-Received: by 2002:a05:600c:4512:b0:43d:160:cd9e with SMTP id 5b1f17b1804b1-43d509f4581mr45625315e9.17.1742582215999; Fri, 21 Mar 2025 11:36:55 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d440ed4d9sm85476765e9.33.2025.03.21.11.36.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:53 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Zhao Liu Subject: [PULL 23/24] rust/vmstate: Include complete crate path of VMStateFlags in vmstate_clock Date: Fri, 21 Mar 2025 19:35:55 +0100 Message-ID: <20250321183556.155097-24-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.129.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Zhao Liu The use of "bindings::*" masks incomplete path of VMStateFlags. Include complete crate path of VMStateFlags in vmstate_clock, and clean up "bindings::*" in device_class.rs of pl011. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20250318130219.1799170-16-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/hw/char/pl011/src/device_class.rs | 8 ++++++-- rust/qemu-api/src/vmstate.rs | 5 ++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/rust/hw/char/pl011/src/device_class.rs b/rust/hw/char/pl011/src/device_class.rs index 0b2076ddaa0..b4d4a7eb432 100644 --- a/rust/hw/char/pl011/src/device_class.rs +++ b/rust/hw/char/pl011/src/device_class.rs @@ -8,8 +8,12 @@ }; use qemu_api::{ - bindings::*, c_str, prelude::*, vmstate_clock, vmstate_fields, vmstate_of, vmstate_struct, - vmstate_subsections, vmstate_unused, zeroable::Zeroable, + bindings::{qdev_prop_bool, qdev_prop_chr}, + c_str, + prelude::*, + vmstate::VMStateDescription, + vmstate_clock, vmstate_fields, vmstate_of, vmstate_struct, vmstate_subsections, vmstate_unused, + zeroable::Zeroable, }; use crate::device::{PL011Registers, PL011State}; diff --git a/rust/qemu-api/src/vmstate.rs b/rust/qemu-api/src/vmstate.rs index 9740931fb16..1b2b12eadd6 100644 --- a/rust/qemu-api/src/vmstate.rs +++ b/rust/qemu-api/src/vmstate.rs @@ -487,7 +487,10 @@ macro_rules! vmstate_clock { $crate::offset_of!($struct_name, $field_name) }, size: ::core::mem::size_of::<*const $crate::qdev::Clock>(), - flags: VMStateFlags(VMStateFlags::VMS_STRUCT.0 | VMStateFlags::VMS_POINTER.0), + flags: $crate::bindings::VMStateFlags( + $crate::bindings::VMStateFlags::VMS_STRUCT.0 + | $crate::bindings::VMStateFlags::VMS_POINTER.0, + ), vmsd: unsafe { ::core::ptr::addr_of!($crate::bindings::vmstate_clock) }, ..$crate::zeroable::Zeroable::ZERO } From patchwork Fri Mar 21 18:35:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 14025900 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 19C30C36000 for ; Fri, 21 Mar 2025 18:41:50 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tvhFr-0006R0-1H; Fri, 21 Mar 2025 14:38:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEw-0003PZ-Mx for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:37:08 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tvhEt-00078o-OK for qemu-devel@nongnu.org; Fri, 21 Mar 2025 14:37:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742582222; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pkTHz2UWHPEbKgcpzU9XTX788FOigDaRZo+GExD3JvE=; b=RGnyu4j2jHPSrvD4lbhrvWnf6PJcqw8NVPe0mNQ9vf0iOUTX7/6/wOuOrkV31wdbQxx6gB R8Td0sgC1HmAi+sDaxfQoJiYJ10IySQhVooBMTduV/rY8mMDEWsRt9//h+fYTQ4lkPQKu1 a85njhCBNpaIVzRTYsgIr1Tyf7T7Nxg= Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-49-8qUzDaZBP7KoylLwJlDs7g-1; Fri, 21 Mar 2025 14:37:00 -0400 X-MC-Unique: 8qUzDaZBP7KoylLwJlDs7g-1 X-Mimecast-MFC-AGG-ID: 8qUzDaZBP7KoylLwJlDs7g_1742582219 Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-3912a0439afso950358f8f.3 for ; Fri, 21 Mar 2025 11:37:00 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742582218; x=1743187018; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pkTHz2UWHPEbKgcpzU9XTX788FOigDaRZo+GExD3JvE=; b=XWf1/sAgH/6NmAvWILZVTC6CIp2BMZhagi3S8sowC08VBf6gDLomVxuZn/uFffcagR EMwlSz5/xxkeVDs50qyj3fGiAhpqsPbL1ttD5TBBB4N/GJD8Q+iV3PdtQ2p2uBDV0yDt qJY/mKQHFevQOoa/vtau///Tlkfm1qLIBQdDxiLe4SMKiwhTfff6lYZnzkRmoAeE1CHR oD6wSOh74Tbnn0Qly0SsEKCKZhhnL9IZJ6cf68MnGgye2wC8VXAHDsCF3uuBGrPn8SrC IP7sMZfED0JRdK5oUf6QTFsaH1ZS5mI0spjXlENycWkOpK43yQVOvUkRNc2KMxzvl3xS qiig== X-Gm-Message-State: AOJu0Yxq7ShKVhDkHXuguUfLKyyrKYkwe63fBtADQS9lKQiOHrPJ49fz QrGCmyK6DKIqUZYrRn4qiFSBYlveARrsOlK0AIUD038lvBkhta65nZPOmHS2o4yO2hIfciewr5p zfI4ZAkU2IYfHFKq0qGT9f7m963q1gI39frRWCZ9LOoXQxOkd0PphRFPz8sVEue9c3U+1wwUNBl +IJdL+mmWtVDyYXb/6GqzSpyRbmlxg0e3roVg2 X-Gm-Gg: ASbGnctxflj+NOIXAbt+Nx2LEhUJILm/KoClmy/9uFfDgGt+eTJw/p6PO1SM2lw2nEW tQnVs8eODuM4FBdbmoTpq3TtYSr3knZwFEFAYKGI0eIaLZ9kptcBEfFBSMYRYLS/0PG5WpkEeNt VcsaOMk6ix4GvjSvYOG/tDjL86isK+nE4AnWgExCFH0YqH4vTs99uOITwXo89OlEiNVuk1nI+k+ 4aUNnzGtPzZ7whWsXtjQyUbwO4K/Bbe1SoArFeSFnfQCnzZ6rWeI/znKl5ZT1YBNPhO9IzPDt+i wmScV5XvmslP5m/jhz1G X-Received: by 2002:a05:6000:1ac8:b0:390:f6aa:4e80 with SMTP id ffacd0b85a97d-3997f937b82mr5515251f8f.53.1742582217631; Fri, 21 Mar 2025 11:36:57 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHXoyhleQ/SIfmXuTMQHSrnyF2Lw4iHtK5E3qJHzUUdmu8ZWaYTj4u9wlI7Y1s33FjxnkapJQ== X-Received: by 2002:a05:6000:1ac8:b0:390:f6aa:4e80 with SMTP id ffacd0b85a97d-3997f937b82mr5515225f8f.53.1742582217112; Fri, 21 Mar 2025 11:36:57 -0700 (PDT) Received: from [192.168.122.1] ([151.49.194.153]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3997f9efc9bsm2968491f8f.87.2025.03.21.11.36.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 11:36:56 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Peter Maydell Subject: [PULL 24/24] rust: hpet: fix decoding of timer registers Date: Fri, 21 Mar 2025 19:35:56 +0100 Message-ID: <20250321183556.155097-25-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250321183556.155097-1-pbonzini@redhat.com> References: <20250321183556.155097-1-pbonzini@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.129.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.332, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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-bounces+qemu-devel=archiver.kernel.org@nongnu.org Due to a missing "& 0x18", timer registers are not decoded correctly. This breaks the tests/functional/test_x86_64_tuxrun.py functional test. Fixes: 519088b7cf6 ("rust: hpet: decode HPET registers into enums", 2025-03-06) Reported-by: Peter Maydell Tested-by: Peter Maydell Reviewed-by: Peter Maydell Signed-off-by: Paolo Bonzini --- rust/hw/timer/hpet/src/hpet.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/hw/timer/hpet/src/hpet.rs b/rust/hw/timer/hpet/src/hpet.rs index 63c1971f0b5..3ae3ec25f17 100644 --- a/rust/hw/timer/hpet/src/hpet.rs +++ b/rust/hw/timer/hpet/src/hpet.rs @@ -776,7 +776,7 @@ fn decode(&self, mut addr: hwaddr, size: u32) -> HPETAddrDecode { let timer_id: usize = ((addr - 0x100) / 0x20) as usize; if timer_id <= self.num_timers.get() { // TODO: Add trace point - trace_hpet_ram_[read|write]_timer_id(timer_id) - TimerRegister::try_from(addr) + TimerRegister::try_from(addr & 0x18) .map(|reg| HPETRegister::Timer(&self.timers[timer_id], reg)) } else { // TODO: Add trace point - trace_hpet_timer_id_out_of_range(timer_id)