From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Stanley Chu <stanley.chu@mediatek.com>,
Avri Altman <avri.altman@wdc.com>,
Andy Teng <andy.teng@mediatek.com>,
"Martin K . Petersen" <martin.petersen@oracle.com>,
Sasha Levin <sashal@kernel.org>,
linux-scsi@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-mediatek@lists.infradead.org
Subject: [PATCH AUTOSEL 5.7 34/54] scsi: ufs: Fix possible infinite loop in ufshcd_hold
Date: Mon, 24 Aug 2020 12:36:13 -0400 [thread overview]
Message-ID: <20200824163634.606093-34-sashal@kernel.org> (raw)
In-Reply-To: <20200824163634.606093-1-sashal@kernel.org>
From: Stanley Chu <stanley.chu@mediatek.com>
[ Upstream commit 93b6c5db06028a3b55122bbb74d0715dd8ca4ae0 ]
In ufshcd_suspend(), after clk-gating is suspended and link is set
as Hibern8 state, ufshcd_hold() is still possibly invoked before
ufshcd_suspend() returns. For example, MediaTek's suspend vops may
issue UIC commands which would call ufshcd_hold() during the command
issuing flow.
Now if UFSHCD_CAP_HIBERN8_WITH_CLK_GATING capability is enabled,
then ufshcd_hold() may enter infinite loops because there is no
clk-ungating work scheduled or pending. In this case, ufshcd_hold()
shall just bypass, and keep the link as Hibern8 state.
Link: https://lore.kernel.org/r/20200809050734.18740-1-stanley.chu@mediatek.com
Reviewed-by: Avri Altman <avri.altman@wdc.com>
Co-developed-by: Andy Teng <andy.teng@mediatek.com>
Signed-off-by: Andy Teng <andy.teng@mediatek.com>
Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/scsi/ufs/ufshcd.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 477b6cfff381b..a61f95ffd45fd 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -1540,6 +1540,7 @@ static void ufshcd_ungate_work(struct work_struct *work)
int ufshcd_hold(struct ufs_hba *hba, bool async)
{
int rc = 0;
+ bool flush_result;
unsigned long flags;
if (!ufshcd_is_clkgating_allowed(hba))
@@ -1571,7 +1572,9 @@ int ufshcd_hold(struct ufs_hba *hba, bool async)
break;
}
spin_unlock_irqrestore(hba->host->host_lock, flags);
- flush_work(&hba->clk_gating.ungate_work);
+ flush_result = flush_work(&hba->clk_gating.ungate_work);
+ if (hba->clk_gating.is_suspended && !flush_result)
+ goto out;
spin_lock_irqsave(hba->host->host_lock, flags);
goto start;
}
--
2.25.1
next prev parent reply other threads:[~2020-08-24 17:10 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-24 16:35 [PATCH AUTOSEL 5.7 01/54] spi: stm32: clear only asserted irq flags on interrupt Sasha Levin
2020-08-24 16:35 ` [PATCH AUTOSEL 5.7 02/54] jbd2: make sure jh have b_transaction set in refile/unfile_buffer Sasha Levin
2020-08-24 16:35 ` [PATCH AUTOSEL 5.7 03/54] ext4: don't BUG on inconsistent journal feature Sasha Levin
2020-08-24 16:35 ` [PATCH AUTOSEL 5.7 04/54] ext4: handle read only external journal device Sasha Levin
2020-08-24 16:35 ` [PATCH AUTOSEL 5.7 05/54] drm/virtio: fix memory leak in virtio_gpu_cleanup_object() Sasha Levin
2020-08-24 16:35 ` [PATCH AUTOSEL 5.7 06/54] ext4: abort the filesystem if failed to async write metadata buffer Sasha Levin
2020-08-24 16:35 ` [PATCH AUTOSEL 5.7 07/54] jbd2: abort journal if free a async write error " Sasha Levin
2020-08-24 16:35 ` [PATCH AUTOSEL 5.7 08/54] ext4: handle option set by mount flags correctly Sasha Levin
2020-08-24 16:35 ` [PATCH AUTOSEL 5.7 09/54] ext4: handle error of ext4_setup_system_zone() on remount Sasha Levin
2020-08-24 16:35 ` [PATCH AUTOSEL 5.7 10/54] ext4: correctly restore system zone info when remount fails Sasha Levin
2020-08-24 16:35 ` [PATCH AUTOSEL 5.7 11/54] fs: prevent BUG_ON in submit_bh_wbc() Sasha Levin
2020-08-24 16:35 ` [PATCH AUTOSEL 5.7 12/54] spi: stm32h7: fix race condition at end of transfer Sasha Levin
2020-08-24 16:35 ` [PATCH AUTOSEL 5.7 13/54] spi: stm32: fix fifo threshold level in case of short transfer Sasha Levin
2020-08-24 16:35 ` [PATCH AUTOSEL 5.7 14/54] spi: stm32: fix stm32_spi_prepare_mbr in case of odd clk_rate Sasha Levin
2020-08-24 16:35 ` [PATCH AUTOSEL 5.7 15/54] spi: stm32: always perform registers configuration prior to transfer Sasha Levin
2020-08-24 16:35 ` [PATCH AUTOSEL 5.7 16/54] drm/amd/powerplay: correct Vega20 cached smu feature state Sasha Levin
2020-08-24 16:35 ` [PATCH AUTOSEL 5.7 17/54] drm/amd/powerplay: correct UVD/VCE PG state on custom pptable uploading Sasha Levin
2020-08-24 16:35 ` [PATCH AUTOSEL 5.7 18/54] drm/amd/display: Fix LFC multiplier changing erratically Sasha Levin
2020-08-24 16:35 ` [PATCH AUTOSEL 5.7 19/54] drm/amd/display: Switch to immediate mode for updating infopackets Sasha Levin
2020-08-24 16:35 ` [PATCH AUTOSEL 5.7 20/54] selftests/bpf: Fix segmentation fault in test_progs Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 21/54] libbpf: Handle GCC built-in types for Arm NEON Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 22/54] netfilter: avoid ipv6 -> nf_defrag_ipv6 module dependency Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 23/54] libbpf: Prevent overriding errno when logging errors Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 24/54] selftests/bpf: Fix btf_dump test cases on 32-bit arches Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 25/54] selftests/bpf: Correct various core_reloc 64-bit assumptions Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 26/54] can: j1939: transport: j1939_xtp_rx_dat_one(): compare own packets to detect corruptions Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 27/54] drivers/net/wan/hdlc_x25: Added needed_headroom and a skb->len check Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 28/54] ALSA: hda/realtek: Add model alc298-samsung-headphone Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 29/54] s390/cio: add cond_resched() in the slow_eval_known_fn() loop Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 30/54] ASoC: wm8994: Avoid attempts to read unreadable registers Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 31/54] ALSA: usb-audio: ignore broken processing/extension unit Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 32/54] selftests: disable rp_filter for icmp_redirect.sh Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 33/54] scsi: fcoe: Fix I/O path allocation Sasha Levin
2020-08-24 16:36 ` Sasha Levin [this message]
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 35/54] scsi: ufs: Improve interrupt handling for shared interrupts Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 36/54] scsi: ufs: Clean up completed request without interrupt notification Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 37/54] scsi: qla2xxx: Flush all sessions on zone disable Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 38/54] scsi: qla2xxx: Flush I/O " Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 39/54] scsi: qla2xxx: Indicate correct supported speeds for Mezz card Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 40/54] scsi: qla2xxx: Fix login timeout Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 41/54] scsi: qla2xxx: Check if FW supports MQ before enabling Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 42/54] scsi: qla2xxx: Fix null pointer access during disconnect from subsystem Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 43/54] Revert "scsi: qla2xxx: Fix crash on qla2x00_mailbox_command" Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 44/54] macvlan: validate setting of multiple remote source MAC addresses Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 45/54] net: gianfar: Add of_node_put() before goto statement Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 46/54] drm/amdgpu: disable gfxoff for navy_flounder Sasha Levin
2020-08-24 18:24 ` Alex Deucher
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 47/54] drm/amdgpu: fix NULL pointer access issue when unloading driver Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 48/54] drm/amdkfd: fix the wrong sdma instance query for renoir Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 49/54] Revert "drm/amdgpu: disable gfxoff for navy_flounder" Sasha Levin
2020-08-24 18:24 ` Alex Deucher
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 50/54] powerpc/perf: Fix soft lockups due to missed interrupt accounting Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 51/54] libbpf: Fix map index used in error message Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 52/54] bpf: selftests: global_funcs: Check err_str before strstr Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 53/54] arm64: Move handling of erratum 1418040 into C code Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 54/54] arm64: Allow booting of late CPUs affected by erratum 1418040 Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200824163634.606093-34-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=andy.teng@mediatek.com \
--cc=avri.altman@wdc.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=stable@vger.kernel.org \
--cc=stanley.chu@mediatek.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome