From patchwork Wed Nov 28 14:47:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 152303 Delivered-To: patch@linaro.org Received: by 2002:a2e:299d:0:0:0:0:0 with SMTP id p29-v6csp1178736ljp; Wed, 28 Nov 2018 06:48:01 -0800 (PST) X-Google-Smtp-Source: AFSGD/VU0bgBfM+oegVSjEqdkVzrVzrmytn656J/J/7IOApxX/yrNYJsF/JpBMSBSfL4oOqk/+hJ X-Received: by 2002:a63:6984:: with SMTP id e126mr34027479pgc.143.1543416481094; Wed, 28 Nov 2018 06:48:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543416481; cv=none; d=google.com; s=arc-20160816; b=eXz9JGEw8zz4bfvpUmLjC0jWCV40TvZTvMGvd6vDdZEbGtFQY6VxVy0e4NbjHKNV2t 0wFon/0tScwnLBEdp+kNWttr3OyCy9bMlM83ZFMeS9ajfwFaRVmfksvU7P+HE0ReRnh6 PLAmtAr4LUMNa9IpoS3xq1gzdPlyQSiOvs1liCSkWqh+x9vfuiPYsHn5aJONz4rbNMj4 9++iM4MuqshlYxZqPnABXVAJB8+3nU0Z65wWxTVjrWecXtmgEk3ZvhjAeZNGtNSeRIkI UNSVCdLtIEUvjzEkpbwxxspEXQcraqxnfh9f+Ri6pqJM7COr6an6PcOinlv1wmyJjG2T fBCw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=TDDGyomON/FPYi4I2pk0axstI7l2r0BwcxyPWcYBV8s=; b=rqUMWwBG6r1V9rTt60A8d05p1lbIcg6EY8Ie8bsDrJ39+tMs5HHPBLncGnkzpx4gNj rOsUu/CfxGAvDnCo/Am4FhA1MmsqdW4rk4snA8eus+CSIDlLIQ/kO4aa6o0IN66NkLgO wopB1xLFDH9u852T1POPiEyQ2LZK4kSqIuBzb5/MQx7VjnGvpJT+cVbUGPIwslz5qkQn SsnvH09ds7aApQDmjIAv6So4oI+wmblqZgAJImaE7gUNsE6KO98aQMom9KUZEyexwrI3 WEdMs1nm3XSgafyRt9qUdo98pNJRU3omNUJV8OVipJw9eSlAfmfNx7DQIKokfJfa2AGC QEHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=bkMWozUV; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p64si7857277pfa.94.2018.11.28.06.48.00; Wed, 28 Nov 2018 06:48:01 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of stable-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=@linaro.org header.s=google header.b=bkMWozUV; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728154AbeK2Bty (ORCPT + 15 others); Wed, 28 Nov 2018 20:49:54 -0500 Received: from mail-pg1-f196.google.com ([209.85.215.196]:33241 "EHLO mail-pg1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727726AbeK2Bty (ORCPT ); Wed, 28 Nov 2018 20:49:54 -0500 Received: by mail-pg1-f196.google.com with SMTP id z11so9607715pgu.0 for ; Wed, 28 Nov 2018 06:47:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=TDDGyomON/FPYi4I2pk0axstI7l2r0BwcxyPWcYBV8s=; b=bkMWozUV++Sbn/lBLcVoiMKrFE8oyfrok9ZGzZBPFj+u/IlmPtqhe2s+leFBxfnIw0 U5M8VG83/SLc7X4OYzXj+AaN4c2cce5kKRI9IhOXkbFLjbE0T2hZqq/ZWSVgUpo1wjH9 vyd7tEXCv6hCBseZs9N6s5jik5SikP2UZtzs4= 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; bh=TDDGyomON/FPYi4I2pk0axstI7l2r0BwcxyPWcYBV8s=; b=U7h/qtWvATVqUfYeAgqH1EcZqu2qFj5DAjOozcWz8BlzRKRraZAlGrnRklim04dx0m LDfulkCM2l4aBHPkv4R8vLAfODTSDYoqoPZQnObz0CYqtitBa1dSwb+5QAFb4wgaqnXU FTdHE73hKqfqrZlMKpDe8+pXmHWf/Ja9yj1ewPRpMDGbPf8xpA5xYu/6zysOGHaGLO3f 3/S8m/hkI17y0y9iXl7fJq0hygh9uXULy9QHURCD8B2vX1z9j5H1kLOSYVdCcRJVCYgM 46QPUzvXm8LczONMqtGUCIvrxg18lT8p1G+2DTEyXPKvL3iJw0kx3MxOMqOi422sPASX zaGA== X-Gm-Message-State: AA+aEWYbX80zIuVYKkkuTd/JvjOlSYc7whKEobD4E6aUjUgCRjIWt57M pETPx+Bi56P3TMFYzO+zQGikwg== X-Received: by 2002:a63:ac1a:: with SMTP id v26mr33970861pge.293.1543416479463; Wed, 28 Nov 2018 06:47:59 -0800 (PST) Received: from localhost.localdomain ([49.207.53.6]) by smtp.gmail.com with ESMTPSA id r80sm14295109pfa.111.2018.11.28.06.47.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 28 Nov 2018 06:47:58 -0800 (PST) From: Amit Pundir To: Greg KH Cc: Stable , Venkat Gopalakrishnan , Subhash Jadavani , "Martin K . Petersen" Subject: [PATCH for-3.18.y 3/5] scsi: ufshcd: Fix race between clk scaling and ungate work Date: Wed, 28 Nov 2018 20:17:45 +0530 Message-Id: <1543416467-2081-4-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1543416467-2081-1-git-send-email-amit.pundir@linaro.org> References: <1543416467-2081-1-git-send-email-amit.pundir@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Venkat Gopalakrishnan commit f2a785ac23125fa0774327d39e837e45cf28fe92 upstream. The ungate work turns on the clock before it exits hibern8, if the link was put in hibern8 during clock gating work. There occurs a race condition when clock scaling work calls ufshcd_hold() to make sure low power states cannot be entered, but that returns by checking only whether the clocks are on. This causes the clock scaling work to issue UIC commands when the link is in hibern8 causing failures. Make sure we exit hibern8 state before returning from ufshcd_hold(). Callstacks for race condition: ufshcd_scale_gear ufshcd_devfreq_scale ufshcd_devfreq_target update_devfreq devfreq_monitor process_one_work worker_thread kthread ret_from_fork ufshcd_uic_hibern8_exit ufshcd_ungate_work process_one_work worker_thread kthread ret_from_fork Signed-off-by: Venkat Gopalakrishnan Signed-off-by: Subhash Jadavani Signed-off-by: Martin K. Petersen Signed-off-by: Amit Pundir --- drivers/scsi/ufs/ufshcd.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) -- 2.7.4 diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 3ff98821bec5..7b48fb84a900 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -570,6 +570,21 @@ int ufshcd_hold(struct ufs_hba *hba, bool async) start: switch (hba->clk_gating.state) { case CLKS_ON: + /* + * Wait for the ungate work to complete if in progress. + * Though the clocks may be in ON state, the link could + * still be in hibner8 state if hibern8 is allowed + * during clock gating. + * Make sure we exit hibern8 state also in addition to + * clocks being ON. + */ + if (ufshcd_can_hibern8_during_gating(hba) && + ufshcd_is_link_hibern8(hba)) { + spin_unlock_irqrestore(hba->host->host_lock, flags); + flush_work(&hba->clk_gating.ungate_work); + spin_lock_irqsave(hba->host->host_lock, flags); + goto start; + } break; case REQ_CLKS_OFF: if (cancel_delayed_work(&hba->clk_gating.gate_work)) {