linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Hannes Reinecke <hare@suse.com>
To: Damien Le Moal <Damien.LeMoal@hgst.com>,
	Hannes Reinecke <hare@suse.de>, Tejun Heo <tj@kernel.org>
Cc: "linux-ide@vger.kernel.org" <linux-ide@vger.kernel.org>,
	"Martin K. Petersen" <martin.petersen@oracle.com>
Subject: Re: [PATCHv3 12/14] libata: NCQ encapsulation for ZAC MANAGEMENT OUT
Date: Fri, 13 May 2016 10:53:40 +0200	[thread overview]
Message-ID: <57359614.704@suse.com> (raw)
In-Reply-To: <81AF36B5-A610-4E04-A4E7-F9DB47D6E73F@hgst.com>

On 05/13/2016 10:32 AM, Damien Le Moal wrote:
>
> Hannes,
>
>> Add NCQ encapsulation for ZAC MANAGEMENT OUT and evaluate
>> NCQ Non-Data log pages to figure out if NCQ encapsulation
>> is supported.
> ...
>> diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
>> index 6afd084..43403aa 100644
>> --- a/drivers/ata/libata-scsi.c
>> +++ b/drivers/ata/libata-scsi.c
>> @@ -3506,11 +3506,19 @@ static unsigned int ata_scsi_zbc_out_xlat(struct ata_queued_cmd *qc)
>>
>> 	reset_all = cdb[14] & 0x1;
>>
>> -	tf->protocol = ATA_PROT_NODATA;
>> -	tf->command = ATA_CMD_ZAC_MGMT_OUT;
>> -	tf->feature = sa;
>> -	tf->hob_feature = reset_all & 0x1;
>> -
>> +	if (ata_ncq_enabled(qc->dev) &&
>> +	    ata_fpdma_zac_mgmt_out_supported(qc->dev)) {
>> +		tf->protocol = ATA_PROT_NCQ;
>> +		tf->command = ATA_CMD_NCQ_NON_DATA;
>> +		tf->hob_nsect = ATA_SUBCMD_NCQ_NON_DATA_ZAC_MGMT_OUT;
>> +		tf->nsect = qc->tag << 3;
>> +		tf->auxiliary = sa | (reset_all & 0x1) << 8;
>> +	} else {
>> +		tf->protocol = ATA_PROT_NODATA;
>> +		tf->command = ATA_CMD_ZAC_MGMT_OUT;
>> +		tf->feature = sa;
>> +		tf->hob_feature = reset_all & 0x1;
>> +	}
>
> Calls to ata_is_data(prot) for ATA_PROT_NCQ task files will always
> return "true", even if the command is ATA_CMD_NCQ_NON_DATA (because
> the DMA prot flag is always set by ata_prot_flags for NCQ protocol).
> This result in all the ATA_CMD_ZAC_MGMT_OUT commands to fail in
> ata_qc_issue because of the check:
>
>          if (WARN_ON_ONCE(ata_is_data(prot) &&
>                           (!qc->sg || !qc->n_elem || !qc->nbytes)))
>                  goto sys_err;
>
>
> I am not sure the best way to fix this... Hacking ata_qc_issue using the protocol
> AND command code to define a bool "is_data" prevents the error but ata_is_data is
> also used in different drivers so a more solid fix seem necessary.
>
> Adding a new ATA_PROT_NCQ_NODATA for ATA_CMD_NCQ_NON_DATA would be better, but this
> does not really correspond to anything in the standards. And with this, the error
> moves to the command sg dma setup complaining that the DMA direction is not known.
> Any ideas ?
>
Hmm. Isn't there simply an 'ATA_TFLAG_WRITE' missing in tf->flags later on?

>
> Also, the "& 0x1" in "tf->auxiliary = sa | (reset_all & 0x1) << 8;" is not necessary
> since reset_all is initialized already as "reset_all = cdb[14] & 0x1;"
>
Yeah. We can fix it up.

Cheers,

Hannes


  reply	other threads:[~2016-05-13  8:53 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-25 10:45 [PATCHv3 00/14] libata: ZAC support Hannes Reinecke
2016-04-25 10:45 ` [PATCHv3 01/14] libata: do not attempt to retrieve sense code twice Hannes Reinecke
2016-04-25 10:45 ` [PATCHv3 02/14] libsas: enable FPDMA SEND/RECEIVE Hannes Reinecke
2016-04-25 10:45 ` [PATCHv3 03/14] libata/libsas: Define ATA_CMD_NCQ_NON_DATA Hannes Reinecke
2016-04-25 10:45 ` [PATCHv3 04/14] libata: Separate out ata_dev_config_ncq_send_recv() Hannes Reinecke
2016-04-25 10:45 ` [PATCHv3 05/14] libata: Add command definitions for NCQ Encapsulation for READ LOG DMA EXT Hannes Reinecke
2016-04-25 10:45 ` [PATCHv3 06/14] libata: Check log page directory before accessing pages Hannes Reinecke
2016-04-25 10:45 ` [PATCHv3 07/14] libata-trace: decode subcommands Hannes Reinecke
2016-04-25 10:45 ` [PATCHv3 08/14] libata-scsi: Generate sense code for disabled devices Hannes Reinecke
2016-04-25 10:45 ` [PATCHv3 09/14] libata: fixup ZAC device disabling Hannes Reinecke
2016-04-25 10:45 ` [PATCHv3 10/14] libata: implement ZBC IN translation Hannes Reinecke
2016-04-25 10:45 ` [PATCHv3 11/14] libata: Implement ZBC OUT translation Hannes Reinecke
2016-04-25 10:45 ` [PATCHv3 12/14] libata: NCQ encapsulation for ZAC MANAGEMENT OUT Hannes Reinecke
2016-05-13  8:32   ` Damien Le Moal
2016-05-13  8:53     ` Hannes Reinecke [this message]
2016-04-25 10:45 ` [PATCHv3 13/14] libata: support device-managed ZAC devices Hannes Reinecke
2016-04-25 12:17   ` Sergei Shtylyov
2016-04-25 10:45 ` [PATCHv3 14/14] libata: support host-aware and host-managed " Hannes Reinecke
2016-04-25 20:16 ` [PATCHv3 00/14] libata: ZAC support Tejun Heo
2016-05-06 11:05   ` Hannes Reinecke
2016-05-09 16:38     ` Tejun Heo
2016-04-26  0:42 ` Damien Le Moal
2016-04-26  5:47   ` Hannes Reinecke

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=57359614.704@suse.com \
    --to=hare@suse.com \
    --cc=Damien.LeMoal@hgst.com \
    --cc=hare@suse.de \
    --cc=linux-ide@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=tj@kernel.org \
    /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).