Re: [PATCH RFC v3 2/7] ata: libata-scsi: Add ata_internal_queuecommand()

From: John Garry
Date: Fri Oct 28 2022 - 04:14:59 EST


On 27/10/2022 23:35, Damien Le Moal wrote:
At what stage do you want to send these commands? The tags for the shost
are not setup until scsi_add_host() -> scsi_mq_setup_tags() is called,
so can't expect blk-mq to manage reserved tags before then.

If you are required to send commands prior to scsi_add_host(), then I
suppose the low-level driver still needs to manage tags until the shost
is ready. I guess that some very simple scheme can be used, like always
use tag 0, since most probe is done serially per-host. But that's not a
case which I have had to deal with yet.
In libata case, ata_dev_configure() will cause a lot of
ata_exec_internal_sg() calls for IDENTIFY and various READ LOG commands.
That is all done with non-ncq commands, which means that we do not require
a hw tag. But given that you are changing ata_exec_internal_sg() to call
alloc_request + blk_execute_rq_nowait(), how would these work without a
tag, at least a soft one ? Or we would need to keep the current code to
use ata_qc_issue() directly for probe time ? That will look very ugly...


I am not sure if there is really a problem. So libata/libsas allocs the shost quite early, and that is before we try using ata_exec_internal_sg(). Also note that I added patch "ata: libata-scsi: Allocate sdev early in port probe" so that we have ata_device.sdev ready before issuing ata_exec_internal_sg() (sorry if I'm stating the obvious).

I think Hannes' issue is that some SCSI HBA driver needs to send "internal" commands to probe the HW for info, and this would be before shost is ready. He can tell us more.

Thanks,
John