All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 0/6] scsi: ufs: core: Factor hba->outstanding_reqs helper and fix double completions
@ 2026-10-22  3:44 Stanley Jhu
  2026-10-22  3:44 ` [PATCH v5 1/6] scsi: ufs: core: Remove an always-false WARN_ONCE() Stanley Jhu
                   ` (8 more replies)
  0 siblings, 9 replies; 14+ messages in thread
From: Stanley Jhu @ 2026-10-22  3:44 UTC (permalink / raw)
  To: Martin K . Petersen, linux-scsi
  Cc: James E . J . Bottomley, Bart Van Assche, Alim Akhtar, Bean Huo,
	Peter Wang, Can Guo, linux-kernel, stable

In Single Doorbell (SDB) mode, multiple completion and error handling
paths can race on the same transfer request when bits in
hba->outstanding_reqs are not claimed atomically with completing the
request. A stale bit in hba->outstanding_reqs lets a later poll or
reset complete the request again and unmap its DMA buffers twice.

Patch 1 removes a WARN_ONCE() in ufshcd_poll() whose condition is always
false.

Patch 2 adds __ufshcd_clear_outstanding_reqs() and
ufshcd_clear_outstanding_reqs() to share the bit-claim logic across
ufshcd_poll() and ufshcd_abort() with no functional change.

Patch 3 uses the helper in ufshcd_clear_lu_cmds() to fix a double
completion during LU reset.

Patch 4 uses the helper in ufshcd_eh_timed_out() and checks its return
value to prevent releasing driver resources twice.

Patch 5 removes the completed-without-interrupt branch in ufshcd_abort()
to fix a double completion on timed-out commands.

Patch 6 skips releasing reserved requests at the end of ufshcd_abort().

This series is based on mkp/for-next (db8b4d2bf2d3).

Tested: QEMU ARM64 in SDB mode across probe, I/O, abort, LU reset, and
PM timeout paths without double completion or resource underflow.

Changes since v4:
- Patch 5/6: remove the completed-without-interrupt branch in
  ufshcd_abort() instead of claiming the request there (Bart).
- Collect Reviewed-by tags from Peter Wang on patches 4/6 and 6/6.
- Link to v4:
  https://lore.kernel.org/r/20261021035450.3488805-1-stanleyjhu@google.com

Stanley Jhu (6):
  scsi: ufs: core: Remove an always-false WARN_ONCE()
  scsi: ufs: core: Add a helper for clearing hba->outstanding_reqs
  scsi: ufs: core: Fix double completion in ufshcd_clear_lu_cmds()
  scsi: ufs: core: Fix double release in ufshcd_eh_timed_out()
  scsi: ufs: core: Remove completed-without-interrupt path in
    ufshcd_abort()
  scsi: ufs: core: Do not release a reserved request in ufshcd_abort()

 drivers/ufs/core/ufshcd.c | 70 +++++++++++++++++++++++----------------
 1 file changed, 41 insertions(+), 29 deletions(-)


base-commit: db8b4d2bf2d3e02b4ff78bbf69d00e11795840de
-- 
2.56.0.218.g1ec904b173-goog

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2026-10-29  2:03 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-22  3:44 [PATCH v5 0/6] scsi: ufs: core: Factor hba->outstanding_reqs helper and fix double completions Stanley Jhu
2026-10-22  3:44 ` [PATCH v5 1/6] scsi: ufs: core: Remove an always-false WARN_ONCE() Stanley Jhu
2026-10-22  3:44 ` [PATCH v5 2/6] scsi: ufs: core: Add a helper for clearing hba->outstanding_reqs Stanley Jhu
2026-10-22  3:44 ` [PATCH v5 3/6] scsi: ufs: core: Fix double completion in ufshcd_clear_lu_cmds() Stanley Jhu
2026-10-22  3:44 ` [PATCH v5 4/6] scsi: ufs: core: Fix double release in ufshcd_eh_timed_out() Stanley Jhu
2026-10-22 18:03   ` Bean Huo
2026-10-22  3:44 ` [PATCH v5 5/6] scsi: ufs: core: Remove completed-without-interrupt path in ufshcd_abort() Stanley Jhu
2026-10-22  9:10   ` Peter Wang
2026-10-22 21:23   ` Bean Huo
2026-10-22  3:44 ` [PATCH v5 6/6] scsi: ufs: core: Do not release a reserved request " Stanley Jhu
2026-10-22 21:24   ` Bean Huo
2026-10-22 17:11 ` [PATCH v5 0/6] scsi: ufs: core: Factor hba->outstanding_reqs helper and fix double completions Bart Van Assche
2026-10-24  3:18 ` Martin K. Petersen
2026-10-29  2:02 ` Martin K. Petersen (Oracle)

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.