Re: [RFC][PATCH 1/2] locking: Introduce __cleanup__ based guards
From: Waiman Long
Date: Fri May 26 2023 - 14:50:32 EST
On 5/26/23 11:05, Peter Zijlstra wrote:
Use __attribute__((__cleanup__(func))) to buid various guards:
- ptr_guard()
- void_guard() / void_scope()
- lock_guard() / lock_scope()
- double_lock_guard() / double_lock_scope()
Where the _guard thingies are variables with scope-based cleanup and
the _scope thingies are basically do-once for-loops with the same.
The CPP is rather impenetrable -- but I'll attempt to write proper
comments if/when people think this is worth pursuing.
Actual usage in the next patch
Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx>
---
include/linux/compiler_attributes.h | 2
include/linux/irqflags.h | 7 ++
include/linux/guards.h | 118 ++++++++++++++++++++++++++++++++++++
include/linux/mutex.h | 5 +
include/linux/preempt.h | 4 +
include/linux/rcupdate.h | 3
include/linux/sched/task.h | 2
include/linux/spinlock.h | 23 +++++++
8 files changed, 164 insertions(+)
That is an interesting idea and may help to simplify some of the common
code patterns that we have in the kernel. The macros are a bit hard to
read and understand though I thought I got a rough idea of what they are
trying to do.
BTW, do we have a use case for double_lock_guard/double_lock_scope? I
can envision a nested lock_scope inside a lock_scope, but taking 2 auto
locks of the same type at init time and then unlock them at exit just
doesn't make sense to me.
Cheers,
Longman