Received: by 2002:a05:6a10:17d3:0:0:0:0 with SMTP id hz19csp1992812pxb; Mon, 12 Apr 2021 11:21:27 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwTgKMueIeH45U3p7u01agif4sxsEbm54s5mtCu6LUcuzAgHVRCUeBhGJ6btkVemzb0KZ2B X-Received: by 2002:a05:6402:1764:: with SMTP id da4mr29476147edb.154.1618251687267; Mon, 12 Apr 2021 11:21:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1618251687; cv=none; d=google.com; s=arc-20160816; b=by9/P8GhYBa+4n6UTZIO+SOQHeIpOzdUltKW7dRSWLsyX0Np2h+8rra1UmWL0s3jag tmWGM3xgb+tWPeyX9qwCxAbWhiFF9ea/VE3XZXmC7Hyy1LXSEM4ZFd5ERVXXnnBo3QH3 ULTyrM3MuQ2P/VHCK6fBi4LDuoaMdPK2D7vApYEzK9TnFv7OMLaIPN+3ONg61AOsR/6p NraEBiNEg9NFqYBOkN4naqsYwuLs5r9SIbFeRan5P4UxMxQ36BOnfqiyPqTdfTNk7Hdr 3oTVIZLceZTsizopeAibG41bcvBYYQsLr3e4mpXUoW8JcrGiLIWvZJjE9YNpzOWDolyl n7Tw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=vTiwfWDOHL0R66lm8M4vbR6GCdZy+DYNlhfLSATExuk=; b=BEKYZdcAzrVpFO8yp7F7VxBHkcn0omj5MkYgvc0dc8/lhN302avtlm0LNV0iXmv5oo bTxkzJTL0vDOpH92l1R+SxYRsYPVtqFpb0ldJUEH1ku++jd+I3LHq86TSRqNRe06ZRN+ yLHT4IcwdxTOvjvCsg2sdjU3VUXhrZbDYUSd9sI5TfAKBZ9Lep+m/+lDz6cO3YMblrAw Msk7uotiO2yxPWJPSomJHqMnw29691k1vqW6zYmPrvWniaOpfYwpOOXUMrGNzlqqarx6 Wbka+fkbNGFpYf3G06pYPD7rF4lcsy44qG9H7P1XWww6xXFttDEhyIGJhW9gb5ESYwS6 tNiA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=GJzbzibe; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id u24si8530622ejb.629.2021.04.12.11.21.03; Mon, 12 Apr 2021 11:21:27 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=GJzbzibe; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236673AbhDLGvP (ORCPT + 99 others); Mon, 12 Apr 2021 02:51:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38318 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236658AbhDLGvO (ORCPT ); Mon, 12 Apr 2021 02:51:14 -0400 Received: from mail-io1-xd30.google.com (mail-io1-xd30.google.com [IPv6:2607:f8b0:4864:20::d30]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 13569C061574; Sun, 11 Apr 2021 23:50:57 -0700 (PDT) Received: by mail-io1-xd30.google.com with SMTP id a11so10272802ioo.0; Sun, 11 Apr 2021 23:50:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=vTiwfWDOHL0R66lm8M4vbR6GCdZy+DYNlhfLSATExuk=; b=GJzbzibedz+7aY9jZN6YF4quPTvBPMyZUx1znx7VsIVcfIcVRzZS/MP/kSXCKKDwx0 FThm7lqBMMXqBaDIytRbt2QCabN1XcUHOE3ObdJ/Rbk+ROh8JIOUlkDfQDeLseHoNfEu SCZOQo2ZWrQFZb7RiIYMbSHQS0Xcg8QDji8/UzZEKfFGCvIuBFwzBZFJM1DBkNl0QEco qO3g8hgm+5s0KBDYniLFGJ62I/ryN9VgBLeCEQ9V/aoNEX2dIN3P8LL6xRvaM8QolBGi MeK2KdH01VCnnSiA/YaTei4xHpydDlmFyXH7Qjzo8iNjmA843N95RpdaSzKy5NMkSVd9 LhjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=vTiwfWDOHL0R66lm8M4vbR6GCdZy+DYNlhfLSATExuk=; b=hRBsJkps5R2trehG9IU50sKenVkLA7RMeeuEcGKOrwSW/CuvbNCNmemnmoMwm4PrMx JuEw20K5AdcMVu6xpJhZaRaVQ62Vcgzn9IFO9SJ53Og0jC4To+zNqohMwrVYpA0o2Q2e ZiZfaymJVM0UAXGr1IC3goLNM1ynlwUhVpmIq88BqccVn9gvQsqp43RZVQwjeNsHKtuV WCVMzsAoYHnaSbDjsCMhUDxiQTQwfZF1BeLCFU+pYL4ntGN93Z8PhUfEantPuMAHtDlQ e/LWuy3GZXqz7e5hKi4nFp7SKU8Sf3afAF6oZNQthWpZ+csW++sDeIvWNZPlYNASsPN6 byvQ== X-Gm-Message-State: AOAM533znl/ejFdnbA51OWLceoz/qpEIE5/weHHGePEyaL2UkVkWsu4P hQbaoj5b/irEsJzY/NP0W103nbmlg5gXydjzFSE= X-Received: by 2002:a05:6638:d47:: with SMTP id d7mr26785946jak.2.1618210256515; Sun, 11 Apr 2021 23:50:56 -0700 (PDT) MIME-Version: 1.0 References: <1618202061-8243-1-git-send-email-dillon.minfei@gmail.com> In-Reply-To: From: dillon min Date: Mon, 12 Apr 2021 14:50:20 +0800 Message-ID: Subject: Re: [PATCH] serial: stm32: optimize spin lock usage To: Greg KH Cc: jirislaby@kernel.org, Maxime Coquelin , Alexandre TORGUE , linux-serial@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, Linux ARM , Linux Kernel Mailing List Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Greg=EF=BC=8C Thanks for the quick response, please ignore the last private mail. On Mon, Apr 12, 2021 at 1:52 PM Greg KH wrote: > > On Mon, Apr 12, 2021 at 12:34:21PM +0800, dillon.minfei@gmail.com wrote: > > From: dillon min > > > > To avoid potential deadlock in spin_lock usage, change to use > > spin_lock_irqsave(), spin_unlock_irqrestore() in process(thread_fn) con= text. > > spin_lock(), spin_unlock() under handler context. > > > > remove unused local_irq_save/restore call. > > > > Signed-off-by: dillon min > > --- > > Was verified on stm32f469-disco board. need more test on stm32mp platfo= rm. > > > > drivers/tty/serial/stm32-usart.c | 27 +++++++++++++++++---------- > > 1 file changed, 17 insertions(+), 10 deletions(-) > > > > diff --git a/drivers/tty/serial/stm32-usart.c b/drivers/tty/serial/stm3= 2-usart.c > > index b3675cf25a69..c4c859b34367 100644 > > --- a/drivers/tty/serial/stm32-usart.c > > +++ b/drivers/tty/serial/stm32-usart.c > > @@ -214,7 +214,7 @@ static void stm32_usart_receive_chars(struct uart_p= ort *port, bool threaded) > > struct tty_port *tport =3D &port->state->port; > > struct stm32_port *stm32_port =3D to_stm32_port(port); > > const struct stm32_usart_offsets *ofs =3D &stm32_port->info->ofs; > > - unsigned long c; > > + unsigned long c, flags; > > u32 sr; > > char flag; > > > > @@ -276,9 +276,17 @@ static void stm32_usart_receive_chars(struct uart_= port *port, bool threaded) > > uart_insert_char(port, sr, USART_SR_ORE, c, flag); > > } > > > > - spin_unlock(&port->lock); > > + if (threaded) > > + spin_unlock_irqrestore(&port->lock, flags); > > + else > > + spin_unlock(&port->lock); > > You shouldn't have to check for this, see the other patches on the list > recently that fixed this up to not be an issue for irq handlers. Can you help to give more hints, or the commit id of the patch which fixed this. thanks. I'm still confused with this. The stm32_usart_threaded_interrupt() is a kthread context, once port->lock holds by this function, another serial interrupts raised, such as USART_SR_TXE,stm32_usart_interrupt() can't get the lock, there will be a deadlock. isn't it? So, shouldn't I use spin_lock{_irqsave} according to the caller's context = ? There is a bug in this patch, the variable flags should be a global variabl= e. Thanks. Dillon, > > thanks, > > greg k-h