From: Bart Van Assche <bvanassche@acm.org>
To: John Garry <john.g.garry@oracle.com>,
"Martin K . Petersen" <martin.petersen@oracle.com>
Cc: linux-scsi@vger.kernel.org, hch@lst.de, hare@suse.com
Subject: Re: [PATCH v2 00/30] Optimize the hot path in the UFS driver
Date: Thu, 14 Aug 2025 09:51:37 -0700 [thread overview]
Message-ID: <e651aa7e-aad2-4e4e-afff-3e89a61f13f9@acm.org> (raw)
In-Reply-To: <ff0705fe-0bac-408e-a073-a833525dabf8@oracle.com>
On 8/14/25 1:40 AM, John Garry wrote:
> Some further initial points on this series:
> - the driver still has the separate tmf tag set. Why cannot the tmf be
> allocated as a reserved command in the shost tagset?
The UFSHCI standard defines different tag spaces for TMFs and for UFS
commands: [0..hba->nutmrs) for TMFs and [0..hba->nutrs) for UFS
commands. These ranges have to be kept separate because of how UFS host
controllers use these numbers. The TMF tag is passed to UFS host
controllers by writing it into a bitwise register. From
__ufshcd_issue_tm_cmd():
ufshcd_writel(hba, 1 << task_tag, REG_UTP_TASK_REQ_DOOR_BELL);
The UFS command tag ends up in a protocol header. From
ufshcd_prepare_utp_scsi_cmd_upiu():
ucd_req_ptr->header = (struct utp_upiu_header){
[ ... ]
.task_tag = lrbp->task_tag,
[ ... ]
};
Mixing up TMFs and the reserved UFS command and allocating all these
from a single tag space would require a additional code and data
structures to translate reserved tags from the [0..hba->nutmrs]
range to the [0..hba->nutmrs) range. In other words, code would become
more complex and harder to maintain. Hence, I prefer to keep the TMF tag
set.
> - I like that you are using blk_execute_rq(), but why do we need the
> pseudo sdev (and not the ufs sdev)? The idea of the psuedo sdev was
> originally for sending reserved commands for the host.
In the UFS driver several reserved commands are sent before
ufshcd_scsi_add_wlus() and scsi_scan_host() are called. Hence, the
pseudo sdev is the only sdev that is available when sending reserved
commands like the initial NOP OUT. Allocating the well-known LUNs before
sending the initial NOP OUT is not possible because ufshcd_sdev_init()
gets called while adding WLUNs and there is code in that function that
is based on the assumption that UFS device initialization has completed
(ufshcd_lu_init() calls ufshcd_read_unit_desc_param()).
> - IIRC, I was advised to have a check in the scsi core dispatch command
> patch to check for a reserved command, and have a separate handler for
> that, i.e. don't use sht->queuecommand for reserved commands. I can try
> to find the exact discussion if you like.
It would be appreciated if a link to that conversation could be shared.
Thanks,
Bart.
next prev parent reply other threads:[~2025-08-14 16:51 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-11 17:34 [PATCH v2 00/30] Optimize the hot path in the UFS driver Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 01/30] scsi: core: Support allocating reserved commands Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 02/30] scsi: core: Support allocating a pseudo SCSI device Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 03/30] scsi: core: Do not allocate a budget token for reserved commands Bart Van Assche
2025-08-18 12:23 ` Hannes Reinecke
2025-08-18 13:16 ` John Garry
2025-08-18 13:21 ` Hannes Reinecke
2025-08-18 15:58 ` Bart Van Assche
2025-08-19 6:34 ` Hannes Reinecke
2025-08-19 19:49 ` Bart Van Assche
2025-08-20 6:54 ` Hannes Reinecke
2025-08-20 17:53 ` Bart Van Assche
2025-08-21 6:42 ` Hannes Reinecke
2025-08-21 15:54 ` Bart Van Assche
2025-08-18 16:01 ` Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 04/30] scsi: core: Add scsi_{get,put}_internal_cmd() helpers Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 05/30] scsi: core: Introduce scsi_host_update_can_queue() Bart Van Assche
2025-08-13 9:47 ` John Garry
2025-08-13 15:23 ` Bart Van Assche
2025-08-14 8:24 ` John Garry
2025-08-14 16:17 ` Bart Van Assche
2025-08-14 17:03 ` John Garry
2025-08-15 17:13 ` Bart Van Assche
2025-08-18 13:29 ` Hannes Reinecke
2025-08-18 16:05 ` Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 06/30] scsi_debug: Set .alloc_pseudo_sdev Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 07/30] ufs: core: Move an assignment Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 08/30] ufs: core: Change the type of one ufshcd_add_cmd_upiu_trace() argument Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 09/30] ufs: core: Only call ufshcd_add_command_trace() for SCSI commands Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 10/30] ufs: core: Change the type of one ufshcd_add_command_trace() argument Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 11/30] ufs: core: Change the type of one ufshcd_send_command() argument Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 12/30] ufs: core: Only call ufshcd_should_inform_monitor() for SCSI commands Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 13/30] ufs: core: Change the monitor function argument types Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 14/30] ufs: core: Rework ufshcd_mcq_compl_pending_transfer() Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 15/30] ufs: core: Rework ufshcd_eh_device_reset_handler() Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 16/30] ufs: core: Cache the DMA buffer sizes Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 17/30] ufs: core: Add an argument to ufshcd_mcq_decide_queue_depth() Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 18/30] ufs: core: Add an argument to ufshcd_alloc_mcq() Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 19/30] ufs: core: Call ufshcd_mcq_init() once Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 20/30] ufs: core: Allocate the SCSI host earlier Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 21/30] ufs: core: Make ufshcd_mcq_init() independent of hba->nutrs Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 22/30] ufs: core: Call ufshcd_init_lrb() later Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 23/30] ufs: core: Use hba->reserved_slot Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 24/30] ufs: core: Make the reserved slot a reserved request Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 25/30] ufs: core: Do not clear driver-private command data Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 26/30] ufs: core: Optimize the hot path Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 27/30] ufs: core: Remove the ufshcd_lrb task_tag member Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 28/30] ufs: core: Initialize the 'hwq' variable earlier Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 29/30] ufs: core: Make blk_mq_tagset_busy_iter() skip reserved requests Bart Van Assche
2025-08-11 17:34 ` [PATCH v2 30/30] ufs: core: Switch to scsi_get_internal_cmd() Bart Van Assche
2025-08-13 9:49 ` [PATCH v2 00/30] Optimize the hot path in the UFS driver John Garry
2025-08-13 15:06 ` Bart Van Assche
2025-08-14 8:40 ` John Garry
2025-08-14 16:51 ` Bart Van Assche [this message]
2025-08-15 7:50 ` John Garry
2025-08-15 17:30 ` Bart Van Assche
2025-08-16 8:37 ` John Garry
2025-08-18 16:25 ` Bart Van Assche
2025-08-21 18:20 ` Bart Van Assche
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=e651aa7e-aad2-4e4e-afff-3e89a61f13f9@acm.org \
--to=bvanassche@acm.org \
--cc=hare@suse.com \
--cc=hch@lst.de \
--cc=john.g.garry@oracle.com \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.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;
as well as URLs for NNTP newsgroup(s).