linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Damien Le Moal <Damien.LeMoal@wdc.com>
To: Niklas Cassel <Niklas.Cassel@wdc.com>
Cc: Jens Axboe <axboe@kernel.dk>,
	"linux-ide@vger.kernel.org" <linux-ide@vger.kernel.org>,
	"linux-block@vger.kernel.org" <linux-block@vger.kernel.org>
Subject: Re: [PATCH v5 9/9] libahci: Introduce ncq_prio_supported sysfs sttribute
Date: Wed, 11 Aug 2021 23:30:52 +0000	[thread overview]
Message-ID: <DM6PR04MB7081ED4BA9C893B488C03FA2E7F89@DM6PR04MB7081.namprd04.prod.outlook.com> (raw)
In-Reply-To: YRQgA5a4Dal4H1sc@x1-carbon

On 2021/08/12 4:07, Niklas Cassel wrote:
> On Tue, Aug 10, 2021 at 02:49:39PM +0900, Damien Le Moal wrote:
>> Currently, the only way a user can determine if a SATA device supports
>> NCQ priority is to try to enable the use of this feature using the
>> ncq_prio_enable sysfs device attribute. If enabling the feature fails,
>> it is because the device does not support NCQ priority. Otherwise, the
>> feature is enabled and indicates that the device supports NCQ priority.
>>
>> Improve this odd interface by introducing the read-only
>> ncq_prio_supported sysfs device attribute to indicate if a SATA device
>> supports NCQ priority. The value of this attribute reflects if the
>> device flag ATA_DFLAG_NCQ_PRIO is set or cleared.
>>
>> Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
>> Reviewed-by: Hannes Reinecke <hare@suse.de>
>> ---
>>  drivers/ata/libahci.c     |  1 +
>>  drivers/ata/libata-sata.c | 24 ++++++++++++++++++++++++
>>  include/linux/libata.h    |  1 +
>>  3 files changed, 26 insertions(+)
>>
>> diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
>> index fec2e9754aed..5b3fa2cbe722 100644
>> --- a/drivers/ata/libahci.c
>> +++ b/drivers/ata/libahci.c
>> @@ -125,6 +125,7 @@ EXPORT_SYMBOL_GPL(ahci_shost_attrs);
>>  struct device_attribute *ahci_sdev_attrs[] = {
>>  	&dev_attr_sw_activity,
>>  	&dev_attr_unload_heads,
>> +	&dev_attr_ncq_prio_supported,
> 
> Hello Damien,
> 
> I do not fully understand if NCQ is only supported for AHCI controllers,
> or if vanilla SATA controllers (without AHCI) can support it as well
> (since NCQ is part of the ATA Command Set - 5).
> 
> However, I do think that you might have missed adding the
> dev_attr_ncq_prio_supported
> attribute for the ata_ncq_sdev_attrs struct in libata-sata.c
> 
> (The ata_ncq_sdev_attrs struct already has the dev_attr_ncq_prio_enable
> attribute, so it makes sense that it should have the new supported
> attribute as well.)

Good catch. I indeed forgot that one. Will add it.

> 
> 
> Kind regards,
> Niklas
> 
>>  	&dev_attr_ncq_prio_enable,
>>  	NULL
>>  };
>> diff --git a/drivers/ata/libata-sata.c b/drivers/ata/libata-sata.c
>> index dc397ebda089..5566fd4bb38f 100644
>> --- a/drivers/ata/libata-sata.c
>> +++ b/drivers/ata/libata-sata.c
>> @@ -834,6 +834,30 @@ DEVICE_ATTR(link_power_management_policy, S_IRUGO | S_IWUSR,
>>  	    ata_scsi_lpm_show, ata_scsi_lpm_store);
>>  EXPORT_SYMBOL_GPL(dev_attr_link_power_management_policy);
>>  
>> +static ssize_t ata_ncq_prio_supported_show(struct device *device,
>> +					   struct device_attribute *attr,
>> +					   char *buf)
>> +{
>> +	struct scsi_device *sdev = to_scsi_device(device);
>> +	struct ata_port *ap = ata_shost_to_port(sdev->host);
>> +	struct ata_device *dev;
>> +	bool ncq_prio_supported;
>> +	int rc = 0;
>> +
>> +	spin_lock_irq(ap->lock);
>> +	dev = ata_scsi_find_dev(ap, sdev);
>> +	if (!dev)
>> +		rc = -ENODEV;
>> +	else
>> +		ncq_prio_supported = dev->flags & ATA_DFLAG_NCQ_PRIO;
>> +	spin_unlock_irq(ap->lock);
>> +
>> +	return rc ? rc : sysfs_emit(buf, "%u\n", ncq_prio_supported);
>> +}
>> +
>> +DEVICE_ATTR(ncq_prio_supported, S_IRUGO, ata_ncq_prio_supported_show, NULL);
>> +EXPORT_SYMBOL_GPL(dev_attr_ncq_prio_supported);
>> +
>>  static ssize_t ata_ncq_prio_enable_show(struct device *device,
>>  					struct device_attribute *attr,
>>  					char *buf)
>> diff --git a/include/linux/libata.h b/include/linux/libata.h
>> index b23f28cfc8e0..a2d1bae7900b 100644
>> --- a/include/linux/libata.h
>> +++ b/include/linux/libata.h
>> @@ -539,6 +539,7 @@ typedef void (*ata_postreset_fn_t)(struct ata_link *link, unsigned int *classes)
>>  extern struct device_attribute dev_attr_unload_heads;
>>  #ifdef CONFIG_SATA_HOST
>>  extern struct device_attribute dev_attr_link_power_management_policy;
>> +extern struct device_attribute dev_attr_ncq_prio_supported;
>>  extern struct device_attribute dev_attr_ncq_prio_enable;
>>  extern struct device_attribute dev_attr_em_message_type;
>>  extern struct device_attribute dev_attr_em_message;


-- 
Damien Le Moal
Western Digital Research

  reply	other threads:[~2021-08-11 23:30 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-10  5:49 [PATCH v5 0/9] libata cleanups and improvements Damien Le Moal
2021-08-10  5:49 ` [PATCH v5 1/9] libata: fix ata_host_alloc_pinfo() Damien Le Moal
2021-08-10  6:06   ` Hannes Reinecke
2021-08-10  5:49 ` [PATCH v5 2/9] libata: fix ata_host_start() Damien Le Moal
2021-08-10  5:49 ` [PATCH v5 3/9] libata: simplify ata_scsi_rbuf_fill() Damien Le Moal
2021-08-10  5:49 ` [PATCH v5 4/9] libata: cleanup device sleep capability detection Damien Le Moal
2021-08-10  5:49 ` [PATCH v5 5/9] libata: cleanup ata_dev_configure() Damien Le Moal
2021-08-10  5:49 ` [PATCH v5 6/9] libata: cleanup NCQ priority handling Damien Le Moal
2021-08-10  5:49 ` [PATCH v5 7/9] libata: fix ata_read_log_page() warning Damien Le Moal
2021-08-10  5:49 ` [PATCH v5 8/9] libata: print feature list on device scan Damien Le Moal
2021-08-10  5:49 ` [PATCH v5 9/9] libahci: Introduce ncq_prio_supported sysfs sttribute Damien Le Moal
2021-08-11 19:07   ` Niklas Cassel
2021-08-11 23:30     ` Damien Le Moal [this message]
2021-08-13 13:56       ` Niklas Cassel

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=DM6PR04MB7081ED4BA9C893B488C03FA2E7F89@DM6PR04MB7081.namprd04.prod.outlook.com \
    --to=damien.lemoal@wdc.com \
    --cc=Niklas.Cassel@wdc.com \
    --cc=axboe@kernel.dk \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-ide@vger.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).