Re: [PATCH v5 9/9] libahci: Introduce ncq_prio_supported sysfs sttribute

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

 



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@xxxxxxx>
>> Reviewed-by: Hannes Reinecke <hare@xxxxxxx>
>> ---
>>  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




[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux