Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp20997606ybl; Sun, 5 Jan 2020 17:06:34 -0800 (PST) X-Google-Smtp-Source: APXvYqyKUMVa0dHAAn1KTR0Teajk7Kk/BX2ZqfJPKjrkZksN9D6OrjYFDrSjjtk8dhOCDnrpdzKk X-Received: by 2002:a05:6830:4a4:: with SMTP id l4mr113810885otd.91.1578272794803; Sun, 05 Jan 2020 17:06:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1578272794; cv=none; d=google.com; s=arc-20160816; b=NZUJ2P3UhleTJldEe0p4XWQaCoeblDez1NBslT5BLvtsV39mXSy7p+wr7gkEVRJm10 o6Rn5Mvr65aefgOaiMgEihD8ZsptSocx/BsetBaSdVXbpxrM8w/CKdjWQhojgq3NSogv KgOZ2Nbpg/vc1FSaEDkCsbO0sYVqmW0nyjv7oD3piSDNYIZ/m+U+LBMM1hbVTqDwmYxp Jt/kycISurCsEObCT9zKcbDTlMc818YDkty3sVL6nERNhIz4q9UmSQiv0DB5fJbnMfGs YF4ER3HXbfObP1V1KuTLRp31Of0cmMyEn/F9eOVDd7tZX0AyBP1dl0YP5WBx4eqcVY9D kqXg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=UQFgmvNzzMNkQGJ6E3WQRfYtR4IleSz/24HtNaKqzaA=; b=FyiCLEcrXGe9vd2JVjwpqFP9Mjvo8+nHC6eMJsl5YQjKF0TkOWv4Q5juVG4qXkc/zH tGnuGSHxIBEeOTa31MZ0G40KfHxzsTisQEeQRZN/vxhjauUOVw3ZOdwUI9A9WY3FeZ1C O9xTFqip+V1rfhsxBch2GOnSw0pZpTMc5/LNWFVzPACfticMrEtcvMxPZXbabK8kWziM 9BW1q1NvuDTUYvDlj6w/US3mvjYY6YtR/Ljuz/FzgjlAck7u2It7i8IMR7ajifUuMAjX clPzy0pu/Ell/SPg7CzbNyBZ7LrLFn19J+4rYCQJiEK4qC3SAKZkcw6gcLXfTn6ZVC/5 IdWw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=qaVEUiIi; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 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. [209.132.180.67]) by mx.google.com with ESMTP id b145si27534068oii.67.2020.01.05.17.06.07; Sun, 05 Jan 2020 17:06:34 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=qaVEUiIi; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 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 S1727399AbgAFBFA (ORCPT + 99 others); Sun, 5 Jan 2020 20:05:00 -0500 Received: from mail-lj1-f196.google.com ([209.85.208.196]:36427 "EHLO mail-lj1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727340AbgAFBEq (ORCPT ); Sun, 5 Jan 2020 20:04:46 -0500 Received: by mail-lj1-f196.google.com with SMTP id r19so49270642ljg.3; Sun, 05 Jan 2020 17:04:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=UQFgmvNzzMNkQGJ6E3WQRfYtR4IleSz/24HtNaKqzaA=; b=qaVEUiIi+bUfSZo5f5O17+9PBG1k9KPpT3pyWQPJ+uVPGornWnWDU+jhE6QRisZZZ8 Tj10Ajeo5Ja0branooSpUBnwYO7eusz0C+JLvkeMUgYbs2hj3Kpu5BLDpAJ9YFcfWTw7 zSsO7oLRDy5gy8BYhWg1I1Ur883iOWYh4EfA3UTPQUxn2LW0/tWyb8yWOVEgFfFgeMga cHx+Na4OQV0afyxvVp8fxTcmHgdMMMsDRCSqAOjmVxwjVFv86q3ybnPOvdbznbxHvKjX ginCjPZ6R8aMpkb78P7OLKhJZa10aSsoWttTcq7iGss/dSzZt4WzH9h29C/BXzRdg5yr DD+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UQFgmvNzzMNkQGJ6E3WQRfYtR4IleSz/24HtNaKqzaA=; b=gcVb45yyFd3DCDQB1YFyyQe+81H39D9xiH+IuatSt8FEQzeDGLxgHDAeGUjvm0K1mE K5BpL5av6JG7KjewC8zo3h8uHUcbtW2EHs/aCM2jizNQNnf+UNDXEg0NChXBldfPyLbc MaMSU5r0+eQVdMOvlgVByfOQK0uI/sDeJKRTXrGAV9E15ksDhijUo2GnZVzicsZxQ0qw MfYcdoCQOX5hOhvHnlZW8suhTJdx/Jk/WziPT4x+BIjr2ak26wS/lj3y/mDkp2Etdrif J7a/nPJ8k741o63hf9phrhaIqoZuXGaJIvp4amh95Axo24FsysWz3+Kr1lkBswFR9lJD a+JQ== X-Gm-Message-State: APjAAAVoWhzR9t62TFK/iq9t5Nfw0WuKtc+3DFb8dCZw11sHiYN6I/Qf q80QtSz4vVRxTzzxD5hrkrg= X-Received: by 2002:a2e:b177:: with SMTP id a23mr54620658ljm.202.1578272683782; Sun, 05 Jan 2020 17:04:43 -0800 (PST) Received: from localhost.localdomain (79-139-233-37.dynamic.spd-mgts.ru. [79.139.233.37]) by smtp.gmail.com with ESMTPSA id a19sm28245910ljb.103.2020.01.05.17.04.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Jan 2020 17:04:43 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Laxman Dewangan , Mikko Perttunen , Wolfram Sang Cc: linux-i2c@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 9/9] i2c: tegra: Check DMA completion status in addition to left time Date: Mon, 6 Jan 2020 04:04:23 +0300 Message-Id: <20200106010423.5890-10-digetx@gmail.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20200106010423.5890-1-digetx@gmail.com> References: <20200106010423.5890-1-digetx@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org It is more robust to check completion status in addition to the left time in a case of DMA transfer because transfer's completion happens in two phases [one is ISR, other is tasklet] and thus it is possible that DMA is completed while I2C completion awaiting times out because of the deferred notification done by the DMA driver. The DMA completion status becomes 100% actual after DMA synchronization. This fixes spurious DMA timeouts when system is under load. Signed-off-by: Dmitry Osipenko --- drivers/i2c/busses/i2c-tegra.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index 3c7c86d4b0e4..cbc2ad49043e 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -1224,7 +1224,7 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev, i2c_dev->rx_dma_chan : i2c_dev->tx_dma_chan); - if (time_left == 0) { + if (!time_left && !completion_done(&i2c_dev->dma_complete)) { dev_err(i2c_dev->dev, "DMA transfer timeout\n"); tegra_i2c_init(i2c_dev, true); return -ETIMEDOUT; -- 2.24.0