From: Johan Hovold <johan@kernel.org>
To: Linus Walleij <linus.walleij@linaro.org>
Cc: Alexandre Courbot <gnurou@gmail.com>,
linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org,
Johan Hovold <johan@kernel.org>
Subject: [PATCH 10/23] gpio: sysfs: release irq after class-device deregistration
Date: Tue, 21 Apr 2015 17:42:18 +0200 [thread overview]
Message-ID: <1429630951-27082-11-git-send-email-johan@kernel.org> (raw)
In-Reply-To: <1429630951-27082-1-git-send-email-johan@kernel.org>
Make sure to release any irq only after the class device has been
deregistered.
This avoids a race between gpiod_unexport and edge_store, where an irq
could be allocated just before the gpio class device is deregistered
without relying on FLAG_EXPORT and the global sysfs lock.
Note that there is no need to hold the sysfs lock when releasing the irq
after the class device is gone as kernfs will prevent further attribute
operations.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/gpio/gpiolib-sysfs.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c
index 9d9f1f1a2417..d896b6fa7fe8 100644
--- a/drivers/gpio/gpiolib-sysfs.c
+++ b/drivers/gpio/gpiolib-sysfs.c
@@ -680,7 +680,6 @@ void gpiod_unexport(struct gpio_desc *desc)
dev = class_find_device(&gpio_class, NULL, desc, match_export);
if (dev) {
- gpio_setup_irq(desc, dev, 0);
clear_bit(FLAG_SYSFS_DIR, &desc->flags);
clear_bit(FLAG_EXPORT, &desc->flags);
} else
@@ -691,6 +690,11 @@ void gpiod_unexport(struct gpio_desc *desc)
if (dev) {
device_unregister(dev);
+ /*
+ * Release irq after deregistration to prevent race with
+ * edge_store.
+ */
+ gpio_setup_irq(desc, dev, 0);
put_device(dev);
}
--
2.0.5
next prev parent reply other threads:[~2015-04-21 15:42 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-21 15:42 [PATCH 00/23] gpio: sysfs: fixes and clean ups Johan Hovold
2015-04-21 15:42 ` [PATCH 01/23] gpio: sysfs: fix memory leaks and device hotplug Johan Hovold
2015-04-29 21:44 ` Linus Walleij
2015-04-30 8:26 ` Johan Hovold
2015-04-21 15:42 ` [PATCH 02/23] gpio: clean up gpiochip_remove Johan Hovold
2015-04-21 15:42 ` [PATCH 03/23] gpio: sysfs: drop redundant lock-as-irq Johan Hovold
2015-04-29 21:48 ` Linus Walleij
2015-04-30 9:07 ` Johan Hovold
2015-04-21 15:42 ` [PATCH 04/23] gpio: sysfs: preparatory clean ups Johan Hovold
2015-04-21 15:42 ` [PATCH 05/23] gpio: sysfs: reduce gpiochip-export locking scope Johan Hovold
2015-04-21 15:42 ` [PATCH 06/23] gpio: sysfs: clean up chip class-device handling Johan Hovold
2015-04-27 3:54 ` Alexandre Courbot
2015-04-27 8:47 ` Johan Hovold
2015-04-21 15:42 ` [PATCH 07/23] gpio: sysfs: rename gpiochip registration functions Johan Hovold
2015-04-27 3:54 ` Alexandre Courbot
2015-04-27 8:27 ` Johan Hovold
2015-04-27 8:50 ` Alexandre Courbot
2015-04-27 9:05 ` Johan Hovold
2015-04-28 3:27 ` Alexandre Courbot
2015-04-28 11:12 ` Johan Hovold
2015-04-21 15:42 ` [PATCH 08/23] gpio: remove gpiod_sysfs_set_active_low Johan Hovold
2015-04-27 3:54 ` Alexandre Courbot
2015-04-27 8:16 ` Johan Hovold
2015-04-27 8:34 ` Alexandre Courbot
2015-04-21 15:42 ` [PATCH 09/23] gpio: sysfs: use DEVICE_ATTR macros Johan Hovold
2015-04-21 15:42 ` Johan Hovold [this message]
2015-04-21 15:42 ` [PATCH 11/23] gpio: sysfs: remove redundant export tests Johan Hovold
2015-04-21 15:42 ` [PATCH 12/23] gpio: sysfs: add gpiod class-device data Johan Hovold
2015-04-21 15:42 ` [PATCH 13/23] gpio: sysfs: remove redundant gpio-descriptor parameters Johan Hovold
2015-04-21 15:42 ` [PATCH 14/23] gpio: sysfs: clean up interrupt-interface implementation Johan Hovold
2015-04-21 15:42 ` [PATCH 15/23] gpio: sysfs: only call irq helper if needed Johan Hovold
2015-04-21 15:42 ` [PATCH 16/23] gpio: sysfs: split irq allocation and deallocation Johan Hovold
2015-04-21 15:42 ` [PATCH 17/23] gpio: sysfs: clean up edge_store Johan Hovold
2015-04-21 15:42 ` [PATCH 18/23] gpio: sysfs: clean up gpiod_export_link locking Johan Hovold
2015-04-21 15:42 ` [PATCH 19/23] gpio: sysfs: use per-gpio locking Johan Hovold
2015-04-21 15:42 ` [PATCH 20/23] gpio: sysfs: fix race between gpiod export and unexport Johan Hovold
2015-04-21 15:42 ` [PATCH 21/23] gpio: sysfs: rename active-low helper Johan Hovold
2015-04-21 15:42 ` [PATCH 22/23] gpio: sysfs: remove FLAG_SYSFS_DIR Johan Hovold
2015-04-21 15:42 ` [PATCH 23/23] gpio: sysfs: move irq trigger flags to class-device data Johan Hovold
2015-04-27 3:58 ` [PATCH 00/23] gpio: sysfs: fixes and clean ups Alexandre Courbot
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=1429630951-27082-11-git-send-email-johan@kernel.org \
--to=johan@kernel.org \
--cc=gnurou@gmail.com \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.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;
as well as URLs for NNTP newsgroup(s).