From: Igor Pylypiv <ipylypiv@google.com>
To: Damien Le Moal <dlemoal@kernel.org>,
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>,
Xiang Chen <chenxiang66@hisilicon.com>,
Artur Paszkiewicz <artur.paszkiewicz@intel.com>,
Bart Van Assche <bvanassche@acm.org>
Cc: TJ Adams <tadamsjr@google.com>,
linux-ide@vger.kernel.org, linux-scsi@vger.kernel.org,
linux-kernel@vger.kernel.org, Igor Pylypiv <ipylypiv@google.com>
Subject: [PATCH v3 2/7] scsi: libsas: Define NCQ Priority sysfs attributes for SATA devices
Date: Sat, 2 Mar 2024 12:16:31 -0800 [thread overview]
Message-ID: <20240302201636.1228331-3-ipylypiv@google.com> (raw)
In-Reply-To: <20240302201636.1228331-1-ipylypiv@google.com>
Libata sysfs attributes cannot be used for libsas managed SATA devices
because the ata_port location is different for libsas.
Defined sysfs attributes (visible for SATA devices only):
- /sys/block/sda/device/ncq_prio_enable
- /sys/block/sda/device/ncq_prio_supported
The newly defined attributes will pass the correct ata_port to libata
helper functions.
Signed-off-by: Igor Pylypiv <ipylypiv@google.com>
---
drivers/scsi/libsas/sas_ata.c | 92 +++++++++++++++++++++++++++++++++++
include/scsi/sas_ata.h | 6 +++
2 files changed, 98 insertions(+)
diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c
index 12e2653846e3..e4d07134a0e4 100644
--- a/drivers/scsi/libsas/sas_ata.c
+++ b/drivers/scsi/libsas/sas_ata.c
@@ -964,3 +964,95 @@ int sas_execute_ata_cmd(struct domain_device *device, u8 *fis, int force_phy_id)
force_phy_id, &tmf_task);
}
EXPORT_SYMBOL_GPL(sas_execute_ata_cmd);
+
+static ssize_t sas_ncq_prio_supported_show(struct device *device,
+ struct device_attribute *attr,
+ char *buf)
+{
+ struct scsi_device *sdev = to_scsi_device(device);
+ struct domain_device *ddev = sdev_to_domain_dev(sdev);
+ int rc;
+
+ /* This attribute shall be visible for SATA devices only */
+ if (WARN_ON(!dev_is_sata(ddev)))
+ return -EINVAL;
+
+ rc = ata_ncq_prio_supported(ddev->sata_dev.ap, sdev);
+ if (rc < 0)
+ return rc;
+
+ return sysfs_emit(buf, "%d\n", rc);
+}
+
+DEVICE_ATTR(ncq_prio_supported, S_IRUGO, sas_ncq_prio_supported_show, NULL);
+
+static ssize_t sas_ncq_prio_enable_show(struct device *device,
+ struct device_attribute *attr,
+ char *buf)
+{
+ struct scsi_device *sdev = to_scsi_device(device);
+ struct domain_device *ddev = sdev_to_domain_dev(sdev);
+ int rc;
+
+ /* This attribute shall be visible for SATA devices only */
+ if (WARN_ON(!dev_is_sata(ddev)))
+ return -EINVAL;
+
+ rc = ata_ncq_prio_enabled(ddev->sata_dev.ap, sdev);
+ if (rc < 0)
+ return rc;
+
+ return sysfs_emit(buf, "%d\n", rc);
+}
+
+static ssize_t sas_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 domain_device *ddev = sdev_to_domain_dev(sdev);
+ bool enable;
+ int rc;
+
+ /* This attribute shall be visible for SATA devices only */
+ if (WARN_ON(!dev_is_sata(ddev)))
+ return -EINVAL;
+
+ rc = kstrtobool(buf, &enable);
+ if (rc)
+ return rc;
+
+ rc = ata_ncq_prio_enable(ddev->sata_dev.ap, sdev, enable);
+ if (rc)
+ return rc;
+
+ return len;
+}
+
+DEVICE_ATTR(ncq_prio_enable, S_IRUGO | S_IWUSR,
+ sas_ncq_prio_enable_show, sas_ncq_prio_enable_store);
+
+static struct attribute *sas_ata_sdev_attrs[] = {
+ &dev_attr_ncq_prio_supported.attr,
+ &dev_attr_ncq_prio_enable.attr,
+ NULL
+};
+
+static umode_t sas_ata_attr_is_visible(struct kobject *kobj,
+ struct attribute *attr, int i)
+{
+ struct device *dev = kobj_to_dev(kobj);
+ struct scsi_device *sdev = to_scsi_device(dev);
+ struct domain_device *ddev = sdev_to_domain_dev(sdev);
+
+ if (!dev_is_sata(ddev))
+ return 0;
+
+ return attr->mode;
+}
+
+const struct attribute_group sas_ata_sdev_attr_group = {
+ .attrs = sas_ata_sdev_attrs,
+ .is_visible = sas_ata_attr_is_visible,
+};
+EXPORT_SYMBOL_GPL(sas_ata_sdev_attr_group);
diff --git a/include/scsi/sas_ata.h b/include/scsi/sas_ata.h
index 2f8c719840a6..cded782fdf33 100644
--- a/include/scsi/sas_ata.h
+++ b/include/scsi/sas_ata.h
@@ -39,6 +39,8 @@ int smp_ata_check_ready_type(struct ata_link *link);
int sas_discover_sata(struct domain_device *dev);
int sas_ata_add_dev(struct domain_device *parent, struct ex_phy *phy,
struct domain_device *child, int phy_id);
+
+extern const struct attribute_group sas_ata_sdev_attr_group;
#else
static inline void sas_ata_disabled_notice(void)
@@ -123,6 +125,10 @@ static inline int sas_ata_add_dev(struct domain_device *parent, struct ex_phy *p
sas_ata_disabled_notice();
return -ENODEV;
}
+
+static const struct attribute_group sas_ata_sdev_attr_group = {
+ .attrs = NULL,
+};
#endif
#endif /* _SAS_ATA_H_ */
--
2.44.0.278.ge034bb2e1d-goog
next prev parent reply other threads:[~2024-03-02 20:16 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-02 20:16 [PATCH v3 0/7] NCQ Priority sysfs sttributes for libsas Igor Pylypiv
2024-03-02 20:16 ` [PATCH v3 1/7] ata: libata-sata: Factor out NCQ Priority configuration helpers Igor Pylypiv
2024-03-04 8:34 ` John Garry
2024-03-04 22:15 ` Igor Pylypiv
2024-03-02 20:16 ` Igor Pylypiv [this message]
2024-03-04 8:22 ` [PATCH v3 2/7] scsi: libsas: Define NCQ Priority sysfs attributes for SATA devices John Garry
2024-03-02 20:16 ` [PATCH v3 3/7] scsi: pm80xx: Add libsas SATA sysfs attributes group Igor Pylypiv
2024-03-04 8:16 ` John Garry
2024-03-04 8:43 ` Jinpu Wang
2024-03-02 20:16 ` [PATCH v3 4/7] scsi: mvsas: " Igor Pylypiv
2024-03-04 8:16 ` John Garry
2024-03-02 20:16 ` [PATCH v3 5/7] scsi: hisi_sas: " Igor Pylypiv
2024-03-04 8:18 ` John Garry
2024-03-02 20:16 ` [PATCH v3 6/7] scsi: aic94xx: " Igor Pylypiv
2024-03-04 8:18 ` John Garry
2024-03-02 20:16 ` [PATCH v3 7/7] scsi: isci: " Igor Pylypiv
2024-03-04 8:18 ` 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=20240302201636.1228331-3-ipylypiv@google.com \
--to=ipylypiv@google.com \
--cc=artur.paszkiewicz@intel.com \
--cc=bvanassche@acm.org \
--cc=cassel@kernel.org \
--cc=chenxiang66@hisilicon.com \
--cc=dlemoal@kernel.org \
--cc=hare@suse.de \
--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.