From: Zhao Liu <zhao1.liu@intel.com>
To: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
qemu-devel@nongnu.org, qemu-rust@nongnu.org
Subject: Re: [PATCH 09/12] rust/qdev: Support bit property in #property macro
Date: Wed, 17 Sep 2025 15:25:38 +0800 [thread overview]
Message-ID: <aMpicpXtVu/4lK63@intel.com> (raw)
In-Reply-To: <CAAjaMXYkJno=nAcAGPWQJMCjcSkePJwjmZgFkPAkX2N3tQoSCQ@mail.gmail.com>
On Tue, Sep 16, 2025 at 01:16:25PM +0300, Manos Pitsidianakis wrote:
> Date: Tue, 16 Sep 2025 13:16:25 +0300
> From: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
> Subject: Re: [PATCH 09/12] rust/qdev: Support bit property in #property
> macro
>
> On Tue, Sep 16, 2025 at 11:34 AM Zhao Liu <zhao1.liu@intel.com> wrote:
> >
> > Add BIT_INFO to QDevProp trait, so that bit related property info could
> > be bound to u32 & u64.
> >
> > Then add "bit=*" field in #property attributes macro to allow device to
> > configure bit property.
> >
> > In addtion, convert the #property field parsing from `if-else` pattern
> > to `match` pattern, to help readability. And note, the `bitnr` member of
> > `Property` struct is generated by manual TokenStream construction,
> > instead of conditional repetition (like #(bitnr: #bitnr,)?) since
> > `quote` doesn't support this.
> >
> > Signed-off-by: Zhao Liu <zhao1.liu@intel.com>
> > ---
> > rust/hw/core/src/qdev.rs | 15 +++++---
> > rust/qemu-macros/src/lib.rs | 77 +++++++++++++++++++++++++------------
> > 2 files changed, 62 insertions(+), 30 deletions(-)
> >
> > diff --git a/rust/hw/core/src/qdev.rs b/rust/hw/core/src/qdev.rs
> > index b57dc05ebb0e..a8cd9e3c2fd5 100644
> > --- a/rust/hw/core/src/qdev.rs
> > +++ b/rust/hw/core/src/qdev.rs
> > @@ -109,8 +109,8 @@ pub trait ResettablePhasesImpl {
> > ///
> > /// # Safety
> > ///
> > -/// This trait is marked as `unsafe` because `BASE_INFO` must be a valid raw
> > -/// reference to a [`bindings::PropertyInfo`].
> > +/// This trait is marked as `unsafe` because `BASE_INFO` and `BIT_INFO` must be
> > +/// the valid raw references to [`bindings::PropertyInfo`].
>
> s/the //
Okay.
> > ///
> > /// Note we could not use a regular reference:
> > ///
> > @@ -132,13 +132,18 @@ pub trait ResettablePhasesImpl {
> > /// [`bindings::PropertyInfo`] pointer for the trait implementation to be safe.
> > pub unsafe trait QDevProp {
> > const BASE_INFO: *const bindings::PropertyInfo;
> > + const BIT_INFO: *const bindings::PropertyInfo = {
> > + panic!("invalid type for bit property");
> > + };
>
> Why is this needed?
Only 3 types supports bit:
u32: qdev_prop_bit
u64: qdev_prop_bit64
OnOffAuto: qdev_prop_on_off_auto_bit64 (not support yet)
So for other types don't support bit, they need default BIT_INFO item,
otherwise, we will meet the error:
not all trait items implemented, missing: `BIT_INFO`
And this panic can provide richer info about why a type can't support
bit property. (I just refer the implementation of `trait VMState`).
Thanks,
Zhao
next prev parent reply other threads:[~2025-09-17 7:04 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-16 8:55 [PATCH 00/12] rust: miscellaneous cleanup & HPET #property conversion Zhao Liu
2025-09-16 8:55 ` [PATCH 01/12] subprojects: Update .gitignore for proc-macro2 and syn Zhao Liu
2025-09-16 9:58 ` Manos Pitsidianakis
2025-09-17 6:43 ` Zhao Liu
2025-09-16 8:55 ` [PATCH 02/12] subprojects: Ignore .wraplock file generated by meson v1.9.0 Zhao Liu
2025-09-16 9:59 ` Manos Pitsidianakis
2025-09-16 8:55 ` [PATCH 03/12] rust/qemu-macros: Fix Clippy's complaints about lambda parameter naming Zhao Liu
2025-09-16 10:00 ` Manos Pitsidianakis
2025-09-16 8:55 ` [PATCH 04/12] rust/common/uninit: Fix Clippy's complaints about lifetime Zhao Liu
2025-09-16 10:00 ` Manos Pitsidianakis
2025-09-16 8:55 ` [PATCH 05/12] rust/qdev: use addr_of! in QDevProp Zhao Liu
2025-09-16 8:55 ` [PATCH 06/12] rust/qdev: Refine the documentation for QDevProp trait Zhao Liu
2025-09-16 8:55 ` [PATCH 07/12] rust/qdev: Rename PropertyInfo field from VALUE to BASE_INFO Zhao Liu
2025-09-16 10:10 ` Manos Pitsidianakis
2025-09-17 6:46 ` Zhao Liu
2025-09-16 8:55 ` [PATCH 08/12] rust/qdev: Support property info for more common types Zhao Liu
2025-09-16 10:13 ` Manos Pitsidianakis
2025-09-17 7:13 ` Zhao Liu
2025-09-16 8:55 ` [PATCH 09/12] rust/qdev: Support bit property in #property macro Zhao Liu
2025-09-16 10:16 ` Manos Pitsidianakis
2025-09-17 7:25 ` Zhao Liu [this message]
2025-09-17 11:40 ` Paolo Bonzini
2025-09-17 9:14 ` Paolo Bonzini
2025-09-16 8:55 ` [PATCH 10/12] rust/hpet: Clean up type mismatch for num_timers property Zhao Liu
2025-09-16 8:55 ` [PATCH 11/12] rust/hpet: Convert qdev properties to #property macro Zhao Liu
2025-09-16 10:19 ` Manos Pitsidianakis
2025-09-16 8:55 ` [PATCH 12/12] rust/qdev: Drop declare_properties & define_property macros Zhao Liu
2025-09-16 10:19 ` Manos Pitsidianakis
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aMpicpXtVu/4lK63@intel.com \
--to=zhao1.liu@intel.com \
--cc=manos.pitsidianakis@linaro.org \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-rust@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.