From: Dan Carpenter <dan.carpenter@linaro.org>
To: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>,
linux-kernel@vger.kernel.org,
Peter Zijlstra <peterz@infradead.org>,
amadeuszx.slawinski@linux.intel.com,
Tony Nguyen <anthony.l.nguyen@intel.com>,
nex.sw.ncis.osdt.itp.upstreaming@intel.com,
netdev@vger.kernel.org,
Andy Shevchenko <andriy.shevchenko@intel.com>
Subject: Re: [RFC PATCH] cleanup: make scoped_guard() to be return-friendly
Date: Mon, 30 Sep 2024 15:57:08 +0300 [thread overview]
Message-ID: <bf348b5d-f6d5-4315-b072-cc1175ca4eff@stanley.mountain> (raw)
In-Reply-To: <e86748a9-6b72-4404-9042-c9b6308a9bc1@intel.com>
On Mon, Sep 30, 2024 at 01:30:58PM +0200, Przemek Kitszel wrote:
> > but your macro is wrong and will need to be re-written
>
> could you please elaborate here?
- __guard_ptr(_name)(&scope) && !done;
+ __guard_ptr(_name)(&scope), 1; \
The __guard_ptr(_name)(&scope) check is checking whether lock function
succeeded. With the new macro we only use scoped_guard() for locks which can't
fail. We can (basically must) remove the __guard_ptr(_name)(&scope) check since
we're ignoring the result.
There are only four drivers which rely on conditional scoped_guard() locks.
$ git grep scoped_guard | egrep '(try|_intr)'
drivers/input/keyboard/atkbd.c: scoped_guard(mutex_intr, &atkbd->mutex) {
drivers/input/touchscreen/tsc200x-core.c: scoped_guard(mutex_try, &ts->mutex) {
drivers/input/touchscreen/wacom_w8001.c: scoped_guard(mutex_intr, &w8001->mutex) {
drivers/platform/x86/ideapad-laptop.c: scoped_guard(mutex_intr, &dytc->mutex) {
This change breaks the drivers at runtime, but you need to ensure that drivers
using the old API will break at compile time so that people don't introduce new
bugs during the transition. In other words, you will need to update the
DEFINE_GUARD_COND() stuff as well.
$ git grep DEFINE_GUARD_COND
include/linux/cleanup.h: * DEFINE_GUARD_COND(name, ext, condlock)
include/linux/cleanup.h:#define DEFINE_GUARD_COND(_name, _ext, _condlock) \
include/linux/iio/iio.h:DEFINE_GUARD_COND(iio_claim_direct, _try, ({
include/linux/mutex.h:DEFINE_GUARD_COND(mutex, _try, mutex_trylock(_T))
include/linux/mutex.h:DEFINE_GUARD_COND(mutex, _intr, mutex_lock_interruptible(_T) == 0)
include/linux/rwsem.h:DEFINE_GUARD_COND(rwsem_read, _try, down_read_trylock(_T))
include/linux/rwsem.h:DEFINE_GUARD_COND(rwsem_read, _intr, down_read_interruptible(_T) == 0)
include/linux/rwsem.h:DEFINE_GUARD_COND(rwsem_write, _try, down_write_trylock(_T))
I propose that you use scoped_try_guard() and scoped_guard_interruptible() to
support conditional locking. Creating different macros for conditional locks is
the only way you can silence your GCC warnings and it makes life easier for me
as a static checker developer as well. It's probably more complicated than I
have described so I'll leave that up to you, but this first draft doesn't work.
regards,
dan carpenter
next prev parent reply other threads:[~2024-09-30 12:57 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-26 13:41 [RFC PATCH] cleanup: make scoped_guard() to be return-friendly Przemek Kitszel
2024-09-27 7:31 ` Dan Carpenter
2024-09-27 14:08 ` Przemek Kitszel
2024-09-27 15:04 ` Dan Carpenter
2024-09-30 10:21 ` Przemek Kitszel
2024-09-30 11:08 ` Dan Carpenter
2024-09-30 11:30 ` Przemek Kitszel
2024-09-30 12:57 ` Dan Carpenter [this message]
2024-09-30 13:07 ` Dmitry Torokhov
2024-09-30 12:57 ` Dmitry Torokhov
2024-09-30 11:30 ` Markus Elfring
2024-09-30 12:33 ` Przemek Kitszel
2024-09-30 12:51 ` [RFC] " Markus Elfring
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=bf348b5d-f6d5-4315-b072-cc1175ca4eff@stanley.mountain \
--to=dan.carpenter@linaro.org \
--cc=amadeuszx.slawinski@linux.intel.com \
--cc=andriy.shevchenko@intel.com \
--cc=anthony.l.nguyen@intel.com \
--cc=dmitry.torokhov@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=nex.sw.ncis.osdt.itp.upstreaming@intel.com \
--cc=peterz@infradead.org \
--cc=przemyslaw.kitszel@intel.com \
/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