From patchwork Wed Nov 28 17:29:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 152333 Delivered-To: patch@linaro.org Received: by 2002:a2e:299d:0:0:0:0:0 with SMTP id p29-v6csp1365284ljp; Wed, 28 Nov 2018 09:29:43 -0800 (PST) X-Google-Smtp-Source: AFSGD/UPEML6HbWpqtBB/biBbSEF/mr9ZLDdZN6SbMmVWb353qZHKL+35p5Vn5k1u0OKcZVULSmR X-Received: by 2002:a17:902:24a2:: with SMTP id w31mr29891891pla.216.1543426182897; Wed, 28 Nov 2018 09:29:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543426182; cv=none; d=google.com; s=arc-20160816; b=f0kQZ1IALMJ0828Ne1Ayh1Fh/KHwL9YHmuIvsZNUcblMkZ5k6pXIp843e7D/8P/dZD Y7986UrhgxPy6aQeBpExmAWEbhFPX4YZNuMt/WcKz68O2H6f8pvnWgE0celtuAGWieWe 9QZ2O33oeE5c5Y5kHtii/DFoxKg5oy1J1IhsTHQN2tkp4OpYsp6f7OgShMzsqTaTk2NY NbH8ivIjHZYXfe5YkBGF0uqHndqEsION0UvbcHBy7UkQ4/Uv/GNh0gQIQEgTSMpPwLu9 OkI8juAH1AdR3kQoz0fYunrDsJnHI4kamjplmQ0PHwpbowKyxqVz7J9WegE80OjzHNrF Je2g== 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=N3egUvauHlEBQ9wo5Dw6ioaQObaRoP202KZWqV+44oI=; b=egsnGHyGo3Nk7JA4JkzEHO09VSU0ogsINimnx5/ftXwQWz9ozrkb8zu4Z3lrFsCpMe NskIyREGu3FJphxFOkd2dx/M5H9wXOB0Uf8TIUW0tJ7Ib1xl/6DeYCQ9GZCFPESJ/ieS fULDtqMKkMQxBuTe5xL4p9DaxFo6uAdOr55RVeX5eGaXq6K6+Tc4m6r3DgZFZNozgj5U a77zme2+I2gg7YBigmumHqmnLFZGfyy4TlsQwfPm4Ddq6TitUREHm2p1PO6sOPix5EPG TPUuYulEZF/8CFLQbeTMkhaaqFTtZBQb6DHf9Av3iV7ej2hxw3alzPYHYJAVNUQRW6oB 2MAA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Le7XyBZx; 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 44si8357481plb.57.2018.11.28.09.29.40; Wed, 28 Nov 2018 09:29:42 -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=Le7XyBZx; 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 S1729242AbeK2Ebx (ORCPT + 15 others); Wed, 28 Nov 2018 23:31:53 -0500 Received: from mail-pg1-f195.google.com ([209.85.215.195]:37473 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729146AbeK2Ebx (ORCPT ); Wed, 28 Nov 2018 23:31:53 -0500 Received: by mail-pg1-f195.google.com with SMTP id 80so9804589pge.4 for ; Wed, 28 Nov 2018 09:29:30 -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=N3egUvauHlEBQ9wo5Dw6ioaQObaRoP202KZWqV+44oI=; b=Le7XyBZxvrpVG1JoFi8+s61JFzXVLszWYilUZyazfh00LrmtfhnH5qiNDIKw4tLuNZ HxKXvz8OGfQRxlvKrSf63+a24w6zOulOcPKlrhXCVF+8cWxkh64NTk1iUY+pvf+kPxC2 YMEuLvzGZ0e7PoUpqgKAEb5amDr9Xefx6pK2A= 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=N3egUvauHlEBQ9wo5Dw6ioaQObaRoP202KZWqV+44oI=; b=ugFZM0xP76uCN6A9q9KZzV8Edo1mOs6D4mj/Zz3VZyP1BHOTNKnMEUd7pbSbyegNrl CJpsTlfBxx5O6aV+hIuG6KKhVmMjBTPmQFCf6eBHBVDBSeVmrAwt7G4+AOynavx0C+Zm 5O6kBOAPaGBHhlFnOGRzGVfC2vi+IitY4+Eanv5Nqf7blXd22dz8dg37bUl6ZChoqaiX pvdTDIweVzFlL9LkTg4IHmGVH83zornj/sxZBW15XB+W1Q9ygVNKYUBfXuMpf5KZGuhU iSQ3nseO1rIrp+9arIzSLrcqUkSjKWQGx2Lc/Ow85Vk8tROv3/WwzwMWubeuDTs8tuvj tUmg== X-Gm-Message-State: AGRZ1gL8DcdXU3LOFdMgnIrkNmK5LHXiXQirRFynq6aO1GDwllgCzcCf FbRzHd+lagQORhRqZGkM3q9Z7g== X-Received: by 2002:a62:f54f:: with SMTP id n76mr38370778pfh.59.1543426170026; Wed, 28 Nov 2018 09:29:30 -0800 (PST) Received: from localhost.localdomain ([49.207.53.6]) by smtp.gmail.com with ESMTPSA id 84sm13624360pfk.134.2018.11.28.09.29.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 28 Nov 2018 09:29:29 -0800 (PST) From: Amit Pundir To: Greg KH Cc: Stable , Venkat Gopalakrishnan , Subhash Jadavani , "Martin K . Petersen" Subject: [PATCH for-4.4.y 06/10] scsi: ufshcd: Fix race between clk scaling and ungate work Date: Wed, 28 Nov 2018 22:59:05 +0530 Message-Id: <1543426149-7269-7-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1543426149-7269-1-git-send-email-amit.pundir@linaro.org> References: <1543426149-7269-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 0663cd6a19d3..e4c940981eef 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -585,6 +585,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)) {