lkml.org 
[lkml]   [2019]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.4 16/35] PCI: sysfs: Ignore lockdep for remove attribute
    Date
    From: Marek Vasut <marek.vasut+renesas@gmail.com>

    [ Upstream commit dc6b698a86fe40a50525433eb8e92a267847f6f9 ]

    With CONFIG_PROVE_LOCKING=y, using sysfs to remove a bridge with a device
    below it causes a lockdep warning, e.g.,

    # echo 1 > /sys/class/pci_bus/0000:00/device/0000:00:00.0/remove
    ============================================
    WARNING: possible recursive locking detected
    ...
    pci_bus 0000:01: busn_res: [bus 01] is released

    The remove recursively removes the subtree below the bridge. Each call
    uses a different lock so there's no deadlock, but the locks were all
    created with the same lockdep key so the lockdep checker can't tell them
    apart.

    Mark the "remove" sysfs attribute with __ATTR_IGNORE_LOCKDEP() as it is
    safe to ignore the lockdep check between different "remove" kernfs
    instances.

    There's discussion about a similar issue in USB at [1], which resulted in
    356c05d58af0 ("sysfs: get rid of some lockdep false positives") and
    e9b526fe7048 ("i2c: suppress lockdep warning on delete_device"), which do
    basically the same thing for USB "remove" and i2c "delete_device" files.

    [1] https://lore.kernel.org/r/Pine.LNX.4.44L0.1204251436140.1206-100000@iolanthe.rowland.org
    Link: https://lore.kernel.org/r/20190526225151.3865-1-marek.vasut@gmail.com
    Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
    [bhelgaas: trim commit log, details at above links]
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Cc: Geert Uytterhoeven <geert+renesas@glider.be>
    Cc: Phil Edworthy <phil.edworthy@renesas.com>
    Cc: Simon Horman <horms+renesas@verge.net.au>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Wolfram Sang <wsa@the-dreams.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/pci/pci-sysfs.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
    index 5fb4ed6ea322..6ac6618c1c10 100644
    --- a/drivers/pci/pci-sysfs.c
    +++ b/drivers/pci/pci-sysfs.c
    @@ -371,7 +371,7 @@ static ssize_t remove_store(struct device *dev, struct device_attribute *attr,
    pci_stop_and_remove_bus_device_locked(to_pci_dev(dev));
    return count;
    }
    -static struct device_attribute dev_remove_attr = __ATTR(remove,
    +static struct device_attribute dev_remove_attr = __ATTR_IGNORE_LOCKDEP(remove,
    (S_IWUSR|S_IWGRP),
    NULL, remove_store);

    --
    2.20.1
    \
     
     \ /
      Last update: 2019-07-19 06:15    [W:4.115 / U:0.308 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site