• Bartosz Golaszewski's avatar
    gpio: protect the list of GPIO devices with SRCU · e348544f
    Bartosz Golaszewski authored
    We're working towards removing the "multi-function" GPIO spinlock that's
    implemented terribly wrong. We tried using an RW-semaphore to protect
    the list of GPIO devices but it turned out that we still have old code
    using legacy GPIO calls that need to translate the global GPIO number to
    the address of the associated descriptor and - to that end - traverse
    the list while holding the lock. If we change the spinlock to a sleeping
    lock then we'll end up with "scheduling while atomic" bugs.
    
    Let's allow lockless traversal of the list using SRCU and only use the
    mutex when modyfing the list.
    
    While at it: let's protect the period between when we start the lookup
    and when we finally request the descriptor (increasing the reference
    count of the GPIO device) with the SRCU read lock.
    Signed-off-by: default avatarBartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Acked-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
    e348544f
gpiolib.c 130 KB