All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Stefan Hajnoczi <stefanha@redhat.com>
Cc: qemu-devel@nongnu.org, qemu-rust@nongnu.org,
	Paolo Bonzini <pbonzini@redhat.com>,
	Tanish Desai <tanishdesai37@gmail.com>
Subject: Re: [PULL 15/16] tracetool/ftrace: add Rust support
Date: Fri, 2 Oct 2026 11:23:45 +0100	[thread overview]
Message-ID: <ar-GMXSnnVFzV59f@redhat.com> (raw)
In-Reply-To: <20251001153059.194991-16-stefanha@redhat.com>

AFAICT, this support for ftrace is incomplete.

Building with:

  ./configure --enable-trace-backends=ftrace  --enable-rust --target-list=x86_64-softmmu

results in Rust build failures

error[E0425]: cannot find function `ftrace_write` in module `bindings`
   --> /home/berrange/src/virt/qemu/build/trace/trace-hw_char.rs:130:27
    |
130 | ...   unsafe {bindings::ftrace_write(format_string.as_ptr() as *const c_char, _desc.as_ptr(), _addr as std::ffi::c_int, _value as std::ff...
    |                         ^^^^^^^^^^^^ not found in `bindings`

error[E0425]: cannot find function `ftrace_write` in module `bindings`
   --> /home/berrange/src/virt/qemu/build/trace/trace-hw_char.rs:140:27
    |
140 | ...   unsafe {bindings::ftrace_write(format_string.as_ptr() as *const c_char, _desc.as_ptr(), _addr as std::ffi::c_int, _value as std::ff...
    |                         ^^^^^^^^^^^^ not found in `bindings`


and these errors occur on both today's git master HEAD, and all
the way back to this first patch that claimed to support ftrace
with Rust.

Did some piece of supporting code go missing in the final
pull request here ? 

On Wed, Oct 01, 2025 at 11:30:58AM -0400, Stefan Hajnoczi wrote:
> From: Tanish Desai <tanishdesai37@gmail.com>
> 
> Signed-off-by: Tanish Desai <tanishdesai37@gmail.com>
> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> Message-ID: <20250929154938.594389-16-pbonzini@redhat.com>
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> ---
>  scripts/tracetool/backend/ftrace.py |  8 +++++-
>  tests/tracetool/ftrace.rs           | 40 +++++++++++++++++++++++++++++
>  tests/tracetool/tracetool-test.py   |  2 +-
>  3 files changed, 48 insertions(+), 2 deletions(-)
>  create mode 100644 tests/tracetool/ftrace.rs
> 
> diff --git a/scripts/tracetool/backend/ftrace.py b/scripts/tracetool/backend/ftrace.py
> index 7ddd5d11a6..e03698a2ed 100644
> --- a/scripts/tracetool/backend/ftrace.py
> +++ b/scripts/tracetool/backend/ftrace.py
> @@ -12,7 +12,7 @@
>  __email__      = "stefanha@redhat.com"
>  
>  
> -from tracetool import out
> +from tracetool import out, expand_format_string
>  
>  
>  PUBLIC = True
> @@ -43,3 +43,9 @@ def generate_h(event, group):
>  def generate_h_backend_dstate(event, group):
>      out('    trace_event_get_state_dynamic_by_id(%(event_id)s) || \\',
>          event_id="TRACE_" + event.name.upper())
> +
> +def generate_rs(event, group):
> +    out('        let format_string = c"%(fmt)s";',
> +        '        unsafe {bindings::ftrace_write(format_string.as_ptr() as *const c_char, %(args)s);}',
> +        fmt=expand_format_string(event.fmt),
> +        args=event.args.rust_call_varargs())
> diff --git a/tests/tracetool/ftrace.rs b/tests/tracetool/ftrace.rs
> new file mode 100644
> index 0000000000..07b9259cf2
> --- /dev/null
> +++ b/tests/tracetool/ftrace.rs
> @@ -0,0 +1,40 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +// This file is @generated by tracetool, do not edit.
> +
> +#[allow(unused_imports)]
> +use std::ffi::c_char;
> +#[allow(unused_imports)]
> +use util::bindings;
> +
> +#[inline(always)]
> +fn trace_event_state_is_enabled(dstate: u16) -> bool {
> +    (unsafe { trace_events_enabled_count }) != 0 && dstate != 0
> +}
> +
> +extern "C" {
> +    static mut trace_events_enabled_count: u32;
> +}
> +extern "C" {
> +    static mut _TRACE_TEST_BLAH_DSTATE: u16;
> +    static mut _TRACE_TEST_WIBBLE_DSTATE: u16;
> +}
> +
> +#[inline(always)]
> +#[allow(dead_code)]
> +pub fn trace_test_blah(_context: *mut (), _filename: &std::ffi::CStr)
> +{
> +    if trace_event_state_is_enabled(unsafe { _TRACE_TEST_BLAH_DSTATE}) {
> +        let format_string = c"Blah context=%p filename=%s";
> +        unsafe {bindings::ftrace_write(format_string.as_ptr() as *const c_char, _context /* as *mut () */, _filename.as_ptr());}
> +    }
> +}
> +
> +#[inline(always)]
> +#[allow(dead_code)]
> +pub fn trace_test_wibble(_context: *mut (), _value: std::ffi::c_int)
> +{
> +    if trace_event_state_is_enabled(unsafe { _TRACE_TEST_WIBBLE_DSTATE}) {
> +        let format_string = c"Wibble context=%p value=%d";
> +        unsafe {bindings::ftrace_write(format_string.as_ptr() as *const c_char, _context /* as *mut () */, _value /* as std::ffi::c_int */);}
> +    }
> +}
> diff --git a/tests/tracetool/tracetool-test.py b/tests/tracetool/tracetool-test.py
> index f58f3b795e..3341fb18f9 100755
> --- a/tests/tracetool/tracetool-test.py
> +++ b/tests/tracetool/tracetool-test.py
> @@ -14,7 +14,7 @@ def get_formats(backend):
>          "c",
>          "h",
>      ]
> -    if backend in {"log", "simple"}:
> +    if backend in {"ftrace", "log", "simple"}:
>          formats += ["rs"]
>      if backend == "dtrace":
>          formats += [
> -- 
> 2.51.0
> 
> 

With regards,
Daniel
-- 
|: https://berrange.com       ~~        https://hachyderm.io/@berrange :|
|: https://libvirt.org          ~~          https://entangle-photo.org :|
|: https://pixelfed.art/berrange   ~~    https://fstop138.berrange.com :|



  reply	other threads:[~2026-10-02 10:24 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-01 15:30 [PULL 00/16] Tracing patches Stefan Hajnoczi
2025-10-01 15:30 ` [PULL 01/16] tracetool: fix usage of try_import() Stefan Hajnoczi
2025-10-01 15:30 ` [PULL 02/16] tracetool: remove dead code Stefan Hajnoczi
2025-10-01 15:30 ` [PULL 03/16] treewide: remove unnessary "coding" header Stefan Hajnoczi
2025-10-01 15:30 ` [PULL 04/16] tracetool: add SPDX headers Stefan Hajnoczi
2025-10-01 15:30 ` [PULL 05/16] trace/ftrace: move snprintf+write from tracepoints to ftrace.c Stefan Hajnoczi
2025-10-01 15:30 ` [PULL 06/16] tracetool: add CHECK_TRACE_EVENT_GET_STATE Stefan Hajnoczi
2025-10-01 15:30 ` [PULL 07/16] tracetool/backend: remove redundant trace event checks Stefan Hajnoczi
2025-10-01 15:30 ` [PULL 08/16] tracetool: Add Rust format support Stefan Hajnoczi
2025-10-01 15:30 ` [PULL 09/16] rust: add trace crate Stefan Hajnoczi
2025-10-01 15:30 ` [PULL 10/16] rust: qdev: add minimal clock bindings Stefan Hajnoczi
2025-10-01 15:30 ` [PULL 11/16] rust: pl011: add tracepoints Stefan Hajnoczi
2025-10-01 15:30 ` [PULL 12/16] tracetool/simple: add Rust support Stefan Hajnoczi
2025-10-01 15:30 ` [PULL 13/16] log: change qemu_loglevel to unsigned Stefan Hajnoczi
2025-10-01 15:30 ` [PULL 14/16] tracetool/log: add Rust support Stefan Hajnoczi
2025-10-01 15:30 ` [PULL 15/16] tracetool/ftrace: " Stefan Hajnoczi
2026-10-02 10:23   ` Daniel P. Berrangé [this message]
2025-10-01 15:30 ` [PULL 16/16] tracetool/syslog: " Stefan Hajnoczi
2025-10-03 11:54 ` [PULL 00/16] Tracing patches Richard Henderson

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=ar-GMXSnnVFzV59f@redhat.com \
    --to=berrange@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-rust@nongnu.org \
    --cc=stefanha@redhat.com \
    --cc=tanishdesai37@gmail.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 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.