[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250625114037.GD1613376@noisy.programming.kicks-ass.net>
Date: Wed, 25 Jun 2025 13:40:37 +0200
From: Peter Zijlstra <peterz@...radead.org>
To: Boqun Feng <boqun.feng@...il.com>
Cc: linux-kernel@...r.kernel.org, rcu@...r.kernel.org, lkmm@...ts.linux.dev,
Ingo Molnar <mingo@...nel.org>, Will Deacon <will@...nel.org>,
Waiman Long <longman@...hat.com>,
Davidlohr Bueso <dave@...olabs.net>,
"Paul E. McKenney" <paulmck@...nel.org>,
Josh Triplett <josh@...htriplett.org>,
Frederic Weisbecker <frederic@...nel.org>,
Neeraj Upadhyay <neeraj.upadhyay@...nel.org>,
Joel Fernandes <joelagnelf@...dia.com>,
Uladzislau Rezki <urezki@...il.com>,
Steven Rostedt <rostedt@...dmis.org>,
Mathieu Desnoyers <mathieu.desnoyers@...icios.com>,
Lai Jiangshan <jiangshanlai@...il.com>,
Zqiang <qiang.zhang@...ux.dev>, Breno Leitao <leitao@...ian.org>,
aeh@...a.com, netdev@...r.kernel.org, edumazet@...gle.com,
jhs@...atatu.com, kernel-team@...a.com,
Erik Lundgren <elundgren@...a.com>
Subject: Re: [PATCH 4/8] shazptr: Avoid synchronize_shaptr() busy waiting
On Tue, Jun 24, 2025 at 08:10:57PM -0700, Boqun Feng wrote:
> +/* Scan structure for synchronize_shazptr(). */
> +struct shazptr_scan {
> + /* The scan kthread */
> + struct task_struct *thread;
> +
> + /* Wait queue for the scan kthread */
> + struct swait_queue_head wq;
> +
> + /* Whether the scan kthread has been scheduled to scan */
> + bool scheduled;
> +
> + /* The lock protecting ->queued and ->scheduled */
> + struct mutex lock;
> +
> + /* List of queued synchronize_shazptr() request. */
> + struct list_head queued;
> +
> + int cpu_grp_size;
> +
> + /* List of scanning synchronize_shazptr() request. */
> + struct list_head scanning;
> +
> + /* Buffer used for hazptr slot scan, nr_cpu_ids slots*/
> + struct shazptr_snapshot* snaps;
> +};
I find this style very hard to read, also the order of things is weird.
struct shazptr_scan {
struct task_struct *thread;
struct swait_queue_head wq;
struct list_head scanning;
struct mutex lock;
struct list_head queued; /* __guarded_by(lock) */
bool scheduled; /* __guarded_by(lock) */
struct shazptr_snapshot snaps[0] __counted_by(nr_cpu_ids);
};
(the __guarded_by() thing will come with Thread-Safety support that
Google is still cooking in clang)
> +static struct shazptr_scan shazptr_scan;
And then make this a pointer, and allocate the whole thing as a single
data structure with however much snaps data you need.
Powered by blists - more mailing lists