> + // SAFETY: `probe_console` has the signature expected by the
> `console` tracepoint. Being
> + // part of the kernel image, it and `OBSERVED` outlive the
> registration, so there is no
> + // need to synchronize with in-flight probes after unregistering.
> + to_result(unsafe {
> + bindings::tracepoint_probe_register(
> + &raw mut bindings::__tracepoint_console,
> + probe_console as *mut c_void,
> + ptr::null_mut(),
> + )
> + })?;
> + let _unregister = ScopeGuard::new(|| {
> + // SAFETY: The probe was registered above.
> + unsafe {
> + bindings::tracepoint_probe_unregister(
> + &raw mut bindings::__tracepoint_console,
> + probe_console as *mut c_void,
> + ptr::null_mut(),
> + );
> + }
> + });
> +
> + let worker = ctx.clone();
> + workqueue::system_unbound().try_spawn(GFP_KERNEL, move || {
I ran this locally and got the following warning:
[ 623.232012] workqueue: work func
_RNvXsb_NtCskctMpSfuwL9_6kernel9workqueueINtNtCs1G77UTwpz6o_4core3pin3PinINtNtNtB7_5alloc4kbox3BoxINtB5_11ClosureWorkNCNvNtNtB7_10kcsan_test5tests9data_races_0ENtNtB1d_9allocator7KmallocEEINtB5_15WorkItemPointerKy0_E3runB7_
enqueued on deprecated workqueue. Use system_{percpu|dfl}_wq instead.
Do we need to use a different workqueue?
> + while !worker.stop.load(Relaxed) {
> + racy_inc();
> + }
> + worker.done.complete_all();
> + })?;
> +
> + let start = Instant::<Monotonic>::now();
> + while !OBSERVED.load(Relaxed) && start.elapsed() <
> Delta::from_secs(10) {
> + racy_inc();
> + }
> +
> + ctx.stop.store(true, Relaxed);
> + ctx.done.wait_for_completion();
> + drop(_unregister);
> +
> + assert!(OBSERVED.load(Relaxed));
> + Ok(())
> + }
> +}
> diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs
> index 4d5c96ddc49c..009efda9e7a4 100644
> --- a/rust/kernel/lib.rs
> +++ b/rust/kernel/lib.rs
> @@ -94,6 +94,8 @@
> pub mod iov;
> pub mod irq;
> pub mod jump_label;
> +#[cfg(CONFIG_RUST_KCSAN_KUNIT_TEST)]
> +mod kcsan_test;
> #[cfg(CONFIG_KUNIT)]
> pub mod kunit;
> pub mod list;
> --
> 2.56.0.385.gd3acb90ef8-goog
>
--
Alexander Potapenko
Software Engineer
Google Germany GmbH
Erika-Mann-Straße, 33
80636 München
Geschäftsführer: Paul Manicle, Liana Sebastian
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg