gpio: sysfs: extend the critical section for unregistering sysfs devices
BugLink: https://bugs.launchpad.net/bugs/2084005 [ Upstream commit 59cba4a0e6ca1058fbf88fec22530a4e2841802a ] Checking the gdev->mockdev pointer for NULL must be part of the critical section. Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Acked-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Sasha Levin <sashal@kernel.org> Signed-off-by: Koichiro Den <koichiro.den@canonical.com> Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
This commit is contained in:
committed by
Mehmet Basaran
parent
f307a1735b
commit
d2d1819e29
@@ -1,6 +1,7 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/cleanup.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/idr.h>
|
||||
#include <linux/init.h>
|
||||
@@ -773,15 +774,15 @@ void gpiochip_sysfs_unregister(struct gpio_device *gdev)
|
||||
struct gpio_desc *desc;
|
||||
struct gpio_chip *chip = gdev->chip;
|
||||
|
||||
if (!gdev->mockdev)
|
||||
return;
|
||||
scoped_guard(mutex, &sysfs_lock) {
|
||||
if (!gdev->mockdev)
|
||||
return;
|
||||
|
||||
device_unregister(gdev->mockdev);
|
||||
device_unregister(gdev->mockdev);
|
||||
|
||||
/* prevent further gpiod exports */
|
||||
mutex_lock(&sysfs_lock);
|
||||
gdev->mockdev = NULL;
|
||||
mutex_unlock(&sysfs_lock);
|
||||
/* prevent further gpiod exports */
|
||||
gdev->mockdev = NULL;
|
||||
}
|
||||
|
||||
/* unregister gpiod class devices owned by sysfs */
|
||||
for_each_gpio_desc_with_flag(chip, desc, FLAG_SYSFS) {
|
||||
|
||||
Reference in New Issue
Block a user