From: Peter Zijlstra <peterz@infradead.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: keescook@chromium.org, gregkh@linuxfoundation.org,
pbonzini@redhat.com, linux-kernel@vger.kernel.org,
ojeda@kernel.org, ndesaulniers@google.com, mingo@redhat.com,
will@kernel.org, longman@redhat.com, boqun.feng@gmail.com,
juri.lelli@redhat.com, vincent.guittot@linaro.org,
dietmar.eggemann@arm.com, rostedt@goodmis.org,
bsegall@google.com, mgorman@suse.de, bristot@redhat.com,
vschneid@redhat.com, paulmck@kernel.org, frederic@kernel.org,
quic_neeraju@quicinc.com, joel@joelfernandes.org,
josh@joshtriplett.org, mathieu.desnoyers@efficios.com,
jiangshanlai@gmail.com, rcu@vger.kernel.org, tj@kernel.org,
tglx@linutronix.de, linux-toolchains@vger.kernel.org
Subject: Re: [PATCH v2 0/2] Lock and Pointer guards
Date: Tue, 6 Jun 2023 20:08:06 +0200 [thread overview]
Message-ID: <20230606180806.GA942082@hirez.programming.kicks-ass.net> (raw)
In-Reply-To: <CAHk-=wgQ5m+SnWTYGHu0JgYXTk2dkGF+msX=ARfYoo3t1_fX9g@mail.gmail.com>
On Tue, Jun 06, 2023 at 07:50:47AM -0700, Linus Torvalds wrote:
> I feel like you seem entirely too fixated on locking.
It's what I started out with... but it's certainly not everything.
The thing I have removes pretty much all the error gotos from
sched/core.c and events/core.c and while locking is ofcourse a fair
amount of that there's significant non-locking usage.
> (c) think that generally are not "nested" (you release the resources
> you've allocated, but you don't "nest" the allocations - they are just
> serial.
>
> (d) think that the syntax could be pretty nasty, because the cleanup
> is not just a trivial fixed "unlock" function
So I'm not sure you've seen the actual convertions I've done, but yes,
there's lots of those.
I've just used the guard naming because locks is what I started out
with.
+ ptr_guard(kfree, alloc) = kzalloc(event->read_size, GFP_KERNEL);
+ if (!alloc)
return -ENOMEM;
event = perf_event_alloc(&attr, cpu, task, group_leader, NULL,
NULL, NULL, cgroup_fd);
+ if (IS_ERR(event))
+ return PTR_ERR(event);
+
+ ptr_guard(free_event, event_guard) = event;
+ ptr_guard(put_task, p) = find_get_task(pid);
+ if (!p)
+ return -ESRCH;
So it does all that... you just hate the naming -- surely we can fix
that.
Would it all be less offensive if I did: s/guard/cleanup/ on the whole
thing? Then we'd have things like:
DEFINE_PTR_CLEANUP(put_task, struct task_struct *,
if (_C) put_task_struct(_C))
ptr_cleanup(put_task, p) = find_get_task(pid);
if (!p)
return -ESRCH;
DEFINE_PTR_CLEANUP(free_event, struct perf_event *,
if (!IS_ERR_OR_NULL(_C)) free_event(_C))
ptr_cleanup(free_event, event) = perf_event_alloc(...);
if (IS_ERR(event))
return PTR_ERR(event);
DEFINE_PTR_CLEANUP(kfree, void *, kfree(_C))
ptr_cleanup(kfree, foo) = kzalloc(...);
if (!foo)
return -ENOMEM;
But do we then continue with:
DEFINE_CLEANUP(mutex, struct mutex *, mutex_lock(_C), mutex_unlock(_C))
cleanup(mutex, &my_mutex);
scoped_cleanup (mutex, &my_mutex) {
...
}
etc..? or do we keep guard() there, but based internally on
ptr_cleanup() with the cleanup_## naming.
next prev parent reply other threads:[~2023-06-06 18:08 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-26 20:52 [PATCH v2 0/2] Lock and Pointer guards Peter Zijlstra
2023-05-26 20:52 ` [PATCH v2 1/2] locking: Introduce __cleanup__ based guards Peter Zijlstra
2023-05-26 21:24 ` Peter Zijlstra
2023-05-26 21:54 ` Linus Torvalds
2023-05-27 8:57 ` Peter Zijlstra
2023-05-26 20:52 ` [PATCH v2 2/2] sched: Use fancy new guards Peter Zijlstra
2023-05-27 17:21 ` [PATCH v2 0/2] Lock and Pointer guards Mathieu Desnoyers
2023-05-27 19:18 ` Linus Torvalds
2023-05-29 12:09 ` Paolo Bonzini
2023-05-29 19:04 ` Linus Torvalds
2023-05-29 21:27 ` Ian Lance Taylor
2023-05-30 0:06 ` Linus Torvalds
2023-05-30 9:23 ` Peter Zijlstra
2023-05-30 9:34 ` Peter Zijlstra
2023-05-30 13:58 ` Valentin Schneider
2023-06-06 9:42 ` Peter Zijlstra
2023-06-06 13:17 ` Linus Torvalds
2023-06-06 13:40 ` Peter Zijlstra
2023-06-06 14:50 ` Linus Torvalds
2023-06-06 16:06 ` Kees Cook
2023-06-06 18:08 ` Peter Zijlstra [this message]
2023-06-06 23:22 ` Linus Torvalds
2023-06-07 9:41 ` Peter Zijlstra
2023-06-08 8:52 ` Peter Zijlstra
2023-06-08 9:04 ` Greg KH
2023-06-08 15:45 ` Linus Torvalds
2023-06-08 16:47 ` Kees Cook
2023-06-08 16:59 ` Linus Torvalds
2023-06-08 17:20 ` Nick Desaulniers
2023-06-08 18:51 ` Peter Zijlstra
2023-06-08 20:14 ` Nick Desaulniers
2023-06-09 10:20 ` Paolo Bonzini
2023-06-08 20:06 ` Peter Zijlstra
2023-06-09 2:25 ` Linus Torvalds
2023-06-09 8:14 ` Peter Zijlstra
2023-06-09 21:18 ` Kees Cook
2023-06-09 8:27 ` Rasmus Villemoes
2023-06-06 15:31 ` Kees Cook
2023-06-06 15:45 ` Linus Torvalds
2023-06-06 16:08 ` Kees Cook
2023-06-08 16:25 ` David Laight
2023-05-30 9:26 ` Peter Zijlstra
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=20230606180806.GA942082@hirez.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=boqun.feng@gmail.com \
--cc=bristot@redhat.com \
--cc=bsegall@google.com \
--cc=dietmar.eggemann@arm.com \
--cc=frederic@kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=jiangshanlai@gmail.com \
--cc=joel@joelfernandes.org \
--cc=josh@joshtriplett.org \
--cc=juri.lelli@redhat.com \
--cc=keescook@chromium.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-toolchains@vger.kernel.org \
--cc=longman@redhat.com \
--cc=mathieu.desnoyers@efficios.com \
--cc=mgorman@suse.de \
--cc=mingo@redhat.com \
--cc=ndesaulniers@google.com \
--cc=ojeda@kernel.org \
--cc=paulmck@kernel.org \
--cc=pbonzini@redhat.com \
--cc=quic_neeraju@quicinc.com \
--cc=rcu@vger.kernel.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
--cc=tj@kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
--cc=will@kernel.org \
/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