Re: [PATCH 2/3] scsi: libsas: Add return_fis_on_success to sas_ata_task

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2023/08/18 8:50, Niklas Cassel wrote:
> On Fri, Aug 18, 2023 at 08:12:02AM +0900, Damien Le Moal wrote:
>> On 2023/08/18 6:41, Igor Pylypiv wrote:
>>> For Command Duration Limits policy 0xD (command completes without
>>> an error) libata needs FIS in order to detect the ATA_SENSE bit and
>>> read the Sense Data for Successful NCQ Commands log (0Fh).
>>>
>>> Set return_fis_on_success for commands that have a CDL descriptor
>>> since any CDL descriptor can be configured with policy 0xD.
>>>
>>> Signed-off-by: Igor Pylypiv <ipylypiv@xxxxxxxxxx>
>>> ---
>>>  drivers/scsi/libsas/sas_ata.c | 3 +++
>>>  include/scsi/libsas.h         | 1 +
>>>  2 files changed, 4 insertions(+)
>>>
>>> diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c
>>> index 77714a495cbb..da67c4f671b2 100644
>>> --- a/drivers/scsi/libsas/sas_ata.c
>>> +++ b/drivers/scsi/libsas/sas_ata.c
>>> @@ -207,6 +207,9 @@ static unsigned int sas_ata_qc_issue(struct ata_queued_cmd *qc)
>>>  	task->ata_task.use_ncq = ata_is_ncq(qc->tf.protocol);
>>>  	task->ata_task.dma_xfer = ata_is_dma(qc->tf.protocol);
>>>  
>>> +	/* CDL policy 0xD requires FIS for successful (no error) completions */
>>> +	task->ata_task.return_fis_on_success = ata_qc_has_cdl(qc);
>>
>> From the comments on patch 1, this should be:
>>
>> 	if (qc->flags & ATA_QCFLAG_HAS_CDL)
>> 		task->ata_task.return_sdb_fis_on_success = 1;
>>
>> Note the renaming to "return_sdb_fis_on_success" to be clear about the FIS type.
> 
> I'm not sure if I agree with this comment.
> 
> According to the pm80xx programmers manual,
> setting the RETFIS bit enables the HBA to return a FIS for a successful
> command:
> 
> PIO Read: Nothing is returned
> PIO Write: Device To Host FIS received from the device.
> DMA Read: Device To Host FIS received from the device.
> DMA Write: Device To Host FIS received from the device.
> FPDMA Read: Set Device Bit FIS received from the device.
> FPDMA Write: Set Device Bit FIS received from the device.
> Non-Data: Device To Host FIS received from the device.
> 
> So the FIS you get back can also be e.g. a D2H FIS, if you send
> e.g. a DMA read command.

Right. Forgot about non NCQ commands :)
So no need for renaming to sdb_fis. Apologies for the noise.

> 
> If the RETFIS bit is not set, and the command was successful,
> no FIS will be returned.
> 
> So if you really want to rename this bit, then we would also need to
> change the logic in pm80xx to be something like:
> if (ata_is_ncq() && task->ata_task.return_sdb_fis_on_success)
> 	set_RETFIS_bit;
> 
> Doesn't it make more sense for this generic libsas flag to keep its
> current name, i.e. it means that we enable FIS reception for successful
> commands, regardless of FIS type?

Yes.

> 
> 
> Kind regards,
> Niklas

-- 
Damien Le Moal
Western Digital Research




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux