[PATCH v2] rust: workqueue: define built-in bh queues

Hamza Mahfooz posted 1 patch 9 months, 3 weeks ago
rust/kernel/workqueue.rs | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
[PATCH v2] rust: workqueue: define built-in bh queues
Posted by Hamza Mahfooz 9 months, 3 weeks ago
Provide safe getters to the system bh work queues. They will be used
to reimplement the Hyper-V VMBus in rust.

Signed-off-by: Hamza Mahfooz <hamzamahfooz@linux.microsoft.com>
---
v2: make the commit message suck less.
---
 rust/kernel/workqueue.rs | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/rust/kernel/workqueue.rs b/rust/kernel/workqueue.rs
index 0cd100d2aefb..68ce70d94f2d 100644
--- a/rust/kernel/workqueue.rs
+++ b/rust/kernel/workqueue.rs
@@ -703,3 +703,21 @@ pub fn system_freezable_power_efficient() -> &'static Queue {
     // SAFETY: `system_freezable_power_efficient_wq` is a C global, always available.
     unsafe { Queue::from_raw(bindings::system_freezable_power_efficient_wq) }
 }
+
+/// Returns the system bottom halves work queue (`system_bh_wq`).
+///
+/// It is similar to the one returned by [`system`] but for work items which
+/// need to run from a softirq context.
+pub fn system_bh() -> &'static Queue {
+    // SAFETY: `system_bh_wq` is a C global, always available.
+    unsafe { Queue::from_raw(bindings::system_bh_wq) }
+}
+
+/// Returns the system bottom halves high-priority work queue (`system_bh_highpri_wq`).
+///
+/// It is similar to the one returned by [`system_bh`] but for work items which
+/// require higher scheduling priority.
+pub fn system_bh_highpri() -> &'static Queue {
+    // SAFETY: `system_bh_highpri_wq` is a C global, always available.
+    unsafe { Queue::from_raw(bindings::system_bh_highpri_wq) }
+}
-- 
2.47.1
Re: [PATCH v2] rust: workqueue: define built-in bh queues
Posted by Tejun Heo 9 months, 3 weeks ago
On Mon, Feb 24, 2025 at 09:23:23AM -0500, Hamza Mahfooz wrote:
> Provide safe getters to the system bh work queues. They will be used
> to reimplement the Hyper-V VMBus in rust.
> 
> Signed-off-by: Hamza Mahfooz <hamzamahfooz@linux.microsoft.com>

Applied to wq/for-6.15.

Thanks.

-- 
tejun
Re: [PATCH v2] rust: workqueue: define built-in bh queues
Posted by Alice Ryhl 9 months, 3 weeks ago
On Mon, Feb 24, 2025 at 3:23 PM Hamza Mahfooz
<hamzamahfooz@linux.microsoft.com> wrote:
>
> Provide safe getters to the system bh work queues. They will be used
> to reimplement the Hyper-V VMBus in rust.
>
> Signed-off-by: Hamza Mahfooz <hamzamahfooz@linux.microsoft.com>

Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Re: [PATCH v2] rust: workqueue: define built-in bh queues
Posted by Boqun Feng 9 months, 3 weeks ago
Hi Hamza,

On Mon, Feb 24, 2025 at 09:23:23AM -0500, Hamza Mahfooz wrote:
> Provide safe getters to the system bh work queues. They will be used
> to reimplement the Hyper-V VMBus in rust.
> 
> Signed-off-by: Hamza Mahfooz <hamzamahfooz@linux.microsoft.com>
> ---
> v2: make the commit message suck less.
> ---
>  rust/kernel/workqueue.rs | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
> 

while you're at it, could you also add some usage of system_bh() in the
example at around line 77 in workqueue.rs? It could demonstrate the
usage and generate unit tests. Thanks!

Regards,
Boqun

> diff --git a/rust/kernel/workqueue.rs b/rust/kernel/workqueue.rs
> index 0cd100d2aefb..68ce70d94f2d 100644
> --- a/rust/kernel/workqueue.rs
> +++ b/rust/kernel/workqueue.rs
> @@ -703,3 +703,21 @@ pub fn system_freezable_power_efficient() -> &'static Queue {
>      // SAFETY: `system_freezable_power_efficient_wq` is a C global, always available.
>      unsafe { Queue::from_raw(bindings::system_freezable_power_efficient_wq) }
>  }
> +
> +/// Returns the system bottom halves work queue (`system_bh_wq`).
> +///
> +/// It is similar to the one returned by [`system`] but for work items which
> +/// need to run from a softirq context.
> +pub fn system_bh() -> &'static Queue {
> +    // SAFETY: `system_bh_wq` is a C global, always available.
> +    unsafe { Queue::from_raw(bindings::system_bh_wq) }
> +}
> +
> +/// Returns the system bottom halves high-priority work queue (`system_bh_highpri_wq`).
> +///
> +/// It is similar to the one returned by [`system_bh`] but for work items which
> +/// require higher scheduling priority.
> +pub fn system_bh_highpri() -> &'static Queue {
> +    // SAFETY: `system_bh_highpri_wq` is a C global, always available.
> +    unsafe { Queue::from_raw(bindings::system_bh_highpri_wq) }
> +}
> -- 
> 2.47.1
>
Re: [PATCH v2] rust: workqueue: define built-in bh queues
Posted by Tejun Heo 9 months, 3 weeks ago
On Mon, Feb 24, 2025 at 09:23:23AM -0500, Hamza Mahfooz wrote:
> Provide safe getters to the system bh work queues. They will be used
> to reimplement the Hyper-V VMBus in rust.
> 
> Signed-off-by: Hamza Mahfooz <hamzamahfooz@linux.microsoft.com>

Ah, you already sent v2.

  Acked-by: Tejun Heo <tj@kernel.org>

Again, let me know how you want route it.

Thanks.

-- 
tejun
Re: [PATCH v2] rust: workqueue: define built-in bh queues
Posted by Hamza Mahfooz 9 months, 3 weeks ago
On Mon, Feb 24, 2025 at 07:31:49AM -1000, Tejun Heo wrote:
> On Mon, Feb 24, 2025 at 09:23:23AM -0500, Hamza Mahfooz wrote:
> > Provide safe getters to the system bh work queues. They will be used
> > to reimplement the Hyper-V VMBus in rust.
> > 
> > Signed-off-by: Hamza Mahfooz <hamzamahfooz@linux.microsoft.com>
> 
> Ah, you already sent v2.
> 
>   Acked-by: Tejun Heo <tj@kernel.org>
> 
> Again, let me know how you want route it.

I would prefer it it went through the workqueue tree, thanks!

> 
> Thanks.
> 
> -- 
> tejun