From patchwork Tue Jun 21 12:12:54 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Gmeiner X-Patchwork-Id: 9190413 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 4D53E601C0 for ; Tue, 21 Jun 2016 12:13:06 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3DEAB27FA4 for ; Tue, 21 Jun 2016 12:13:06 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 30DDE28156; Tue, 21 Jun 2016 12:13:06 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E5AC827FA4 for ; Tue, 21 Jun 2016 12:13:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751123AbcFUMNE (ORCPT ); Tue, 21 Jun 2016 08:13:04 -0400 Received: from mail-lb0-f195.google.com ([209.85.217.195]:35701 "EHLO mail-lb0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751088AbcFUMNC (ORCPT ); Tue, 21 Jun 2016 08:13:02 -0400 Received: by mail-lb0-f195.google.com with SMTP id td3so1651172lbb.2; Tue, 21 Jun 2016 05:13:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=134tcuZXteIsCvcm1PMWSM/kU9QmuIk8AsGzYhH6FiI=; b=b2U0hZHKwYzYkGmSS+85F4SWd93SvKrIVnzNIG2kVByf2TTZGBg8txWJCJTIWRwku4 eqHyk9ruo6LddxtwvYoj/TgFcGf4tk0ktM+LWDcweBvoa4PRNSSBceTufmrR3UP0aNPb P1trb9MqxlKvclMs8IOBIVdWlNnxMxunY8gP5uKSz074ZpS6ddILElZmYaeOOmBHeOzu dc5zKwFH8S6/1aOn2uLQizeYtrJWJt6LSoq5C9RjgRc9QkB1NHDi9Ypp35qx0LEZxxhQ j5hjcO7Rf9Q0XBxXjs0M1hHn89Wbq9c64nyIbBtZ6mTkosOOpKcAkfp39OqetKz8w2QC wE6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=134tcuZXteIsCvcm1PMWSM/kU9QmuIk8AsGzYhH6FiI=; b=CWQHRf+Xcxf7FvHPXHxvU4vdjvUf2n8w9B7tu7u1IySM2fxlgQmy4dwaaciOc5262X dxcbCVGko5zcc9XiM1BslTHjR5n/JX29gqiZcGhMa/vrqiNIV4yjwHKuvp+bho+totKB b1dFxGuKDeuGoEmBtesgl2jAfpb/RhqP9VtlM/sXh9BAE/swt8OFJ4Ucrkw0UUfgNYIA nEog63HkWHbPxybrT04DH0JRQlp740YGB5hBjuLeY5sSU8JO46Yb0Rhg6Y1qrNTCzplj PxZfIwyOl7E0tesbClsBEw633DyccZHWRUMG0XurTLf57SVNIfGR+or7t54T3UNhVFMt 3LVg== X-Gm-Message-State: ALyK8tKq2OaHSrWudB9goabwGI52aHhqNDnO7Mq1oR32YfpIEzLqjw864tqBv6nB5BraRg== X-Received: by 10.194.133.9 with SMTP id oy9mr21362116wjb.41.1466511179677; Tue, 21 Jun 2016 05:12:59 -0700 (PDT) Received: from chgm-pc.bachmann.at ([185.67.228.2]) by smtp.gmail.com with ESMTPSA id f189sm2716952wmf.19.2016.06.21.05.12.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Jun 2016 05:12:58 -0700 (PDT) From: Christian Gmeiner To: linux-spi@vger.kernel.org Cc: broonie@kernel.org, linux-kernel@vger.kernel.org, Christian Gmeiner Subject: [PATCH] spi: imx: wait_for_completion_timeout(..) for PIO transfers Date: Tue, 21 Jun 2016 14:12:54 +0200 Message-Id: <1466511174-17048-1-git-send-email-christian.gmeiner@gmail.com> X-Mailer: git-send-email 2.5.5 Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP In some rare cases I see the following 'task blocked' information. It looks like the PIO transfer has some problems and never succeeds. Make use of wait_for_completion_timeout(..) to detect this case and return -ETIMEDOUT. [ 240.246067] INFO: task hexdump:1660 blocked for more than 120 seconds. [ 240.246089] Not tainted 4.1.17 0000001 [ 240.246099] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. [ 240.246109] hexdump D c0575548 0 1660 1 0x00000000 [ 240.246132] Backtrace: [ 240.246166] [] (__schedule) from [] (schedule+0x40/0xa4) [ 240.246176] r10:00000000 r9:c07f1300 r8:c07b8408 r7:c0576518 r6:7fffffff r5:7fffffff [ 240.246210] r4:ee972e7c [ 240.246233] [] (schedule) from [] (schedule_timeout+0x174/0x274) [ 240.246254] [] (schedule_timeout) from [] (wait_for_common+0xc0/0x164) [ 240.246263] r10:00000000 r9:c07f1300 r8:00000002 r7:00000000 r6:7fffffff r5:ee972e78 [ 240.246294] r4:ee972e7c [ 240.246314] [] (wait_for_common) from [] (wait_for_completion+0x20/0x24) [ 240.246324] r10:ee972e50 r8:00000001 r7:c3976200 r6:ee972c00 r5:ee972e50 r4:c2c87d28 [ 240.246367] [] (wait_for_completion) from [] (spi_imx_transfer+0xe8/0x3cc) [ 240.246393] [] (spi_imx_transfer) from [] (spi_bitbang_transfer_one+0xb4/0x250) [ 240.246403] r10:ee972e50 r8:00000001 r7:00000000 r6:c2c87da0 r5:00000000 r4:c2c87d28 [ 240.246443] [] (spi_bitbang_transfer_one) from [] (__spi_pump_messages+0x36c/0x6b4) [ 240.246452] r10:ee9e5010 r9:00000001 r8:ee9e5010 r7:00000000 r6:c2c87da0 r5:c2c87d6c [ 240.246483] r4:ee972c00 [ 240.246503] [] (__spi_pump_messages) from [] (__spi_sync+0x138/0x1e4) [ 240.246512] r10:00000000 r9:00000000 r8:c03f25a8 r7:00000000 r6:ee972c00 r5:c3976200 [ 240.246542] r4:c2c87da0 [ 240.246562] [] (__spi_sync) from [] (spi_sync+0x1c/0x20) [ 240.246571] r10:00040000 r9:00000000 r8:c3976200 r7:00000000 r6:ee973300 r5:c2c87da0 [ 240.246602] r4:ee973014 [ 240.246623] [] (spi_sync) from [] (m25p80_read+0xf8/0x124) [ 240.246641] [] (m25p80_read) from [] (spi_nor_read+0x64/0x80) [ 240.246651] r10:00004000 r8:00004000 r7:00000000 r6:00040000 r5:00000000 r4:ee973014 [ 240.246698] [] (spi_nor_read) from [] (mtd_read+0x98/0xcc) [ 240.246708] r7:c2c87ea0 r6:ee973098 r5:00000000 r4:001c0000 [ 240.246740] [] (mtd_read) from [] (mtdchar_read+0xcc/0x204) [ 240.246750] r9:ed424000 r8:00000000 r7:b495d018 r6:c2c87f78 r5:00000000 r4:00040000 [ 240.246793] [] (mtdchar_read) from [] (__vfs_read+0x3c/0xe0) [ 240.246803] r10:00004000 r9:00000000 r8:c2c87f78 r7:b495d018 r6:c2c87f78 r5:c05c8104 [ 240.246833] r4:c32fe600 [ 240.246852] [] (__vfs_read) from [] (vfs_read+0x98/0x154) [ 240.246861] r10:00000000 r8:00040000 r7:00004000 r6:c2c87f78 r5:b495d018 r4:c32fe600 [ 240.246899] [] (vfs_read) from [] (SyS_read+0x50/0x90) [ 240.246908] r10:00000000 r8:00040000 r7:b495d018 r6:00004000 r5:c32fe601 r4:c32fe600 [ 240.246953] [] (SyS_read) from [] (ret_fast_syscall+0x0/0x3c) [ 240.246962] r9:c2c86000 r8:c000fc04 r7:00000003 r6:00004000 r5:00000000 r4:b495d018 Signed-off-by: Christian Gmeiner --- drivers/spi/spi-imx.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c index 50769078..d2b96b1 100644 --- a/drivers/spi/spi-imx.c +++ b/drivers/spi/spi-imx.c @@ -1050,6 +1050,8 @@ static int spi_imx_pio_transfer(struct spi_device *spi, struct spi_transfer *transfer) { struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master); + unsigned long transfer_timeout; + unsigned long timeout; spi_imx->tx_buf = transfer->tx_buf; spi_imx->rx_buf = transfer->rx_buf; @@ -1062,7 +1064,15 @@ static int spi_imx_pio_transfer(struct spi_device *spi, spi_imx->devtype_data->intctrl(spi_imx, MXC_INT_TE); - wait_for_completion(&spi_imx->xfer_done); + transfer_timeout = spi_imx_calculate_timeout(spi_imx, transfer->len); + + timeout = wait_for_completion_timeout(&spi_imx->xfer_done, + transfer_timeout); + if (!timeout) { + dev_err(&spi->dev, "I/O Error in PIO\n"); + spi_imx->devtype_data->reset(spi_imx); + return -ETIMEDOUT; + } return transfer->len; }