From: Paolo Bonzini <pbonzini@redhat.com>
To: Zhao Liu <zhao1.liu@intel.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 06/10] rust: add bindings for timer
Date: Fri, 7 Feb 2025 15:55:52 +0100 [thread overview]
Message-ID: <57c08026-81a2-4643-8c2a-bab1e3299432@redhat.com> (raw)
In-Reply-To: <Z6YLwAqDGm+9aiaM@intel.com>
On 2/7/25 14:33, Zhao Liu wrote:
>>> +pub use bindings::QEMUTimer;
>>> +
>>> +use crate::{
>>> + bindings::{
>>> + self, qemu_clock_get_ns, timer_del, timer_init_full, timer_mod, QEMUClockType,
>>> + QEMUTimerListGroup,
>>> + },
>>> + callbacks::FnCall,
>>> +};
>>> +
>>> +impl QEMUTimer {
>>> + pub fn new() -> Self {
>>> + Default::default()
>>> + }
>>> +
>>> + pub fn timer_init_full<'timer, 'opaque: 'timer, T, F>(
>>
>> General question - should the names:
>>
>> - include the "timer" part, matching QEMU C code, or exclude it to avoid
>> repetition? I would say remove it,
>
> I agree and I would name it "init()" instead of "init_full()".
Please keep init_full(); init() would be a version without some of the
arguments (e.g. the TimerListGroup, or the attributes).
> I notice you've picked another way for IRQState, so I could follow that
> like:
>
> pub type Timer = bindings::QEMUTimer;
>
> This style make it easy to add doc (timer binding currently lacks
> doc, but I will add it as much as possible).
Good point.
> Another option may be to wrap QEMUTimer as what MemoryRegionOps did, but
> timer has only 1 callback so I think it's not necessary.
Yes, and we actually should do it sooner or later to add a PhantomPinned
field, because timers can't move in memory! But no need to do it now.
>>> + scale: u32,
While at it, can you add constants for the scale, i.e.
pub const NS: u32 = bindings::SCALE_NS;
pub const US: u32 = bindings::SCALE_US;
pub const MS: u32 = bindings::SCALE_MS;
? Using Timer::NS is clear enough and removes the need to import from
"bindings". At least in theory, bindings should not even have to be
"pub" (or at least that's where the code should move towards).
>>> + pub fn timer_mod(&mut self, expire_time: u64) {
>>> + unsafe { timer_mod(self as *mut QEMUTimer, expire_time as i64) }
>>> + }
>>
>> This can take &self, because timers are thread-safe:
>>
>> pub fn timer_mod(&self, expire_time: u64) {
>> unsafe { timer_mod(self.as_mut_ptr(), expire_time as i64) }
>> }
>
> timer_mod means "modify a timer", so I'd rename this method to "modify"
Yeah, changing mod/del to modify/delete is fine!
Paolo
next prev parent reply other threads:[~2025-02-07 14:56 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
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 [this message]
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=57c08026-81a2-4643-8c2a-bab1e3299432@redhat.com \
--to=pbonzini@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=berrange@redhat.com \
--cc=junjie.mao@hotmail.com \
--cc=manos.pitsidianakis@linaro.org \
--cc=peter.maydell@linaro.org \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-rust@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=zhao1.liu@intel.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).