From mboxrd@z Thu Jan 1 00:00:00 1970 From: Huang Shijie Subject: Re: [PATCH 3/5] serial: imx: avoid spinlock recursion deadlock Date: Mon, 12 May 2014 11:12:15 +0800 Message-ID: <53703C0F.20504@freescale.com> References: <1399648788-26061-1-git-send-email-dean_jenkins@mentor.com> <1399648788-26061-4-git-send-email-dean_jenkins@mentor.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1399648788-26061-4-git-send-email-dean_jenkins@mentor.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: dean_jenkins@mentor.com Cc: dirk.behme@de.bosch.com, gregkh@linuxfoundation.org, s.hauer@pengutronix.de, linux-arm-kernel@lists.infradead.org, linux-serial@vger.kernel.org, shawn.guo@freescale.com List-Id: linux-serial@vger.kernel.org 5LqOIDIwMTTlubQwNeaciDA55pelIDIzOjE5LCBkZWFuX2plbmtpbnNAbWVudG9yLmNvbSDlhpnp gZM6Cj4gRnJvbTogQW5keSBMb3dlPGFuZHlfbG93ZUBtZW50b3IuY29tPgo+Cj4gVGhlIGZvbGxv d2luZyBkZWFkbG9jayBoYXMgYmVlbiBvYnNlcnZlZDoKPgo+IGlteF9pbnQoKSB7Cj4gICAgaW14 X3R4aW50KCkgewo+ICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnNwb3J0LT5wb3J0LmxvY2ssZmxh Z3MpOwo+ICAgICAgLyogXl5edWFydF9wb3J0IHNwaW5sb2NrIHRha2VuIGluIGlteF90eGludCAq Lwo+ICAgICAgaW14X3RyYW5zbWl0X2J1ZmZlcigpIHsKPiAgICAgICAgdWFydF93cml0ZV93YWtl dXAoJnNwb3J0LT5wb3J0KSB7Cj4gICAgICAgICAgdHR5X3dha2V1cCgpIHsKPiAgICAgICAgICAg IGhjaV91YXJ0X3R0eV93YWtldXAoKSB7Cj4gICAgICAgICAgICAgIGhjaV91YXJ0X3R4X3dha2V1 cCgpIHsKPiAgICAgICAgICAgICAgICB1YXJ0X3dyaXRlKCkgewo+ICAgICAgICAgICAgICAgICAg c3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKPiAgICAgICAgICAgICAgICAg IC8qIF5eXmRlYWRsb2NrIGhlcmUgd2hlbiBzcGlubG9jayBpcyB0YWtlbiBhZ2FpbiAqLwo+ICAg ICAgICAgICAgICAgICAgICAuCj4gICAgICAgICAgICAgICAgICAgIC4KPiAgICAgICAgICAgICAg ICAgICAgLgo+ICAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+ bG9jaywgZmxhZ3MpOwo+ICAgICAgICAgICAgICAgIH0KPiAgICAgICAgICAgICAgfQo+ICAgICAg ICAgICAgfQo+ICAgICAgICAgIH0KPiAgICAgICAgfQo+ICAgICAgfQo+ICAgICAgc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmc3BvcnQtPnBvcnQubG9jayxmbGFncyk7Cj4gICAgfQo+IH0KPgo+IFRv IGNvcnJlY3QgdGhpcyBjYWxsIHVhcnRfd3JpdGVfd2FrZXVwKCkgYXQgdGhlIGVuZCBvZiBpbXhf dHhpbnQoKSBhZnRlcgo+IHRoZSB1YXJ0X3BvcnQgc3BpbmxvY2sgaXMgdW5sb2NrZWQuCj4KPiBT aWduZWQtb2ZmLWJ5OiBBbmR5IExvd2U8YW5keV9sb3dlQG1lbnRvci5jb20+Cj4gU2lnbmVkLW9m Zi1ieTogRGlyayBCZWhtZTxkaXJrLmJlaG1lQGRlLmJvc2NoLmNvbT4KPiAtLS0KPiAgIGRyaXZl cnMvdHR5L3NlcmlhbC9pbXguYyB8ICAgIDcgKysrKysrLQo+ICAgMSBmaWxlIGNoYW5nZWQsIDYg aW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5 L3NlcmlhbC9pbXguYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9pbXguYwo+IGluZGV4IGFiZTMxYWQu LmNjNzk3MDYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL2lteC5jCj4gKysrIGIv ZHJpdmVycy90dHkvc2VyaWFsL2lteC5jCj4gQEAgLTYzNiw4ICs2MzYsMTMgQEAgc3RhdGljIGly cXJldHVybl90IGlteF90eGludChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCj4KPiAgIAlpbXhfdHJh bnNtaXRfYnVmZmVyKHNwb3J0KTsKPgo+IC0JaWYgKHVhcnRfY2lyY19jaGFyc19wZW5kaW5nKHht aXQpPCAgV0FLRVVQX0NIQVJTKQo+ICsJaWYgKHVhcnRfY2lyY19jaGFyc19wZW5kaW5nKHhtaXQp PCAgV0FLRVVQX0NIQVJTKSB7Cj4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3BvcnQtPnBv cnQubG9jaywgZmxhZ3MpOwo+ICAgCQl1YXJ0X3dyaXRlX3dha2V1cCgmc3BvcnQtPnBvcnQpOwo+ ICsJfSBlbHNlCj4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3BvcnQtPnBvcnQubG9jaywg ZmxhZ3MpOwo+ICsKPiArCXJldHVybiBJUlFfSEFORExFRDsKPgo+ICAgb3V0Ogo+ICAgCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJnNwb3J0LT5wb3J0LmxvY2ssIGZsYWdzKTsKSSB0aGluayB0aGlz IHBhdGNoIDoKCmh0dHBzOi8vbGttbC5vcmcvbGttbC8yMDE0LzMvMjAvNjIzCgpoYXMgZml4ZWQg dGhpcyBkZWFkbG9jay4KCldlIGNhbiBpZ25vcmUgdGhpcyBwYXRjaCBub3cuCgp0aGFua3MKSHVh bmcgU2hpamllCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmlu ZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1hcm0ta2VybmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: b32955@freescale.com (Huang Shijie) Date: Mon, 12 May 2014 11:12:15 +0800 Subject: [PATCH 3/5] serial: imx: avoid spinlock recursion deadlock In-Reply-To: <1399648788-26061-4-git-send-email-dean_jenkins@mentor.com> References: <1399648788-26061-1-git-send-email-dean_jenkins@mentor.com> <1399648788-26061-4-git-send-email-dean_jenkins@mentor.com> Message-ID: <53703C0F.20504@freescale.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org ? 2014?05?09? 23:19, dean_jenkins at mentor.com ??: > From: Andy Lowe > > The following deadlock has been observed: > > imx_int() { > imx_txint() { > spin_lock_irqsave(&sport->port.lock,flags); > /* ^^^uart_port spinlock taken in imx_txint */ > imx_transmit_buffer() { > uart_write_wakeup(&sport->port) { > tty_wakeup() { > hci_uart_tty_wakeup() { > hci_uart_tx_wakeup() { > uart_write() { > spin_lock_irqsave(&port->lock, flags); > /* ^^^deadlock here when spinlock is taken again */ > . > . > . > spin_unlock_irqrestore(&port->lock, flags); > } > } > } > } > } > } > spin_unlock_irqrestore(&sport->port.lock,flags); > } > } > > To correct this call uart_write_wakeup() at the end of imx_txint() after > the uart_port spinlock is unlocked. > > Signed-off-by: Andy Lowe > Signed-off-by: Dirk Behme > --- > drivers/tty/serial/imx.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c > index abe31ad..cc79706 100644 > --- a/drivers/tty/serial/imx.c > +++ b/drivers/tty/serial/imx.c > @@ -636,8 +636,13 @@ static irqreturn_t imx_txint(int irq, void *dev_id) > > imx_transmit_buffer(sport); > > - if (uart_circ_chars_pending(xmit)< WAKEUP_CHARS) > + if (uart_circ_chars_pending(xmit)< WAKEUP_CHARS) { > + spin_unlock_irqrestore(&sport->port.lock, flags); > uart_write_wakeup(&sport->port); > + } else > + spin_unlock_irqrestore(&sport->port.lock, flags); > + > + return IRQ_HANDLED; > > out: > spin_unlock_irqrestore(&sport->port.lock, flags); I think this patch : https://lkml.org/lkml/2014/3/20/623 has fixed this deadlock. We can ignore this patch now. thanks Huang Shijie