From: Damien Le Moal <dlemoal@kernel.org>
To: Igor Pylypiv <ipylypiv@google.com>,
Niklas Cassel <cassel@kernel.org>,
John Garry <john.g.garry@oracle.com>,
Jason Yan <yanaijie@huawei.com>,
"James E.J. Bottomley" <jejb@linux.ibm.com>,
"Martin K. Petersen" <martin.petersen@oracle.com>,
Jack Wang <jinpu.wang@cloud.ionos.com>,
Hannes Reinecke <hare@suse.de>
Cc: linux-ide@vger.kernel.org, linux-scsi@vger.kernel.org,
linux-kernel@vger.kernel.org, TJ Adams <tadamsjr@google.com>
Subject: Re: [PATCH 1/3] ata: libata-sata: Factor out NCQ Priority configuration helpers
Date: Fri, 1 Mar 2024 04:16:46 -0800 [thread overview]
Message-ID: <cee98fdf-d285-44da-8bcb-9d9150a19e5e@kernel.org> (raw)
In-Reply-To: <20240301013759.516817-2-ipylypiv@google.com>
On 2024/02/29 17:37, Igor Pylypiv wrote:
> Export libata NCQ Priority configuration helpers to be reused
> for libsas managed SATA devices.
>
> Signed-off-by: Igor Pylypiv <ipylypiv@google.com>
> Reviewed-by: TJ Adams <tadamsjr@google.com>
Please drop this tag as the email signaling the review was not sent to the
list/in-reply to this email. The name of the reviewer should also be fully
spelled out. Same comment for the other 2 patches as they also have this review tag.
> ---
> drivers/ata/libata-sata.c | 130 +++++++++++++++++++++++++-------------
> include/linux/libata.h | 4 ++
> 2 files changed, 90 insertions(+), 44 deletions(-)
>
> diff --git a/drivers/ata/libata-sata.c b/drivers/ata/libata-sata.c
> index 0fb1934875f2..9c6c69d7feab 100644
> --- a/drivers/ata/libata-sata.c
> +++ b/drivers/ata/libata-sata.c
> @@ -848,80 +848,104 @@ 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);
>
> +/**
> + * ata_ncq_prio_supported - Check if device supports NCQ Priority
> + * @ap: ATA port of the target device
> + * @sdev: SCSI device
> + *
> + * Helper to check if device supports NCQ Priority feature,
> + * usable with both libsas and libata.
> + */
> +int ata_ncq_prio_supported(struct ata_port *ap, struct scsi_device *sdev)
> +{
> + struct ata_device *dev;
> + unsigned long flags;
> + int rc;
> +
> + spin_lock_irqsave(ap->lock, flags);
> + dev = ata_scsi_find_dev(ap, sdev);
> + rc = dev ? !!(dev->flags & ATA_DFLAG_NCQ_PRIO) : -ENODEV;
Please expand this to make it more readable:
if (!dev)
rc = -ENODEV;
else
rc = !!(dev->flags & ATA_DFLAG_NCQ_PRIO);
> + spin_unlock_irqrestore(ap->lock, flags);
> + return rc;
> +}
> +EXPORT_SYMBOL_GPL(ata_ncq_prio_supported);
> +
> 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);
> + int rc = ata_ncq_prio_supported(ap, sdev);
>
> - return rc ? rc : sysfs_emit(buf, "%u\n", ncq_prio_supported);
> + return (rc < 0) ? rc : sysfs_emit(buf, "%u\n", rc);
Same here, please expand:
if (rc < 0)
return rc;
return sysfs_emit(buf, "%d\n", rc);
And please not the change %u -> %d
> }
> -
whiteline change. Please keep the white line.
> DEVICE_ATTR(ncq_prio_supported, S_IRUGO, ata_ncq_prio_supported_show, NULL);
> EXPORT_SYMBOL_GPL(dev_attr_ncq_prio_supported);
>
> +/**
> + * ata_ncq_prio_enabled - Check if NCQ Priority is enabled
> + * @ap: ATA port of the target device
> + * @sdev: SCSI device
> + *
> + * Helper to check if NCQ Priority feature is enabled,
> + * usable with both libsas and libata.
> + */
> +int ata_ncq_prio_enabled(struct ata_port *ap, struct scsi_device *sdev)
> +{
> + struct ata_device *dev;
> + unsigned long flags;
> + int rc;
> +
> + spin_lock_irqsave(ap->lock, flags);
> + dev = ata_scsi_find_dev(ap, sdev);
> + rc = dev ? !!(dev->flags & ATA_DFLAG_NCQ_PRIO_ENABLED) : -ENODEV;
same comment as above. Please expand.
> + spin_unlock_irqrestore(ap->lock, flags);
> + return rc;
> +}
> +EXPORT_SYMBOL_GPL(ata_ncq_prio_enabled);
> +
> static ssize_t ata_ncq_prio_enable_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_enable;
> - int rc = 0;
> -
> - spin_lock_irq(ap->lock);
> - dev = ata_scsi_find_dev(ap, sdev);
> - if (!dev)
> - rc = -ENODEV;
> - else
> - ncq_prio_enable = dev->flags & ATA_DFLAG_NCQ_PRIO_ENABLED;
> - spin_unlock_irq(ap->lock);
> + int rc = ata_ncq_prio_enabled(ap, sdev);
>
> - return rc ? rc : sysfs_emit(buf, "%u\n", ncq_prio_enable);
> + return (rc < 0) ? rc : sysfs_emit(buf, "%u\n", rc);
same comment as above.
> }
>
> -static ssize_t ata_ncq_prio_enable_store(struct device *device,
> - struct device_attribute *attr,
> - const char *buf, size_t len)
> +/**
> + * ata_ncq_prio_enable - Enable/disable NCQ Priority
> + * @ap: ATA port of the target device
> + * @sdev: SCSI device
> + * @enable: true - enable NCQ Priority, false - disable NCQ Priority
> + *
> + * Helper to enable/disable NCQ Priority feature, usable with both
> + * libsas and libata.
> + */
> +int ata_ncq_prio_enable(struct ata_port *ap, struct scsi_device *sdev,
> + bool enable)
> {
> - struct scsi_device *sdev = to_scsi_device(device);
> - struct ata_port *ap;
> struct ata_device *dev;
> - long int input;
> + unsigned long flags;
> int rc = 0;
>
> - rc = kstrtol(buf, 10, &input);
> - if (rc)
> - return rc;
> - if ((input < 0) || (input > 1))
> - return -EINVAL;
> + spin_lock_irqsave(ap->lock, flags);
Any reason to not use spin_lock_irq() ?
>
> - ap = ata_shost_to_port(sdev->host);
> dev = ata_scsi_find_dev(ap, sdev);
> - if (unlikely(!dev))
> - return -ENODEV;
> -
> - spin_lock_irq(ap->lock);
> + if (unlikely(!dev)) {
> + rc = -ENODEV;
> + goto unlock;
> + }
>
> if (!(dev->flags & ATA_DFLAG_NCQ_PRIO)) {
> rc = -EINVAL;
> goto unlock;
> }
>
> - if (input) {
> + if (enable) {
> if (dev->flags & ATA_DFLAG_CDL_ENABLED) {
> ata_dev_err(dev,
> "CDL must be disabled to enable NCQ priority\n");
> @@ -934,9 +958,27 @@ static ssize_t ata_ncq_prio_enable_store(struct device *device,
> }
>
> unlock:
> - spin_unlock_irq(ap->lock);
> + spin_unlock_irqrestore(ap->lock, flags);
> + return rc;
> +}
> +EXPORT_SYMBOL_GPL(ata_ncq_prio_enable);
> +
> +static ssize_t ata_ncq_prio_enable_store(struct device *device,
> + struct device_attribute *attr,
> + const char *buf, size_t len)
> +{
> + struct scsi_device *sdev = to_scsi_device(device);
> + struct ata_port *ap = ata_shost_to_port(sdev->host);
> + long input;
> + int rc = 0;
> +
> + rc = kstrtol(buf, 10, &input);
Please use kstrtobool().
> + if (rc)
> + return rc;
> + if ((input < 0) || (input > 1))
> + return -EINVAL;
>
> - return rc ? rc : len;
> + return ata_ncq_prio_enable(ap, sdev, input) ? : len;
> }
>
> DEVICE_ATTR(ncq_prio_enable, S_IRUGO | S_IWUSR,
> diff --git a/include/linux/libata.h b/include/linux/libata.h
> index 26d68115afb8..f3ff2bf3ec6b 100644
> --- a/include/linux/libata.h
> +++ b/include/linux/libata.h
> @@ -1157,6 +1157,10 @@ extern int ata_scsi_change_queue_depth(struct scsi_device *sdev,
> int queue_depth);
> extern int ata_change_queue_depth(struct ata_port *ap, struct scsi_device *sdev,
> int queue_depth);
> +extern int ata_ncq_prio_supported(struct ata_port *ap, struct scsi_device *sdev);
> +extern int ata_ncq_prio_enabled(struct ata_port *ap, struct scsi_device *sdev);
> +extern int ata_ncq_prio_enable(struct ata_port *ap, struct scsi_device *sdev,
> + bool enable);
> extern struct ata_device *ata_dev_pair(struct ata_device *adev);
> extern int ata_do_set_mode(struct ata_link *link, struct ata_device **r_failed_dev);
> extern void ata_scsi_port_error_handler(struct Scsi_Host *host, struct ata_port *ap);
--
Damien Le Moal
Western Digital Research
next prev parent reply other threads:[~2024-03-01 12:16 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-01 1:37 [PATCH 0/3] NCQ Priority sysfs sttributes for libsas Igor Pylypiv
2024-03-01 1:37 ` [PATCH 1/3] ata: libata-sata: Factor out NCQ Priority configuration helpers Igor Pylypiv
2024-03-01 12:16 ` Damien Le Moal [this message]
2024-03-01 22:58 ` Igor Pylypiv
2024-03-01 1:37 ` [PATCH 2/3] scsi: libsas: Define NCQ Priority sysfs attributes for SATA devices Igor Pylypiv
2024-03-01 11:57 ` John Garry
2024-03-01 12:22 ` Damien Le Moal
2024-03-01 1:37 ` [PATCH 3/3] scsi: pm80xx: Add libsas SATA sysfs attributes group Igor Pylypiv
2024-03-01 11:59 ` John Garry
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=cee98fdf-d285-44da-8bcb-9d9150a19e5e@kernel.org \
--to=dlemoal@kernel.org \
--cc=cassel@kernel.org \
--cc=hare@suse.de \
--cc=ipylypiv@google.com \
--cc=jejb@linux.ibm.com \
--cc=jinpu.wang@cloud.ionos.com \
--cc=john.g.garry@oracle.com \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=tadamsjr@google.com \
--cc=yanaijie@huawei.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.