From: "Thomas Weißschuh" <linux@weissschuh.net>
To: Bjorn Helgaas <bhelgaas@google.com>
Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,
"Krzysztof Wilczyński" <kwilczynski@kernel.org>,
"Thomas Weißschuh" <linux@weissschuh.net>
Subject: [PATCH v2 2/2] PCI: Constify slot attributes
Date: Tue, 19 May 2026 20:15:52 +0200 [thread overview]
Message-ID: <20260519-sysfs-const-pci-hotplug-v2-2-16e90346a522@weissschuh.net> (raw)
In-Reply-To: <20260519-sysfs-const-pci-hotplug-v2-0-16e90346a522@weissschuh.net>
The attribute struct are never modified, mark them as const.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
---
drivers/pci/hotplug/pci_hotplug_core.c | 19 ++++++++++---------
drivers/pci/pci.h | 2 +-
drivers/pci/slot.c | 14 +++++++-------
3 files changed, 18 insertions(+), 17 deletions(-)
diff --git a/drivers/pci/hotplug/pci_hotplug_core.c b/drivers/pci/hotplug/pci_hotplug_core.c
index 7c4e197f5581..cdf3293aade7 100644
--- a/drivers/pci/hotplug/pci_hotplug_core.c
+++ b/drivers/pci/hotplug/pci_hotplug_core.c
@@ -97,7 +97,7 @@ static ssize_t power_write_file(struct pci_slot *pci_slot, const char *buf,
return count;
}
-static struct pci_slot_attribute hotplug_slot_attr_power = {
+static const struct pci_slot_attribute hotplug_slot_attr_power = {
.attr = {.name = "power", .mode = S_IFREG | S_IRUGO | S_IWUSR},
.show = power_read_file,
.store = power_write_file
@@ -136,7 +136,7 @@ static ssize_t attention_write_file(struct pci_slot *pci_slot, const char *buf,
return count;
}
-static struct pci_slot_attribute hotplug_slot_attr_attention = {
+static const struct pci_slot_attribute hotplug_slot_attr_attention = {
.attr = {.name = "attention", .mode = S_IFREG | S_IRUGO | S_IWUSR},
.show = attention_read_file,
.store = attention_write_file
@@ -154,7 +154,7 @@ static ssize_t latch_read_file(struct pci_slot *pci_slot, char *buf)
return sysfs_emit(buf, "%d\n", value);
}
-static struct pci_slot_attribute hotplug_slot_attr_latch = {
+static const struct pci_slot_attribute hotplug_slot_attr_latch = {
.attr = {.name = "latch", .mode = S_IFREG | S_IRUGO},
.show = latch_read_file,
};
@@ -171,7 +171,7 @@ static ssize_t presence_read_file(struct pci_slot *pci_slot, char *buf)
return sysfs_emit(buf, "%d\n", value);
}
-static struct pci_slot_attribute hotplug_slot_attr_presence = {
+static const struct pci_slot_attribute hotplug_slot_attr_presence = {
.attr = {.name = "adapter", .mode = S_IFREG | S_IRUGO},
.show = presence_read_file,
};
@@ -196,7 +196,7 @@ static ssize_t test_write_file(struct pci_slot *pci_slot, const char *buf,
return count;
}
-static struct pci_slot_attribute hotplug_slot_attr_test = {
+static const struct pci_slot_attribute hotplug_slot_attr_test = {
.attr = {.name = "test", .mode = S_IFREG | S_IRUGO | S_IWUSR},
.store = test_write_file
};
@@ -239,7 +239,7 @@ static bool has_test_file(struct hotplug_slot *slot)
return false;
}
-static struct attribute *hotplug_slot_attrs[] = {
+static const struct attribute *const hotplug_slot_attrs[] = {
&hotplug_slot_attr_power.attr,
&hotplug_slot_attr_attention.attr,
&hotplug_slot_attr_latch.attr,
@@ -248,7 +248,8 @@ static struct attribute *hotplug_slot_attrs[] = {
NULL
};
-static umode_t hotplug_slot_attr_is_visible(struct kobject *kobj, struct attribute *attr, int idx)
+static umode_t hotplug_slot_attr_is_visible(struct kobject *kobj, const struct attribute *attr,
+ int idx)
{
struct hotplug_slot *slot = to_pci_slot(kobj)->hotplug;
@@ -271,8 +272,8 @@ static umode_t hotplug_slot_attr_is_visible(struct kobject *kobj, struct attribu
}
static const struct attribute_group hotplug_slot_group = {
- .is_visible = hotplug_slot_attr_is_visible,
- .attrs = hotplug_slot_attrs,
+ .is_visible_const = hotplug_slot_attr_is_visible,
+ .attrs_const = hotplug_slot_attrs,
};
static int fs_add_slot(struct hotplug_slot *slot, struct pci_slot *pci_slot)
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index 4a14f88e543a..3ca3832c7267 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -478,7 +478,7 @@ struct pci_slot_attribute {
ssize_t (*show)(struct pci_slot *, char *);
ssize_t (*store)(struct pci_slot *, const char *, size_t);
};
-#define to_pci_slot_attr(s) container_of(s, struct pci_slot_attribute, attr)
+#define to_pci_slot_attr(s) container_of_const(s, struct pci_slot_attribute, attr)
enum pci_bar_type {
pci_bar_unknown, /* Standard PCI BAR probe */
diff --git a/drivers/pci/slot.c b/drivers/pci/slot.c
index 6d5cd37bfb1e..7929bb87b195 100644
--- a/drivers/pci/slot.c
+++ b/drivers/pci/slot.c
@@ -18,7 +18,7 @@ static ssize_t pci_slot_attr_show(struct kobject *kobj,
struct attribute *attr, char *buf)
{
struct pci_slot *slot = to_pci_slot(kobj);
- struct pci_slot_attribute *attribute = to_pci_slot_attr(attr);
+ const struct pci_slot_attribute *attribute = to_pci_slot_attr(attr);
return attribute->show ? attribute->show(slot, buf) : -EIO;
}
@@ -26,7 +26,7 @@ static ssize_t pci_slot_attr_store(struct kobject *kobj,
struct attribute *attr, const char *buf, size_t len)
{
struct pci_slot *slot = to_pci_slot(kobj);
- struct pci_slot_attribute *attribute = to_pci_slot_attr(attr);
+ const struct pci_slot_attribute *attribute = to_pci_slot_attr(attr);
return attribute->store ? attribute->store(slot, buf, len) : -EIO;
}
@@ -93,14 +93,14 @@ static void pci_slot_release(struct kobject *kobj)
kfree(slot);
}
-static struct pci_slot_attribute pci_slot_attr_address =
+static const struct pci_slot_attribute pci_slot_attr_address =
__ATTR(address, S_IRUGO, address_read_file, NULL);
-static struct pci_slot_attribute pci_slot_attr_max_speed =
+static const struct pci_slot_attribute pci_slot_attr_max_speed =
__ATTR(max_bus_speed, S_IRUGO, max_speed_read_file, NULL);
-static struct pci_slot_attribute pci_slot_attr_cur_speed =
+static const struct pci_slot_attribute pci_slot_attr_cur_speed =
__ATTR(cur_bus_speed, S_IRUGO, cur_speed_read_file, NULL);
-static struct attribute *pci_slot_default_attrs[] = {
+static const struct attribute *const pci_slot_default_attrs[] = {
&pci_slot_attr_address.attr,
&pci_slot_attr_max_speed.attr,
&pci_slot_attr_cur_speed.attr,
@@ -108,7 +108,7 @@ static struct attribute *pci_slot_default_attrs[] = {
};
static const struct attribute_group pci_slot_default_group = {
- .attrs = pci_slot_default_attrs,
+ .attrs_const = pci_slot_default_attrs,
};
static const struct attribute_group *pci_slot_default_groups[] = {
--
2.54.0
next prev parent reply other threads:[~2026-05-19 18:25 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-19 18:15 [PATCH v2 0/2] PCI: Manage hotplug attributes through group and make slot attributes const Thomas Weißschuh
2026-05-19 18:15 ` [PATCH v2 1/2] PCI: hotplug: Manage hotplug slot attributes as group Thomas Weißschuh
2026-05-19 18:15 ` Thomas Weißschuh [this message]
2026-05-19 19:01 ` [PATCH v2 2/2] PCI: Constify slot attributes sashiko-bot
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=20260519-sysfs-const-pci-hotplug-v2-2-16e90346a522@weissschuh.net \
--to=linux@weissschuh.net \
--cc=bhelgaas@google.com \
--cc=kwilczynski@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@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 read-only IMAP folder(s) and NNTP newsgroup(s).