Re: patch "tty: serial: imx: fix potential deadlock" added to tty-linus

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Great, thanks.

Cheers,
Sam


On Thu, Nov 12, 2020 at 9:32 PM <gregkh@xxxxxxxxxxxxxxxxxxx> wrote:
>
>
> This is a note to let you know that I've just added the patch titled
>
>     tty: serial: imx: fix potential deadlock
>
> to my tty git tree which can be found at
>     git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git
> in the tty-linus branch.
>
> The patch will show up in the next release of the linux-next tree
> (usually sometime within the next 24 hours during the week.)
>
> The patch will hopefully also be merged in Linus's tree for the
> next -rc kernel release.
>
> If you have any questions about this process, please let me know.
>
>
> From 33f16855dcb973f745c51882d0e286601ff3be2b Mon Sep 17 00:00:00 2001
> From: Sam Nobs <samuel.nobs@xxxxxxxxxxxxx>
> Date: Tue, 10 Nov 2020 09:50:06 +1300
> Subject: tty: serial: imx: fix potential deadlock
> MIME-Version: 1.0
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 8bit
>
> Enabling the lock dependency validator has revealed
> that the way spinlocks are used in the IMX serial
> port could result in a deadlock.
>
> Specifically, imx_uart_int() acquires a spinlock
> without disabling the interrupts, meaning that another
> interrupt could come along and try to acquire the same
> spinlock, potentially causing the two to wait for each
> other indefinitely.
>
> Use spin_lock_irqsave() instead to disable interrupts
> upon acquisition of the spinlock.
>
> Fixes: c974991d2620 ("tty:serial:imx: use spin_lock instead of spin_lock_irqsave in isr")
> Reviewed-by: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx>
> Signed-off-by: Sam Nobs <samuel.nobs@xxxxxxxxxxxxx>
> Link: https://lore.kernel.org/r/1604955006-9363-1-git-send-email-samuel.nobs@xxxxxxxxxxxxx
> Cc: stable <stable@xxxxxxxxxxxxxxx>
> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
> ---
>  drivers/tty/serial/imx.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
> index 1731d9728865..3c53a3c89959 100644
> --- a/drivers/tty/serial/imx.c
> +++ b/drivers/tty/serial/imx.c
> @@ -942,8 +942,14 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id)
>         struct imx_port *sport = dev_id;
>         unsigned int usr1, usr2, ucr1, ucr2, ucr3, ucr4;
>         irqreturn_t ret = IRQ_NONE;
> +       unsigned long flags = 0;
>
> -       spin_lock(&sport->port.lock);
> +       /*
> +        * IRQs might not be disabled upon entering this interrupt handler,
> +        * e.g. when interrupt handlers are forced to be threaded. To support
> +        * this scenario as well, disable IRQs when acquiring the spinlock.
> +        */
> +       spin_lock_irqsave(&sport->port.lock, flags);
>
>         usr1 = imx_uart_readl(sport, USR1);
>         usr2 = imx_uart_readl(sport, USR2);
> @@ -1013,7 +1019,7 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id)
>                 ret = IRQ_HANDLED;
>         }
>
> -       spin_unlock(&sport->port.lock);
> +       spin_unlock_irqrestore(&sport->port.lock, flags);
>
>         return ret;
>  }
> --
> 2.29.2
>
>


-- 
Samuel Nobs
Senior Design Engineer
Tait Communications
DDI: +64 7 825 7538
Email: samuel.nobs@xxxxxxxxxxxxx

www.taitradio.com

-- 
This Communication is Confidential. We only send and receive email on the
basis of the terms set out at www.taitradio.com/email_disclaimer 
<http://www.taitradio.com/email_disclaimer>




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux