All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zhao Liu <zhao1.liu@intel.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Manos Pitsidianakis" <manos.pitsidianakis@linaro.org>,
	"Junjie Mao" <junjie.mao@hotmail.com>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Daniel P . Berrangé" <berrange@redhat.com>,
	qemu-devel@nongnu.org, qemu-rust@nongnu.org
Subject: Re: [PATCH 04/10] rust: add bindings for gpio_{in|out} initialization
Date: Fri, 7 Feb 2025 16:43:57 +0800	[thread overview]
Message-ID: <Z6XHzXwoIklPZQ/I@intel.com> (raw)
In-Reply-To: <5a19e7d2-9d69-45fe-812f-84145229876f@redhat.com>

On Wed, Jan 29, 2025 at 11:59:04AM +0100, Paolo Bonzini wrote:
> Date: Wed, 29 Jan 2025 11:59:04 +0100
> From: Paolo Bonzini <pbonzini@redhat.com>
> Subject: Re: [PATCH 04/10] rust: add bindings for gpio_{in|out}
>  initialization
> 
> 
> 
> On Sat, Jan 25, 2025 at 1:32 PM Zhao Liu <zhao1.liu@intel.com> wrote:
> > +    fn init_gpio_in<F: for<'a> FnCall<(&'a Self::Target, u32, u32)>>(&self, num_lines: u32, _f: F) {
> > +        unsafe extern "C" fn rust_irq_handler<T, F: for<'a> FnCall<(&'a T, u32, u32)>>(
> > +            opaque: *mut c_void,
> > +            line: c_int,
> > +            level: c_int,
> > +        ) {
> > +            // SAFETY: the opaque was passed as a reference to `T`
> > +            F::call((unsafe { &*(opaque.cast::<T>()) }, line as u32, level as u32))
> > +        }
> > +
> > +        let gpio_in_cb: unsafe extern "C" fn(*mut c_void, c_int, c_int) =
> > +            rust_irq_handler::<Self::Target, F>;
> 
> Please add "let _: () = F::ASSERT_IS_SOME;", which is added by the
> qdev_init_clock_in() patch.
> 

Okay.

I would add `assert!(F::is_some());` at the beginning of init_gpio_in().

There's a difference with origianl C version:

In C side, qdev_get_gpio_in() family could accept a NULL handler, but
there's no such case in current QEMU:

* qdev_get_gpio_in
* qdev_init_gpio_in_named
* qdev_init_gpio_in_named_with_opaque

And from code logic view, creating an input GPIO line but doing nothing
on input, sounds also unusual.

So, for simplicity, in the Rust version I make the handler non-optional.




  reply	other threads:[~2025-02-07  8:24 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-25 12:51 [PATCH 00/10] rust: Add HPET timer device Zhao Liu
2025-01-25 12:51 ` [PATCH 01/10] i386/fw_cfg: move hpet_cfg definition to hpet.c Zhao Liu
2025-01-25 12:51 ` [PATCH 02/10] rust/qdev: add the macro to define bit property Zhao Liu
2025-01-25 12:51 ` [PATCH 03/10] rust/irq: Add a helper to convert [InterruptSource] to [*mut IRQState] Zhao Liu
2025-01-29 10:51   ` Paolo Bonzini
2025-02-07  7:10     ` Zhao Liu
2025-02-07  7:44       ` Zhao Liu
2025-02-07  9:57         ` Paolo Bonzini
2025-02-08 11:14           ` Zhao Liu
2025-02-08 11:39             ` Paolo Bonzini
2025-02-08 18:10               ` Zhao Liu
2025-01-25 12:51 ` [PATCH 04/10] rust: add bindings for gpio_{in|out} initialization Zhao Liu
2025-01-29 10:59   ` Paolo Bonzini
2025-02-07  8:43     ` Zhao Liu [this message]
2025-02-07  9:54       ` Paolo Bonzini
2025-02-08 11:16         ` Zhao Liu
2025-01-25 12:51 ` [PATCH 05/10] rust: add bindings for memattrs Zhao Liu
2025-01-25 12:51 ` [PATCH 06/10] rust: add bindings for timer Zhao Liu
2025-01-29 10:58   ` Paolo Bonzini
2025-02-07 13:33     ` Zhao Liu
2025-02-07 14:55       ` Paolo Bonzini
2025-02-08 11:08         ` Zhao Liu
2025-01-25 12:51 ` [PATCH 07/10] rust/timer/hpet: define hpet_cfg Zhao Liu
2025-01-29 10:58   ` Paolo Bonzini
2025-02-07 14:30     ` Zhao Liu
2025-01-25 12:51 ` [PATCH 08/10] rust/timer/hpet: add basic HPET timer and HPETState Zhao Liu
2025-01-29 10:57   ` Paolo Bonzini
2025-02-08  8:19     ` Zhao Liu
2025-01-25 12:51 ` [PATCH 09/10] rust/timer/hpet: add qom and qdev APIs support Zhao Liu
2025-01-29 10:58   ` Paolo Bonzini
2025-02-08 10:55     ` Zhao Liu
2025-02-08 11:41       ` Paolo Bonzini
2025-02-08 18:06         ` Zhao Liu
2025-01-25 12:51 ` [PATCH 10/10] i386: enable rust hpet for pc when rust is enabled Zhao Liu

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=Z6XHzXwoIklPZQ/I@intel.com \
    --to=zhao1.liu@intel.com \
    --cc=alex.bennee@linaro.org \
    --cc=berrange@redhat.com \
    --cc=junjie.mao@hotmail.com \
    --cc=manos.pitsidianakis@linaro.org \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=philmd@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-rust@nongnu.org \
    --cc=richard.henderson@linaro.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.