Re: [PATCH 04/10] ata: add ata_is_fpdma() accessor

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

 



On 07/14/2016 04:37 PM, Tejun Heo wrote:
> Hello,
> 
> I'm still a bit confused about this patch.
> 
> On Thu, Jul 14, 2016 at 09:05:45AM +0900, Christoph Hellwig wrote:
>> diff --git a/drivers/ata/sata_fsl.c b/drivers/ata/sata_fsl.c
>> index a723ae9..acfb865 100644
>> --- a/drivers/ata/sata_fsl.c
>> +++ b/drivers/ata/sata_fsl.c
>> @@ -534,7 +534,7 @@ static void sata_fsl_qc_prep(struct ata_queued_cmd *qc)
>>  	VPRINTK("Dumping cfis : 0x%x, 0x%x, 0x%x\n",
>>  		cd->cfis[0], cd->cfis[1], cd->cfis[2]);
>>  
>> -	if (qc->tf.protocol == ATA_PROT_NCQ) {
>> +	if (ata_is_fpdma(qc->tf.protocol)) {
> 
> ata_is_fpdma() tests NCQ or DMA.  Is this right?
> 
Yes. The 'sata_fsl' driver has no means (or at least none which I could
detect) allowing it to send NCQ NON-DATA commands.
So for this driver the check for ncq is actually a check for fpdma.

>> --- a/drivers/ata/sata_mv.c
>> +++ b/drivers/ata/sata_mv.c
>> @@ -1173,7 +1173,7 @@ static void mv_set_irq_coalescing(struct ata_host *host,
>>  static void mv_start_edma(struct ata_port *ap, void __iomem *port_mmio,
>>  			 struct mv_port_priv *pp, u8 protocol)
>>  {
>> -	int want_ncq = (protocol == ATA_PROT_NCQ);
>> +	int want_ncq = (ata_is_fpdma(protocol));
> 
> Let's get rid of the parentheses while at it.
> 
Okay.

>>  
>>  	if (pp->pp_flags & MV_PP_FLAG_EDMA_EN) {
>>  		int using_ncq = ((pp->pp_flags & MV_PP_FLAG_NCQ_EN) != 0);
>> @@ -2156,8 +2156,7 @@ static void mv_qc_prep_iie(struct ata_queued_cmd *qc)
>>  	unsigned in_index;
>>  	u32 flags = 0;
>>  
>> -	if ((tf->protocol != ATA_PROT_DMA) &&
>> -	    (tf->protocol != ATA_PROT_NCQ))
>> +	if (!ata_is_fpdma(tf->protocol))
> 
> This is actually testing !DMA && !NCQ and an equivalent conversion but
> the rest aren't.
> 
Yes.

>> diff --git a/drivers/ata/sata_nv.c b/drivers/ata/sata_nv.c
>> index 734f563..89e36aa 100644
>> --- a/drivers/ata/sata_nv.c
>> +++ b/drivers/ata/sata_nv.c
>> @@ -1407,7 +1407,7 @@ static void nv_adma_qc_prep(struct ata_queued_cmd *qc)
>>  	cpb->next_cpb_idx	= 0;
>>  
>>  	/* turn on NCQ flags for NCQ commands */
>> -	if (qc->tf.protocol == ATA_PROT_NCQ)
>> +	if (ata_is_fpdma(qc->tf.protocol))
>>  		ctl_flags |= NV_CPB_CTL_QUEUE | NV_CPB_CTL_FPDMA;
> 
> And I don't know why testing NCQ or DMA would be safe for places like
> this.
> 
Again, this driver cannot handle NCQ NON-DATA command, so it always has
to assume that NCQ _actually_ means FPDMA.

>> +	ATA_PROT_FLAG_FPDMA	= ATA_PROT_FLAG_NCQ | ATA_PROT_FLAG_DMA,
> ...
>> +static inline bool ata_is_fpdma(u8 prot)
>> +{
>> +	return ata_prot_flags(prot) & ATA_PROT_FLAG_FPDMA;
>> +}
> 
> ???
> 
Yeah, strictly speaking there is no need for ATA_PROT_FLAG_FPDMA.
I'll be removing it if you insist.

Cheers,

Hannes

--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux