• Isaac True's avatar
    serial: sc16is7xx: setup GPIO controller later in probe · c8f71b49
    Isaac True authored
    
    
    The GPIO controller component of the sc16is7xx driver is setup too
    early, which can result in a race condition where another device tries
    to utilise the GPIO lines before the sc16is7xx device has finished
    initialising.
    
    This issue manifests itself as an Oops when the GPIO lines are configured:
    
        Unable to handle kernel read from unreadable memory at virtual address
        ...
        pc : sc16is7xx_gpio_direction_output+0x68/0x108 [sc16is7xx]
        lr : sc16is7xx_gpio_direction_output+0x4c/0x108 [sc16is7xx]
        ...
        Call trace:
        sc16is7xx_gpio_direction_output+0x68/0x108 [sc16is7xx]
        gpiod_direction_output_raw_commit+0x64/0x318
        gpiod_direction_output+0xb0/0x170
        create_gpio_led+0xec/0x198
        gpio_led_probe+0x16c/0x4f0
        platform_drv_probe+0x5c/0xb0
        really_probe+0xe8/0x448
        driver_probe_device+0xe8/0x138
        __device_attach_driver+0x94/0x118
        bus_for_each_drv+0x8c/0xe0
        __device_attach+0x100/0x1b8
        device_initial_probe+0x28/0x38
        bus_probe_device+0xa4/0xb0
        deferred_probe_work_func+0x90/0xe0
        process_one_work+0x1c4/0x480
        worker_thread+0x54/0x430
        kthread+0x138/0x150
        ret_from_fork+0x10/0x1c
    
    This patch moves the setup of the GPIO controller functions to later in the
    probe function, ensuring the sc16is7xx device has already finished
    initialising by the time other devices try to make use of the GPIO lines.
    The error handling has also been reordered to reflect the new
    initialisation order.
    Co-developed-by: default avatarWen-chien Jesse Sung <jesse.sung@canonical.com>
    Signed-off-by: default avatarWen-chien Jesse Sung <jesse.sung@canonical.com>
    Signed-off-by: default avatarIsaac True <isaac.true@canonical.com>
    Link: https://lore.kernel.org/r/20221130105529.698385-1-isaac.true@canonical.com
    
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    c8f71b49
sc16is7xx.c 50.1 KB