All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/7] Soundwire: clean up sysfs group creation
@ 2024-01-30 18:46 Greg Kroah-Hartman
  2024-01-30 18:46 ` [PATCH 1/6] sysfs: Introduce a mechanism to hide static attribute_groups Greg Kroah-Hartman
                   ` (7 more replies)
  0 siblings, 8 replies; 23+ messages in thread
From: Greg Kroah-Hartman @ 2024-01-30 18:46 UTC (permalink / raw)
  To: alsa-devel
  Cc: linux-kernel, Greg Kroah-Hartman, Dan Williams, Vinod Koul,
	Bard Liao, Pierre-Louis Bossart, Sanyog Kale

Note, this is a redone version of a very old series I wrote back in
2022:
	https://lore.kernel.org/r/20220824135951.3604059-1-gregkh@linuxfoundation.org
but everyone has forgotten about it now, and I've reworked it, so I'm
considering it a "new" version, and not v2.

Here's a series that adds the functionality to the driver core to hide
entire attribute groups, in a much saner way than we have attempted in
the past (i.e. dynamically figuring it out.)  Many thanks to Dan for
this patch.  I'll also be taking this into my driver-core branch and
creating a stable tag for anyone else to pull from to get it into their
trees, as I think it will want to be in many for this development cycle.

After the driver core change, there's cleanups to the soundwire core for
how the attribute groups are created, to remove the "manual" creation of
them, and allow the driver core to create them correctly, as needed,
when needed, which makes things much smaller for the soundwire code to
manage.

Comments appreciated!

thanks,

greg k-h

Dan Williams (1):
  sysfs: Introduce a mechanism to hide static attribute_groups

Greg Kroah-Hartman (5):
  soundwire: sysfs: move sdw_slave_dev_attr_group into the existing list
    of groups
  soundwire: sysfs: cleanup the logic for creating the dp0 sysfs
    attributes
  soundwire: sysfs: have the driver core handle the creation of the
    device groups
  soundwire: sysfs: remove sdw_slave_sysfs_init()
  soundwire: sysfs: remove unneeded ATTRIBUTE_GROUPS() comments

 drivers/soundwire/bus_type.c        |  5 ++-
 drivers/soundwire/sysfs_local.h     |  4 +-
 drivers/soundwire/sysfs_slave.c     | 64 ++++++++++++++---------------
 drivers/soundwire/sysfs_slave_dpn.c |  3 ++
 fs/sysfs/group.c                    | 45 ++++++++++++++++----
 include/linux/sysfs.h               | 63 ++++++++++++++++++++++------
 6 files changed, 126 insertions(+), 58 deletions(-)

-- 
2.43.0


^ permalink raw reply	[flat|nested] 23+ messages in thread

* [PATCH 1/6] sysfs: Introduce a mechanism to hide static attribute_groups
  2024-01-30 18:46 [PATCH 0/7] Soundwire: clean up sysfs group creation Greg Kroah-Hartman
@ 2024-01-30 18:46 ` Greg Kroah-Hartman
  2024-01-31 13:05   ` Pierre-Louis Bossart
  2024-01-30 18:46 ` [PATCH 2/6] soundwire: sysfs: move sdw_slave_dev_attr_group into the existing list of groups Greg Kroah-Hartman
                   ` (6 subsequent siblings)
  7 siblings, 1 reply; 23+ messages in thread
From: Greg Kroah-Hartman @ 2024-01-30 18:46 UTC (permalink / raw)
  To: alsa-devel
  Cc: linux-kernel, Dan Williams, Vinod Koul, Bard Liao,
	Pierre-Louis Bossart, Sanyog Kale, Greg Kroah-Hartman

From: Dan Williams <dan.j.williams@intel.com>

Add a mechanism for named attribute_groups to hide their directory at
sysfs_update_group() time, or otherwise skip emitting the group
directory when the group is first registered. It piggybacks on
is_visible() in a similar manner as SYSFS_PREALLOC, i.e. special flags
in the upper bits of the returned mode. To use it, specify a symbol
prefix to DEFINE_SYSFS_GROUP_VISIBLE(), and then pass that same prefix
to SYSFS_GROUP_VISIBLE() when assigning the @is_visible() callback:

	DEFINE_SYSFS_GROUP_VISIBLE($prefix)

	struct attribute_group $prefix_group = {
		.name = $name,
		.is_visible = SYSFS_GROUP_VISIBLE($prefix),
	};

SYSFS_GROUP_VISIBLE() expects a definition of $prefix_group_visible()
and $prefix_attr_visible(), where $prefix_group_visible() just returns
true / false and $prefix_attr_visible() behaves as normal.

The motivation for this capability is to centralize PCI device
authentication in the PCI core with a named sysfs group while keeping
that group hidden for devices and platforms that do not meet the
requirements. In a PCI topology, most devices will not support
authentication, a small subset will support just PCI CMA (Component
Measurement and Authentication), a smaller subset will support PCI CMA +
PCIe IDE (Link Integrity and Encryption), and only next generation
server hosts will start to include a platform TSM (TEE Security
Manager).

Without this capability the alternatives are:

* Check if all attributes are invisible and if so, hide the directory.
  Beyond trouble getting this to work [1], this is an ABI change for
  scenarios if userspace happens to depend on group visibility absent any
  attributes. I.e. this new capability avoids regression since it does
  not retroactively apply to existing cases.

* Publish an empty /sys/bus/pci/devices/$pdev/tsm/ directory for all PCI
  devices (i.e. for the case when TSM platform support is present, but
  device support is absent). Unfortunate that this will be a vestigial
  empty directory in the vast majority of cases.

* Reintroduce usage of runtime calls to sysfs_{create,remove}_group()
  in the PCI core. Bjorn has already indicated that he does not want to
  see any growth of pci_sysfs_init() [2].

* Drop the named group and simulate a directory by prefixing all
  TSM-related attributes with "tsm_". Unfortunate to not use the naming
  capability of a sysfs group as intended.

In comparison, there is a small potential for regression if for some
reason an @is_visible() callback had dependencies on how many times it
was called. Additionally, it is no longer an error to update a group
that does not have its directory already present, and it is no longer a
WARN() to remove a group that was never visible.

Link: https://lore.kernel.org/all/2024012321-envious-procedure-4a58@gregkh/ [1]
Link: https://lore.kernel.org/linux-pci/20231019200110.GA1410324@bhelgaas/ [2]
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/sysfs/group.c      | 45 ++++++++++++++++++++++++-------
 include/linux/sysfs.h | 63 ++++++++++++++++++++++++++++++++++---------
 2 files changed, 87 insertions(+), 21 deletions(-)

diff --git a/fs/sysfs/group.c b/fs/sysfs/group.c
index 138676463336..ccb275cdabcb 100644
--- a/fs/sysfs/group.c
+++ b/fs/sysfs/group.c
@@ -31,6 +31,17 @@ static void remove_files(struct kernfs_node *parent,
 			kernfs_remove_by_name(parent, (*bin_attr)->attr.name);
 }
 
+static umode_t __first_visible(const struct attribute_group *grp, struct kobject *kobj)
+{
+	if (grp->attrs && grp->is_visible)
+		return grp->is_visible(kobj, grp->attrs[0], 0);
+
+	if (grp->bin_attrs && grp->is_bin_visible)
+		return grp->is_bin_visible(kobj, grp->bin_attrs[0], 0);
+
+	return 0;
+}
+
 static int create_files(struct kernfs_node *parent, struct kobject *kobj,
 			kuid_t uid, kgid_t gid,
 			const struct attribute_group *grp, int update)
@@ -52,6 +63,7 @@ static int create_files(struct kernfs_node *parent, struct kobject *kobj,
 				kernfs_remove_by_name(parent, (*attr)->name);
 			if (grp->is_visible) {
 				mode = grp->is_visible(kobj, *attr, i);
+				mode &= ~SYSFS_GROUP_INVISIBLE;
 				if (!mode)
 					continue;
 			}
@@ -81,6 +93,7 @@ static int create_files(struct kernfs_node *parent, struct kobject *kobj,
 						(*bin_attr)->attr.name);
 			if (grp->is_bin_visible) {
 				mode = grp->is_bin_visible(kobj, *bin_attr, i);
+				mode &= ~SYSFS_GROUP_INVISIBLE;
 				if (!mode)
 					continue;
 			}
@@ -127,16 +140,31 @@ static int internal_create_group(struct kobject *kobj, int update,
 
 	kobject_get_ownership(kobj, &uid, &gid);
 	if (grp->name) {
+		umode_t mode = __first_visible(grp, kobj);
+
+		if (mode & SYSFS_GROUP_INVISIBLE)
+			mode = 0;
+		else
+			mode = S_IRWXU | S_IRUGO | S_IXUGO;
+
 		if (update) {
 			kn = kernfs_find_and_get(kobj->sd, grp->name);
 			if (!kn) {
-				pr_warn("Can't update unknown attr grp name: %s/%s\n",
-					kobj->name, grp->name);
-				return -EINVAL;
+				pr_debug("attr grp %s/%s not created yet\n",
+					 kobj->name, grp->name);
+				/* may have been invisible prior to this update */
+				update = 0;
+			} else if (!mode) {
+				sysfs_remove_group(kobj, grp);
+				kernfs_put(kn);
+				return 0;
 			}
-		} else {
-			kn = kernfs_create_dir_ns(kobj->sd, grp->name,
-						  S_IRWXU | S_IRUGO | S_IXUGO,
+		}
+
+		if (!update) {
+			if (!mode)
+				return 0;
+			kn = kernfs_create_dir_ns(kobj->sd, grp->name, mode,
 						  uid, gid, kobj, NULL);
 			if (IS_ERR(kn)) {
 				if (PTR_ERR(kn) == -EEXIST)
@@ -279,9 +307,8 @@ void sysfs_remove_group(struct kobject *kobj,
 	if (grp->name) {
 		kn = kernfs_find_and_get(parent, grp->name);
 		if (!kn) {
-			WARN(!kn, KERN_WARNING
-			     "sysfs group '%s' not found for kobject '%s'\n",
-			     grp->name, kobject_name(kobj));
+			pr_debug("sysfs group '%s' not found for kobject '%s'\n",
+				 grp->name, kobject_name(kobj));
 			return;
 		}
 	} else {
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h
index b717a70219f6..a42642b277dd 100644
--- a/include/linux/sysfs.h
+++ b/include/linux/sysfs.h
@@ -61,22 +61,32 @@ do {							\
 /**
  * struct attribute_group - data structure used to declare an attribute group.
  * @name:	Optional: Attribute group name
- *		If specified, the attribute group will be created in
- *		a new subdirectory with this name.
+ *		If specified, the attribute group will be created in a
+ *		new subdirectory with this name. Additionally when a
+ *		group is named, @is_visible and @is_bin_visible may
+ *		return SYSFS_GROUP_INVISIBLE to control visibility of
+ *		the directory itself.
  * @is_visible:	Optional: Function to return permissions associated with an
- *		attribute of the group. Will be called repeatedly for each
- *		non-binary attribute in the group. Only read/write
+ *		attribute of the group. Will be called repeatedly for
+ *		each non-binary attribute in the group. Only read/write
  *		permissions as well as SYSFS_PREALLOC are accepted. Must
- *		return 0 if an attribute is not visible. The returned value
- *		will replace static permissions defined in struct attribute.
+ *		return 0 if an attribute is not visible. The returned
+ *		value will replace static permissions defined in struct
+ *		attribute. Use SYSFS_GROUP_VISIBLE() when assigning this
+ *		callback to specify separate _group_visible() and
+ *		_attr_visible() handlers.
  * @is_bin_visible:
  *		Optional: Function to return permissions associated with a
  *		binary attribute of the group. Will be called repeatedly
  *		for each binary attribute in the group. Only read/write
- *		permissions as well as SYSFS_PREALLOC are accepted. Must
- *		return 0 if a binary attribute is not visible. The returned
- *		value will replace static permissions defined in
- *		struct bin_attribute.
+ *		permissions as well as SYSFS_PREALLOC (and the
+ *		visibility flags for named groups) are accepted. Must
+ *		return 0 if a binary attribute is not visible. The
+ *		returned value will replace static permissions defined
+ *		in struct bin_attribute. If @is_visible is not set, Use
+ *		SYSFS_GROUP_VISIBLE() when assigning this callback to
+ *		specify separate _group_visible() and _attr_visible()
+ *		handlers.
  * @attrs:	Pointer to NULL terminated list of attributes.
  * @bin_attrs:	Pointer to NULL terminated list of binary attributes.
  *		Either attrs or bin_attrs or both must be provided.
@@ -91,13 +101,42 @@ struct attribute_group {
 	struct bin_attribute	**bin_attrs;
 };
 
+#define SYSFS_PREALLOC		010000
+#define SYSFS_GROUP_INVISIBLE	020000
+
+/*
+ * The first call to is_visible() in the create / update path may
+ * indicate visibility for the entire group
+ */
+#define DEFINE_SYSFS_GROUP_VISIBLE(name)                             \
+	static inline umode_t sysfs_group_visible_##name(            \
+		struct kobject *kobj, struct attribute *attr, int n) \
+	{                                                            \
+		if (n == 0 && !name##_group_visible(kobj))           \
+			return SYSFS_GROUP_INVISIBLE;                \
+		return name##_attr_visible(kobj, attr, n);           \
+	}
+
+/*
+ * Same as DEFINE_SYSFS_GROUP_VISIBLE, but for groups with only binary
+ * attributes
+ */
+#define DEFINE_SYSFS_BIN_GROUP_VISIBLE(name)                             \
+	static inline umode_t sysfs_group_visible_##name(                \
+		struct kobject *kobj, struct bin_attribute *attr, int n) \
+	{                                                                \
+		if (n == 0 && !name##_group_visible(kobj))               \
+			return SYSFS_GROUP_INVISIBLE;                    \
+		return name##_attr_visible(kobj, attr, n);               \
+	}
+
+#define SYSFS_GROUP_VISIBLE(fn) sysfs_group_visible_##fn
+
 /*
  * Use these macros to make defining attributes easier.
  * See include/linux/device.h for examples..
  */
 
-#define SYSFS_PREALLOC 010000
-
 #define __ATTR(_name, _mode, _show, _store) {				\
 	.attr = {.name = __stringify(_name),				\
 		 .mode = VERIFY_OCTAL_PERMISSIONS(_mode) },		\
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 2/6] soundwire: sysfs: move sdw_slave_dev_attr_group into the existing list of groups
  2024-01-30 18:46 [PATCH 0/7] Soundwire: clean up sysfs group creation Greg Kroah-Hartman
  2024-01-30 18:46 ` [PATCH 1/6] sysfs: Introduce a mechanism to hide static attribute_groups Greg Kroah-Hartman
@ 2024-01-30 18:46 ` Greg Kroah-Hartman
  2024-01-31  5:20   ` Dan Williams
  2024-01-30 18:46 ` [PATCH 3/6] soundwire: sysfs: cleanup the logic for creating the dp0 sysfs attributes Greg Kroah-Hartman
                   ` (5 subsequent siblings)
  7 siblings, 1 reply; 23+ messages in thread
From: Greg Kroah-Hartman @ 2024-01-30 18:46 UTC (permalink / raw)
  To: alsa-devel
  Cc: linux-kernel, Greg Kroah-Hartman, Dan Williams, Vinod Koul,
	Bard Liao, Pierre-Louis Bossart, Sanyog Kale

The sysfs logic already creates a list of groups for the device, so add
the sdw_slave_dev_attr_group group to that list instead of having to do
a two-step process of adding a group list and then an individual group.

This is a step on the way to moving all of the sysfs attribute handling
into the default driver core attribute group logic so that the soundwire
core does not have to do any of it manually.

Cc: Vinod Koul <vkoul@kernel.org>
Cc: Bard Liao <yung-chuan.liao@linux.intel.com>
Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Cc: Sanyog Kale <sanyog.r.kale@intel.com>
Cc: alsa-devel@alsa-project.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/soundwire/sysfs_slave.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/drivers/soundwire/sysfs_slave.c b/drivers/soundwire/sysfs_slave.c
index 3210359cd944..83e3f6cc3250 100644
--- a/drivers/soundwire/sysfs_slave.c
+++ b/drivers/soundwire/sysfs_slave.c
@@ -105,7 +105,10 @@ static struct attribute *slave_attrs[] = {
 	&dev_attr_modalias.attr,
 	NULL,
 };
-ATTRIBUTE_GROUPS(slave);
+
+static const struct attribute_group slave_attr_group = {
+	.attrs = slave_attrs,
+};
 
 static struct attribute *slave_dev_attrs[] = {
 	&dev_attr_mipi_revision.attr,
@@ -190,6 +193,12 @@ static const struct attribute_group dp0_group = {
 	.name = "dp0",
 };
 
+static const struct attribute_group *slave_groups[] = {
+	&slave_attr_group,
+	&sdw_slave_dev_attr_group,
+	NULL,
+};
+
 int sdw_slave_sysfs_init(struct sdw_slave *slave)
 {
 	int ret;
@@ -198,10 +207,6 @@ int sdw_slave_sysfs_init(struct sdw_slave *slave)
 	if (ret < 0)
 		return ret;
 
-	ret = devm_device_add_group(&slave->dev, &sdw_slave_dev_attr_group);
-	if (ret < 0)
-		return ret;
-
 	if (slave->prop.dp0_prop) {
 		ret = devm_device_add_group(&slave->dev, &dp0_group);
 		if (ret < 0)
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 3/6] soundwire: sysfs: cleanup the logic for creating the dp0 sysfs attributes
  2024-01-30 18:46 [PATCH 0/7] Soundwire: clean up sysfs group creation Greg Kroah-Hartman
  2024-01-30 18:46 ` [PATCH 1/6] sysfs: Introduce a mechanism to hide static attribute_groups Greg Kroah-Hartman
  2024-01-30 18:46 ` [PATCH 2/6] soundwire: sysfs: move sdw_slave_dev_attr_group into the existing list of groups Greg Kroah-Hartman
@ 2024-01-30 18:46 ` Greg Kroah-Hartman
  2024-01-31  5:32   ` Dan Williams
  2024-01-30 18:46 ` [PATCH 4/6] soundwire: sysfs: have the driver core handle the creation of the device groups Greg Kroah-Hartman
                   ` (4 subsequent siblings)
  7 siblings, 1 reply; 23+ messages in thread
From: Greg Kroah-Hartman @ 2024-01-30 18:46 UTC (permalink / raw)
  To: alsa-devel
  Cc: linux-kernel, Greg Kroah-Hartman, Dan Williams, Vinod Koul,
	Bard Liao, Pierre-Louis Bossart, Sanyog Kale

There's no need to special-case the dp0 sysfs attributes, the
is_visible() callback in the attribute group can handle that for us, so
add that and add it to the attribute group list making the logic simpler
overall.

This is a step on the way to moving all of the sysfs attribute handling
into the default driver core attribute group logic so that the soundwire
core does not have to do any of it manually.

Cc: Vinod Koul <vkoul@kernel.org>
Cc: Bard Liao <yung-chuan.liao@linux.intel.com>
Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Cc: Sanyog Kale <sanyog.r.kale@intel.com>
Cc: alsa-devel@alsa-project.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/soundwire/sysfs_slave.c | 28 ++++++++++++++++++++++------
 1 file changed, 22 insertions(+), 6 deletions(-)

diff --git a/drivers/soundwire/sysfs_slave.c b/drivers/soundwire/sysfs_slave.c
index 83e3f6cc3250..8876c7807048 100644
--- a/drivers/soundwire/sysfs_slave.c
+++ b/drivers/soundwire/sysfs_slave.c
@@ -184,18 +184,40 @@ static struct attribute *dp0_attrs[] = {
 	NULL,
 };
 
+static umode_t dp0_attr_visible(struct kobject *kobj, struct attribute *attr,
+			      int n)
+{
+	struct sdw_slave *slave = dev_to_sdw_dev(kobj_to_dev(kobj));
+
+	if (slave->prop.dp0_prop)
+		return attr->mode;
+	return 0;
+}
+
+static bool dp0_group_visible(struct kobject *kobj)
+{
+	struct sdw_slave *slave = dev_to_sdw_dev(kobj_to_dev(kobj));
+
+	if (slave->prop.dp0_prop)
+		return true;
+	return false;
+}
+DEFINE_SYSFS_GROUP_VISIBLE(dp0);
+
 /*
  * we don't use ATTRIBUTES_GROUP here since we want to add a subdirectory
  * for dp0-level properties
  */
 static const struct attribute_group dp0_group = {
 	.attrs = dp0_attrs,
+	.is_visible = SYSFS_GROUP_VISIBLE(dp0),
 	.name = "dp0",
 };
 
 static const struct attribute_group *slave_groups[] = {
 	&slave_attr_group,
 	&sdw_slave_dev_attr_group,
+	&dp0_group,
 	NULL,
 };
 
@@ -207,12 +229,6 @@ int sdw_slave_sysfs_init(struct sdw_slave *slave)
 	if (ret < 0)
 		return ret;
 
-	if (slave->prop.dp0_prop) {
-		ret = devm_device_add_group(&slave->dev, &dp0_group);
-		if (ret < 0)
-			return ret;
-	}
-
 	if (slave->prop.source_ports || slave->prop.sink_ports) {
 		ret = sdw_slave_sysfs_dpn_init(slave);
 		if (ret < 0)
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 4/6] soundwire: sysfs: have the driver core handle the creation of the device groups
  2024-01-30 18:46 [PATCH 0/7] Soundwire: clean up sysfs group creation Greg Kroah-Hartman
                   ` (2 preceding siblings ...)
  2024-01-30 18:46 ` [PATCH 3/6] soundwire: sysfs: cleanup the logic for creating the dp0 sysfs attributes Greg Kroah-Hartman
@ 2024-01-30 18:46 ` Greg Kroah-Hartman
  2024-01-31  5:37   ` Dan Williams
  2024-01-30 18:46 ` [PATCH 5/6] soundwire: sysfs: remove sdw_slave_sysfs_init() Greg Kroah-Hartman
                   ` (3 subsequent siblings)
  7 siblings, 1 reply; 23+ messages in thread
From: Greg Kroah-Hartman @ 2024-01-30 18:46 UTC (permalink / raw)
  To: alsa-devel
  Cc: linux-kernel, Greg Kroah-Hartman, Dan Williams, Vinod Koul,
	Bard Liao, Pierre-Louis Bossart, Sanyog Kale

The driver core supports the ability to handle the creation and removal
of device-specific sysfs files in a race-free manner.  Take advantage of
that by converting this driver to use this by moving the sysfs
attributes into a group and assigning the dev_groups pointer to it.

Cc: Vinod Koul <vkoul@kernel.org>
Cc: Bard Liao <yung-chuan.liao@linux.intel.com>
Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Cc: Sanyog Kale <sanyog.r.kale@intel.com>
Cc: alsa-devel@alsa-project.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/soundwire/bus_type.c    | 1 +
 drivers/soundwire/sysfs_local.h | 3 +++
 drivers/soundwire/sysfs_slave.c | 6 +-----
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/soundwire/bus_type.c b/drivers/soundwire/bus_type.c
index 9fa93bb923d7..5abe5593395a 100644
--- a/drivers/soundwire/bus_type.c
+++ b/drivers/soundwire/bus_type.c
@@ -221,6 +221,7 @@ int __sdw_register_driver(struct sdw_driver *drv, struct module *owner)
 	drv->driver.probe = sdw_drv_probe;
 	drv->driver.remove = sdw_drv_remove;
 	drv->driver.shutdown = sdw_drv_shutdown;
+	drv->driver.dev_groups = sdw_attr_groups;
 
 	return driver_register(&drv->driver);
 }
diff --git a/drivers/soundwire/sysfs_local.h b/drivers/soundwire/sysfs_local.h
index 7268bc24c538..3ab8658a7782 100644
--- a/drivers/soundwire/sysfs_local.h
+++ b/drivers/soundwire/sysfs_local.h
@@ -11,6 +11,9 @@
 /* basic attributes to report status of Slave (attachment, dev_num) */
 extern const struct attribute_group *sdw_slave_status_attr_groups[];
 
+/* attributes for all soundwire devices */
+extern const struct attribute_group *sdw_attr_groups[];
+
 /* additional device-managed properties reported after driver probe */
 int sdw_slave_sysfs_init(struct sdw_slave *slave);
 int sdw_slave_sysfs_dpn_init(struct sdw_slave *slave);
diff --git a/drivers/soundwire/sysfs_slave.c b/drivers/soundwire/sysfs_slave.c
index 8876c7807048..3afc0dc06c98 100644
--- a/drivers/soundwire/sysfs_slave.c
+++ b/drivers/soundwire/sysfs_slave.c
@@ -214,7 +214,7 @@ static const struct attribute_group dp0_group = {
 	.name = "dp0",
 };
 
-static const struct attribute_group *slave_groups[] = {
+const struct attribute_group *sdw_attr_groups[] = {
 	&slave_attr_group,
 	&sdw_slave_dev_attr_group,
 	&dp0_group,
@@ -225,10 +225,6 @@ int sdw_slave_sysfs_init(struct sdw_slave *slave)
 {
 	int ret;
 
-	ret = devm_device_add_groups(&slave->dev, slave_groups);
-	if (ret < 0)
-		return ret;
-
 	if (slave->prop.source_ports || slave->prop.sink_ports) {
 		ret = sdw_slave_sysfs_dpn_init(slave);
 		if (ret < 0)
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 5/6] soundwire: sysfs: remove sdw_slave_sysfs_init()
  2024-01-30 18:46 [PATCH 0/7] Soundwire: clean up sysfs group creation Greg Kroah-Hartman
                   ` (3 preceding siblings ...)
  2024-01-30 18:46 ` [PATCH 4/6] soundwire: sysfs: have the driver core handle the creation of the device groups Greg Kroah-Hartman
@ 2024-01-30 18:46 ` Greg Kroah-Hartman
  2024-01-31  5:39   ` Dan Williams
  2024-01-30 18:46 ` [PATCH 6/6] soundwire: sysfs: remove unneeded ATTRIBUTE_GROUPS() comments Greg Kroah-Hartman
                   ` (2 subsequent siblings)
  7 siblings, 1 reply; 23+ messages in thread
From: Greg Kroah-Hartman @ 2024-01-30 18:46 UTC (permalink / raw)
  To: alsa-devel
  Cc: linux-kernel, Greg Kroah-Hartman, Dan Williams, Vinod Koul,
	Bard Liao, Pierre-Louis Bossart, Sanyog Kale

Now that sdw_slave_sysfs_init() only calls sdw_slave_sysfs_dpn_init(),
just do that instead and remove sdw_slave_sysfs_init() to get it out of
the way to save a bit of logic and code size.

Cc: Vinod Koul <vkoul@kernel.org>
Cc: Bard Liao <yung-chuan.liao@linux.intel.com>
Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Cc: Sanyog Kale <sanyog.r.kale@intel.com>
Cc: alsa-devel@alsa-project.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/soundwire/bus_type.c        |  4 ++--
 drivers/soundwire/sysfs_local.h     |  1 -
 drivers/soundwire/sysfs_slave.c     | 13 -------------
 drivers/soundwire/sysfs_slave_dpn.c |  3 +++
 4 files changed, 5 insertions(+), 16 deletions(-)

diff --git a/drivers/soundwire/bus_type.c b/drivers/soundwire/bus_type.c
index 5abe5593395a..6085eb8c8d85 100644
--- a/drivers/soundwire/bus_type.c
+++ b/drivers/soundwire/bus_type.c
@@ -126,8 +126,8 @@ static int sdw_drv_probe(struct device *dev)
 	if (slave->prop.use_domain_irq)
 		sdw_irq_create_mapping(slave);
 
-	/* init the sysfs as we have properties now */
-	ret = sdw_slave_sysfs_init(slave);
+	/* init the dynamic sysfs attributes we need */
+	ret = sdw_slave_sysfs_dpn_init(slave);
 	if (ret < 0)
 		dev_warn(dev, "Slave sysfs init failed:%d\n", ret);
 
diff --git a/drivers/soundwire/sysfs_local.h b/drivers/soundwire/sysfs_local.h
index 3ab8658a7782..fa048e112629 100644
--- a/drivers/soundwire/sysfs_local.h
+++ b/drivers/soundwire/sysfs_local.h
@@ -15,7 +15,6 @@ extern const struct attribute_group *sdw_slave_status_attr_groups[];
 extern const struct attribute_group *sdw_attr_groups[];
 
 /* additional device-managed properties reported after driver probe */
-int sdw_slave_sysfs_init(struct sdw_slave *slave);
 int sdw_slave_sysfs_dpn_init(struct sdw_slave *slave);
 
 #endif /* __SDW_SYSFS_LOCAL_H */
diff --git a/drivers/soundwire/sysfs_slave.c b/drivers/soundwire/sysfs_slave.c
index 3afc0dc06c98..0eefc205f697 100644
--- a/drivers/soundwire/sysfs_slave.c
+++ b/drivers/soundwire/sysfs_slave.c
@@ -221,19 +221,6 @@ const struct attribute_group *sdw_attr_groups[] = {
 	NULL,
 };
 
-int sdw_slave_sysfs_init(struct sdw_slave *slave)
-{
-	int ret;
-
-	if (slave->prop.source_ports || slave->prop.sink_ports) {
-		ret = sdw_slave_sysfs_dpn_init(slave);
-		if (ret < 0)
-			return ret;
-	}
-
-	return 0;
-}
-
 /*
  * the status is shown in capital letters for UNATTACHED and RESERVED
  * on purpose, to highligh users to the fact that these status values
diff --git a/drivers/soundwire/sysfs_slave_dpn.c b/drivers/soundwire/sysfs_slave_dpn.c
index c4b6543c09fd..a3fb380ee519 100644
--- a/drivers/soundwire/sysfs_slave_dpn.c
+++ b/drivers/soundwire/sysfs_slave_dpn.c
@@ -283,6 +283,9 @@ int sdw_slave_sysfs_dpn_init(struct sdw_slave *slave)
 	int ret;
 	int i;
 
+	if (!slave->prop.source_ports && !slave->prop.sink_ports)
+		return 0;
+
 	mask = slave->prop.source_ports;
 	for_each_set_bit(i, &mask, 32) {
 		ret = add_all_attributes(&slave->dev, i, 1);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 6/6] soundwire: sysfs: remove unneeded ATTRIBUTE_GROUPS() comments
  2024-01-30 18:46 [PATCH 0/7] Soundwire: clean up sysfs group creation Greg Kroah-Hartman
                   ` (4 preceding siblings ...)
  2024-01-30 18:46 ` [PATCH 5/6] soundwire: sysfs: remove sdw_slave_sysfs_init() Greg Kroah-Hartman
@ 2024-01-30 18:46 ` Greg Kroah-Hartman
  2024-01-31  5:41   ` Dan Williams
  2024-01-31 13:04 ` [PATCH 0/7] Soundwire: clean up sysfs group creation Vinod Koul
  2024-03-28 18:15 ` (subset) " Vinod Koul
  7 siblings, 1 reply; 23+ messages in thread
From: Greg Kroah-Hartman @ 2024-01-30 18:46 UTC (permalink / raw)
  To: alsa-devel
  Cc: linux-kernel, Greg Kroah-Hartman, Dan Williams, Vinod Koul,
	Bard Liao, Pierre-Louis Bossart, Sanyog Kale

Now that we manually created our own attribute group list, the outdated
ATTRIBUTE_GROUPS() comments can be removed as they are not needed at
all.

Cc: Vinod Koul <vkoul@kernel.org>
Cc: Bard Liao <yung-chuan.liao@linux.intel.com>
Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Cc: Sanyog Kale <sanyog.r.kale@intel.com>
Cc: alsa-devel@alsa-project.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/soundwire/sysfs_slave.c | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/drivers/soundwire/sysfs_slave.c b/drivers/soundwire/sysfs_slave.c
index 0eefc205f697..f4259710dd0f 100644
--- a/drivers/soundwire/sysfs_slave.c
+++ b/drivers/soundwire/sysfs_slave.c
@@ -129,10 +129,6 @@ static struct attribute *slave_dev_attrs[] = {
 	NULL,
 };
 
-/*
- * we don't use ATTRIBUTES_GROUP here since we want to add a subdirectory
- * for device-level properties
- */
 static const struct attribute_group sdw_slave_dev_attr_group = {
 	.attrs	= slave_dev_attrs,
 	.name = "dev-properties",
@@ -204,10 +200,6 @@ static bool dp0_group_visible(struct kobject *kobj)
 }
 DEFINE_SYSFS_GROUP_VISIBLE(dp0);
 
-/*
- * we don't use ATTRIBUTES_GROUP here since we want to add a subdirectory
- * for dp0-level properties
- */
 static const struct attribute_group dp0_group = {
 	.attrs = dp0_attrs,
 	.is_visible = SYSFS_GROUP_VISIBLE(dp0),
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [PATCH 2/6] soundwire: sysfs: move sdw_slave_dev_attr_group into the existing list of groups
  2024-01-30 18:46 ` [PATCH 2/6] soundwire: sysfs: move sdw_slave_dev_attr_group into the existing list of groups Greg Kroah-Hartman
@ 2024-01-31  5:20   ` Dan Williams
  2024-01-31  7:12     ` Pierre-Louis Bossart
  0 siblings, 1 reply; 23+ messages in thread
From: Dan Williams @ 2024-01-31  5:20 UTC (permalink / raw)
  To: Greg Kroah-Hartman, alsa-devel
  Cc: linux-kernel, Greg Kroah-Hartman, Dan Williams, Vinod Koul,
	Bard Liao, Pierre-Louis Bossart, Sanyog Kale

Greg Kroah-Hartman wrote:
> The sysfs logic already creates a list of groups for the device, so add
> the sdw_slave_dev_attr_group group to that list instead of having to do
> a two-step process of adding a group list and then an individual group.
> 
> This is a step on the way to moving all of the sysfs attribute handling
> into the default driver core attribute group logic so that the soundwire
> core does not have to do any of it manually.
> 
> Cc: Vinod Koul <vkoul@kernel.org>
> Cc: Bard Liao <yung-chuan.liao@linux.intel.com>
> Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> Cc: Sanyog Kale <sanyog.r.kale@intel.com>
> Cc: alsa-devel@alsa-project.org
> Cc: linux-kernel@vger.kernel.org
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> ---
>  drivers/soundwire/sysfs_slave.c | 15 ++++++++++-----
>  1 file changed, 10 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/soundwire/sysfs_slave.c b/drivers/soundwire/sysfs_slave.c
> index 3210359cd944..83e3f6cc3250 100644
> --- a/drivers/soundwire/sysfs_slave.c
> +++ b/drivers/soundwire/sysfs_slave.c
> @@ -105,7 +105,10 @@ static struct attribute *slave_attrs[] = {
>  	&dev_attr_modalias.attr,
>  	NULL,
>  };
> -ATTRIBUTE_GROUPS(slave);
> +
> +static const struct attribute_group slave_attr_group = {
> +	.attrs = slave_attrs,
> +};
>  
>  static struct attribute *slave_dev_attrs[] = {
>  	&dev_attr_mipi_revision.attr,
> @@ -190,6 +193,12 @@ static const struct attribute_group dp0_group = {
>  	.name = "dp0",
>  };
>  
> +static const struct attribute_group *slave_groups[] = {
> +	&slave_attr_group,
> +	&sdw_slave_dev_attr_group,
> +	NULL,
> +};
> +
>  int sdw_slave_sysfs_init(struct sdw_slave *slave)
>  {
>  	int ret;
> @@ -198,10 +207,6 @@ int sdw_slave_sysfs_init(struct sdw_slave *slave)
>  	if (ret < 0)
>  		return ret;
>  
> -	ret = devm_device_add_group(&slave->dev, &sdw_slave_dev_attr_group);
> -	if (ret < 0)
> -		return ret;
> -

Yeah, open-coding the groups, much better than dynamically adding one.

>  	if (slave->prop.dp0_prop) {
>  		ret = devm_device_add_group(&slave->dev, &dp0_group);
>  		if (ret < 0)

Makes sense. I won't say "looks good" as this file has "slave" all over
the place, but I checked and it entered the kernel just before the
CodingStyle changed.

Reviewed-by: Dan Williams <dan.j.williams@intel.com>

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 3/6] soundwire: sysfs: cleanup the logic for creating the dp0 sysfs attributes
  2024-01-30 18:46 ` [PATCH 3/6] soundwire: sysfs: cleanup the logic for creating the dp0 sysfs attributes Greg Kroah-Hartman
@ 2024-01-31  5:32   ` Dan Williams
  0 siblings, 0 replies; 23+ messages in thread
From: Dan Williams @ 2024-01-31  5:32 UTC (permalink / raw)
  To: Greg Kroah-Hartman, alsa-devel
  Cc: linux-kernel, Greg Kroah-Hartman, Dan Williams, Vinod Koul,
	Bard Liao, Pierre-Louis Bossart, Sanyog Kale

Greg Kroah-Hartman wrote:
> There's no need to special-case the dp0 sysfs attributes, the
> is_visible() callback in the attribute group can handle that for us, so
> add that and add it to the attribute group list making the logic simpler
> overall.
> 
> This is a step on the way to moving all of the sysfs attribute handling
> into the default driver core attribute group logic so that the soundwire
> core does not have to do any of it manually.
> 
> Cc: Vinod Koul <vkoul@kernel.org>
> Cc: Bard Liao <yung-chuan.liao@linux.intel.com>
> Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> Cc: Sanyog Kale <sanyog.r.kale@intel.com>
> Cc: alsa-devel@alsa-project.org
> Cc: linux-kernel@vger.kernel.org
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> ---
>  drivers/soundwire/sysfs_slave.c | 28 ++++++++++++++++++++++------
>  1 file changed, 22 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/soundwire/sysfs_slave.c b/drivers/soundwire/sysfs_slave.c
> index 83e3f6cc3250..8876c7807048 100644
> --- a/drivers/soundwire/sysfs_slave.c
> +++ b/drivers/soundwire/sysfs_slave.c
> @@ -184,18 +184,40 @@ static struct attribute *dp0_attrs[] = {
>  	NULL,
>  };
>  
> +static umode_t dp0_attr_visible(struct kobject *kobj, struct attribute *attr,
> +			      int n)
> +{
> +	struct sdw_slave *slave = dev_to_sdw_dev(kobj_to_dev(kobj));
> +
> +	if (slave->prop.dp0_prop)
> +		return attr->mode;
> +	return 0;
> +}
> +
> +static bool dp0_group_visible(struct kobject *kobj)
> +{
> +	struct sdw_slave *slave = dev_to_sdw_dev(kobj_to_dev(kobj));
> +
> +	if (slave->prop.dp0_prop)
> +		return true;
> +	return false;
> +}
> +DEFINE_SYSFS_GROUP_VISIBLE(dp0);

What do you think of the following for cases like these where
attr_visible is trivially derivable from group_visible?

diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h
index a42642b277dd..203d2e7e9a1e 100644
--- a/include/linux/sysfs.h
+++ b/include/linux/sysfs.h
@@ -117,6 +117,15 @@ struct attribute_group {
                return name##_attr_visible(kobj, attr, n);           \
        }
 
+#define DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(name)                      \
+       static inline umode_t sysfs_group_visible_##name(            \
+               struct kobject *kobj, struct attribute *a, int n) \
+       {                                                            \
+               if (n == 0 && !name##_group_visible(kobj))           \
+                       return SYSFS_GROUP_INVISIBLE;                \
+               return a->mode;                                      \
+       }
+
 /*
  * Same as DEFINE_SYSFS_GROUP_VISIBLE, but for groups with only binary
  * attributes

...i.e. don't require $prefix_attr_visible() to be defined?

With or without that:

Reviewed-by: Dan Williams <dan.j.williams@intel.com>

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [PATCH 4/6] soundwire: sysfs: have the driver core handle the creation of the device groups
  2024-01-30 18:46 ` [PATCH 4/6] soundwire: sysfs: have the driver core handle the creation of the device groups Greg Kroah-Hartman
@ 2024-01-31  5:37   ` Dan Williams
  0 siblings, 0 replies; 23+ messages in thread
From: Dan Williams @ 2024-01-31  5:37 UTC (permalink / raw)
  To: Greg Kroah-Hartman, alsa-devel
  Cc: linux-kernel, Greg Kroah-Hartman, Dan Williams, Vinod Koul,
	Bard Liao, Pierre-Louis Bossart, Sanyog Kale

Greg Kroah-Hartman wrote:
> The driver core supports the ability to handle the creation and removal
> of device-specific sysfs files in a race-free manner.  Take advantage of
> that by converting this driver to use this by moving the sysfs
> attributes into a group and assigning the dev_groups pointer to it.
> 
> Cc: Vinod Koul <vkoul@kernel.org>
> Cc: Bard Liao <yung-chuan.liao@linux.intel.com>
> Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> Cc: Sanyog Kale <sanyog.r.kale@intel.com>
> Cc: alsa-devel@alsa-project.org
> Cc: linux-kernel@vger.kernel.org
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> ---
>  drivers/soundwire/bus_type.c    | 1 +
>  drivers/soundwire/sysfs_local.h | 3 +++
>  drivers/soundwire/sysfs_slave.c | 6 +-----
>  3 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/soundwire/bus_type.c b/drivers/soundwire/bus_type.c
> index 9fa93bb923d7..5abe5593395a 100644
> --- a/drivers/soundwire/bus_type.c
> +++ b/drivers/soundwire/bus_type.c
> @@ -221,6 +221,7 @@ int __sdw_register_driver(struct sdw_driver *drv, struct module *owner)
>  	drv->driver.probe = sdw_drv_probe;
>  	drv->driver.remove = sdw_drv_remove;
>  	drv->driver.shutdown = sdw_drv_shutdown;
> +	drv->driver.dev_groups = sdw_attr_groups;
>  
>  	return driver_register(&drv->driver);
>  }
> diff --git a/drivers/soundwire/sysfs_local.h b/drivers/soundwire/sysfs_local.h
> index 7268bc24c538..3ab8658a7782 100644
> --- a/drivers/soundwire/sysfs_local.h
> +++ b/drivers/soundwire/sysfs_local.h
> @@ -11,6 +11,9 @@
>  /* basic attributes to report status of Slave (attachment, dev_num) */
>  extern const struct attribute_group *sdw_slave_status_attr_groups[];
>  
> +/* attributes for all soundwire devices */
> +extern const struct attribute_group *sdw_attr_groups[];
> +
>  /* additional device-managed properties reported after driver probe */
>  int sdw_slave_sysfs_init(struct sdw_slave *slave);
>  int sdw_slave_sysfs_dpn_init(struct sdw_slave *slave);
> diff --git a/drivers/soundwire/sysfs_slave.c b/drivers/soundwire/sysfs_slave.c
> index 8876c7807048..3afc0dc06c98 100644
> --- a/drivers/soundwire/sysfs_slave.c
> +++ b/drivers/soundwire/sysfs_slave.c
> @@ -214,7 +214,7 @@ static const struct attribute_group dp0_group = {
>  	.name = "dp0",
>  };
>  
> -static const struct attribute_group *slave_groups[] = {
> +const struct attribute_group *sdw_attr_groups[] = {
>  	&slave_attr_group,
>  	&sdw_slave_dev_attr_group,
>  	&dp0_group,
> @@ -225,10 +225,6 @@ int sdw_slave_sysfs_init(struct sdw_slave *slave)
>  {
>  	int ret;
>  
> -	ret = devm_device_add_groups(&slave->dev, slave_groups);
> -	if (ret < 0)
> -		return ret;
> -

The subtle scary thing about this usage in general is that this makes
the sysfs attributes live before it is known that the driver probe
succeeded. So beyond the cleanup of using devm to do something that the
driver-core already handles it removes a hard to reason about race
compared to the well known lifetime of driver->dev_groups.

Reviewed-by: Dan Williams <dan.j.williams@intel.com>

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 5/6] soundwire: sysfs: remove sdw_slave_sysfs_init()
  2024-01-30 18:46 ` [PATCH 5/6] soundwire: sysfs: remove sdw_slave_sysfs_init() Greg Kroah-Hartman
@ 2024-01-31  5:39   ` Dan Williams
  0 siblings, 0 replies; 23+ messages in thread
From: Dan Williams @ 2024-01-31  5:39 UTC (permalink / raw)
  To: Greg Kroah-Hartman, alsa-devel
  Cc: linux-kernel, Greg Kroah-Hartman, Dan Williams, Vinod Koul,
	Bard Liao, Pierre-Louis Bossart, Sanyog Kale

Greg Kroah-Hartman wrote:
> Now that sdw_slave_sysfs_init() only calls sdw_slave_sysfs_dpn_init(),
> just do that instead and remove sdw_slave_sysfs_init() to get it out of
> the way to save a bit of logic and code size.
> 
> Cc: Vinod Koul <vkoul@kernel.org>
> Cc: Bard Liao <yung-chuan.liao@linux.intel.com>
> Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> Cc: Sanyog Kale <sanyog.r.kale@intel.com>
> Cc: alsa-devel@alsa-project.org
> Cc: linux-kernel@vger.kernel.org
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Looks correct.

Reviewed-by: Dan Williams <dan.j.williams@intel.com>

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 6/6] soundwire: sysfs: remove unneeded ATTRIBUTE_GROUPS() comments
  2024-01-30 18:46 ` [PATCH 6/6] soundwire: sysfs: remove unneeded ATTRIBUTE_GROUPS() comments Greg Kroah-Hartman
@ 2024-01-31  5:41   ` Dan Williams
  0 siblings, 0 replies; 23+ messages in thread
From: Dan Williams @ 2024-01-31  5:41 UTC (permalink / raw)
  To: Greg Kroah-Hartman, alsa-devel
  Cc: linux-kernel, Greg Kroah-Hartman, Dan Williams, Vinod Koul,
	Bard Liao, Pierre-Louis Bossart, Sanyog Kale

Greg Kroah-Hartman wrote:
> Now that we manually created our own attribute group list, the outdated
> ATTRIBUTE_GROUPS() comments can be removed as they are not needed at
> all.
> 
> Cc: Vinod Koul <vkoul@kernel.org>
> Cc: Bard Liao <yung-chuan.liao@linux.intel.com>
> Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> Cc: Sanyog Kale <sanyog.r.kale@intel.com>
> Cc: alsa-devel@alsa-project.org
> Cc: linux-kernel@vger.kernel.org
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> ---
>  drivers/soundwire/sysfs_slave.c | 8 --------
>  1 file changed, 8 deletions(-)
> 
> diff --git a/drivers/soundwire/sysfs_slave.c b/drivers/soundwire/sysfs_slave.c
> index 0eefc205f697..f4259710dd0f 100644
> --- a/drivers/soundwire/sysfs_slave.c
> +++ b/drivers/soundwire/sysfs_slave.c
> @@ -129,10 +129,6 @@ static struct attribute *slave_dev_attrs[] = {
>  	NULL,
>  };
>  
> -/*
> - * we don't use ATTRIBUTES_GROUP here since we want to add a subdirectory
> - * for device-level properties
> - */
>  static const struct attribute_group sdw_slave_dev_attr_group = {
>  	.attrs	= slave_dev_attrs,
>  	.name = "dev-properties",
> @@ -204,10 +200,6 @@ static bool dp0_group_visible(struct kobject *kobj)
>  }
>  DEFINE_SYSFS_GROUP_VISIBLE(dp0);
>  
> -/*
> - * we don't use ATTRIBUTES_GROUP here since we want to add a subdirectory
> - * for dp0-level properties
> - */
>  static const struct attribute_group dp0_group = {
>  	.attrs = dp0_attrs,
>  	.is_visible = SYSFS_GROUP_VISIBLE(dp0),

Not a great look when there are comments around avoiding common idioms.

Reviewed-by: Dan Williams <dan.j.williams@intel.com>

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 2/6] soundwire: sysfs: move sdw_slave_dev_attr_group into the existing list of groups
  2024-01-31  5:20   ` Dan Williams
@ 2024-01-31  7:12     ` Pierre-Louis Bossart
  2024-02-01 14:56       ` Greg Kroah-Hartman
  0 siblings, 1 reply; 23+ messages in thread
From: Pierre-Louis Bossart @ 2024-01-31  7:12 UTC (permalink / raw)
  To: Dan Williams, Greg Kroah-Hartman, alsa-devel
  Cc: linux-kernel, Vinod Koul, Bard Liao, Sanyog Kale


> Makes sense. I won't say "looks good" as this file has "slave" all over
> the place, but I checked and it entered the kernel just before the
> CodingStyle changed.

SoundWire 1.2.1 introduced the terms "Manager" and "Peripheral", I had a 
patchset to rename everything maybe two years ago already but it's been 
difficult to add without getting in the way of development and 
backports. Maybe a gradual replacement makes more sense, not sure how to 
go about this.


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 0/7] Soundwire: clean up sysfs group creation
  2024-01-30 18:46 [PATCH 0/7] Soundwire: clean up sysfs group creation Greg Kroah-Hartman
                   ` (5 preceding siblings ...)
  2024-01-30 18:46 ` [PATCH 6/6] soundwire: sysfs: remove unneeded ATTRIBUTE_GROUPS() comments Greg Kroah-Hartman
@ 2024-01-31 13:04 ` Vinod Koul
  2024-03-27  8:13   ` Greg Kroah-Hartman
  2024-03-28 18:15 ` (subset) " Vinod Koul
  7 siblings, 1 reply; 23+ messages in thread
From: Vinod Koul @ 2024-01-31 13:04 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: alsa-devel, linux-kernel, Dan Williams, Bard Liao,
	Pierre-Louis Bossart, Sanyog Kale

On 30-01-24, 10:46, Greg Kroah-Hartman wrote:
> Note, this is a redone version of a very old series I wrote back in
> 2022:
> 	https://lore.kernel.org/r/20220824135951.3604059-1-gregkh@linuxfoundation.org
> but everyone has forgotten about it now, and I've reworked it, so I'm
> considering it a "new" version, and not v2.
> 
> Here's a series that adds the functionality to the driver core to hide
> entire attribute groups, in a much saner way than we have attempted in
> the past (i.e. dynamically figuring it out.)  Many thanks to Dan for
> this patch.  I'll also be taking this into my driver-core branch and
> creating a stable tag for anyone else to pull from to get it into their
> trees, as I think it will want to be in many for this development cycle.
> 
> After the driver core change, there's cleanups to the soundwire core for
> how the attribute groups are created, to remove the "manual" creation of
> them, and allow the driver core to create them correctly, as needed,
> when needed, which makes things much smaller for the soundwire code to
> manage.

The series lgtm, having the core handle these would be good. I will wait
couple of days for people to test this and give a t-b and apply.
I hope it is okay if patch1 goes thru sdw tree?

BR
-- 
~Vinod

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 1/6] sysfs: Introduce a mechanism to hide static attribute_groups
  2024-01-30 18:46 ` [PATCH 1/6] sysfs: Introduce a mechanism to hide static attribute_groups Greg Kroah-Hartman
@ 2024-01-31 13:05   ` Pierre-Louis Bossart
  2024-01-31 16:30     ` Greg Kroah-Hartman
  2024-01-31 18:08     ` Dan Williams
  0 siblings, 2 replies; 23+ messages in thread
From: Pierre-Louis Bossart @ 2024-01-31 13:05 UTC (permalink / raw)
  To: Greg Kroah-Hartman, alsa-devel
  Cc: linux-kernel, Dan Williams, Vinod Koul, Bard Liao, Sanyog Kale



On 1/30/24 19:46, Greg Kroah-Hartman wrote:
> From: Dan Williams <dan.j.williams@intel.com>
> 
> Add a mechanism for named attribute_groups to hide their directory at
> sysfs_update_group() time, or otherwise skip emitting the group
> directory when the group is first registered. It piggybacks on
> is_visible() in a similar manner as SYSFS_PREALLOC, i.e. special flags
> in the upper bits of the returned mode. To use it, specify a symbol
> prefix to DEFINE_SYSFS_GROUP_VISIBLE(), and then pass that same prefix
> to SYSFS_GROUP_VISIBLE() when assigning the @is_visible() callback:
> 
> 	DEFINE_SYSFS_GROUP_VISIBLE($prefix)
> 
> 	struct attribute_group $prefix_group = {
> 		.name = $name,
> 		.is_visible = SYSFS_GROUP_VISIBLE($prefix),
> 	};
> 
> SYSFS_GROUP_VISIBLE() expects a definition of $prefix_group_visible()
> and $prefix_attr_visible(), where $prefix_group_visible() just returns
> true / false and $prefix_attr_visible() behaves as normal.
> 
> The motivation for this capability is to centralize PCI device
> authentication in the PCI core with a named sysfs group while keeping
> that group hidden for devices and platforms that do not meet the
> requirements. In a PCI topology, most devices will not support
> authentication, a small subset will support just PCI CMA (Component
> Measurement and Authentication), a smaller subset will support PCI CMA +
> PCIe IDE (Link Integrity and Encryption), and only next generation
> server hosts will start to include a platform TSM (TEE Security
> Manager).
> 
> Without this capability the alternatives are:
> 
> * Check if all attributes are invisible and if so, hide the directory.
>   Beyond trouble getting this to work [1], this is an ABI change for
>   scenarios if userspace happens to depend on group visibility absent any
>   attributes. I.e. this new capability avoids regression since it does
>   not retroactively apply to existing cases.
> 
> * Publish an empty /sys/bus/pci/devices/$pdev/tsm/ directory for all PCI
>   devices (i.e. for the case when TSM platform support is present, but
>   device support is absent). Unfortunate that this will be a vestigial
>   empty directory in the vast majority of cases.
> 
> * Reintroduce usage of runtime calls to sysfs_{create,remove}_group()
>   in the PCI core. Bjorn has already indicated that he does not want to
>   see any growth of pci_sysfs_init() [2].
> 
> * Drop the named group and simulate a directory by prefixing all
>   TSM-related attributes with "tsm_". Unfortunate to not use the naming
>   capability of a sysfs group as intended.
> 
> In comparison, there is a small potential for regression if for some
> reason an @is_visible() callback had dependencies on how many times it
> was called. Additionally, it is no longer an error to update a group
> that does not have its directory already present, and it is no longer a
> WARN() to remove a group that was never visible.
> 
> Link: https://lore.kernel.org/all/2024012321-envious-procedure-4a58@gregkh/ [1]
> Link: https://lore.kernel.org/linux-pci/20231019200110.GA1410324@bhelgaas/ [2]
> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

This patch seems to introduce a regression on our Lunar Lake test
devices, where we can't boot to an ssh shell. No issues on older devices
[1]. Bard Liao and I reproduced the same results on different boards.

We'll need to find someone with direct device access to provide more
information on the problem, remote testing without ssh is a
self-negating proposition.

Is there a dependency on other patches? Our tests are still based on
6.7.0-rc3 due to other upstream issues we're currently working through.

[1] https://github.com/thesofproject/linux/pull/4799

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 1/6] sysfs: Introduce a mechanism to hide static attribute_groups
  2024-01-31 13:05   ` Pierre-Louis Bossart
@ 2024-01-31 16:30     ` Greg Kroah-Hartman
  2024-01-31 18:08     ` Dan Williams
  1 sibling, 0 replies; 23+ messages in thread
From: Greg Kroah-Hartman @ 2024-01-31 16:30 UTC (permalink / raw)
  To: Pierre-Louis Bossart
  Cc: alsa-devel, linux-kernel, Dan Williams, Vinod Koul, Bard Liao,
	Sanyog Kale

On Wed, Jan 31, 2024 at 02:05:04PM +0100, Pierre-Louis Bossart wrote:
> 
> 
> On 1/30/24 19:46, Greg Kroah-Hartman wrote:
> > From: Dan Williams <dan.j.williams@intel.com>
> > 
> > Add a mechanism for named attribute_groups to hide their directory at
> > sysfs_update_group() time, or otherwise skip emitting the group
> > directory when the group is first registered. It piggybacks on
> > is_visible() in a similar manner as SYSFS_PREALLOC, i.e. special flags
> > in the upper bits of the returned mode. To use it, specify a symbol
> > prefix to DEFINE_SYSFS_GROUP_VISIBLE(), and then pass that same prefix
> > to SYSFS_GROUP_VISIBLE() when assigning the @is_visible() callback:
> > 
> > 	DEFINE_SYSFS_GROUP_VISIBLE($prefix)
> > 
> > 	struct attribute_group $prefix_group = {
> > 		.name = $name,
> > 		.is_visible = SYSFS_GROUP_VISIBLE($prefix),
> > 	};
> > 
> > SYSFS_GROUP_VISIBLE() expects a definition of $prefix_group_visible()
> > and $prefix_attr_visible(), where $prefix_group_visible() just returns
> > true / false and $prefix_attr_visible() behaves as normal.
> > 
> > The motivation for this capability is to centralize PCI device
> > authentication in the PCI core with a named sysfs group while keeping
> > that group hidden for devices and platforms that do not meet the
> > requirements. In a PCI topology, most devices will not support
> > authentication, a small subset will support just PCI CMA (Component
> > Measurement and Authentication), a smaller subset will support PCI CMA +
> > PCIe IDE (Link Integrity and Encryption), and only next generation
> > server hosts will start to include a platform TSM (TEE Security
> > Manager).
> > 
> > Without this capability the alternatives are:
> > 
> > * Check if all attributes are invisible and if so, hide the directory.
> >   Beyond trouble getting this to work [1], this is an ABI change for
> >   scenarios if userspace happens to depend on group visibility absent any
> >   attributes. I.e. this new capability avoids regression since it does
> >   not retroactively apply to existing cases.
> > 
> > * Publish an empty /sys/bus/pci/devices/$pdev/tsm/ directory for all PCI
> >   devices (i.e. for the case when TSM platform support is present, but
> >   device support is absent). Unfortunate that this will be a vestigial
> >   empty directory in the vast majority of cases.
> > 
> > * Reintroduce usage of runtime calls to sysfs_{create,remove}_group()
> >   in the PCI core. Bjorn has already indicated that he does not want to
> >   see any growth of pci_sysfs_init() [2].
> > 
> > * Drop the named group and simulate a directory by prefixing all
> >   TSM-related attributes with "tsm_". Unfortunate to not use the naming
> >   capability of a sysfs group as intended.
> > 
> > In comparison, there is a small potential for regression if for some
> > reason an @is_visible() callback had dependencies on how many times it
> > was called. Additionally, it is no longer an error to update a group
> > that does not have its directory already present, and it is no longer a
> > WARN() to remove a group that was never visible.
> > 
> > Link: https://lore.kernel.org/all/2024012321-envious-procedure-4a58@gregkh/ [1]
> > Link: https://lore.kernel.org/linux-pci/20231019200110.GA1410324@bhelgaas/ [2]
> > Signed-off-by: Dan Williams <dan.j.williams@intel.com>
> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> 
> This patch seems to introduce a regression on our Lunar Lake test
> devices, where we can't boot to an ssh shell. No issues on older devices
> [1]. Bard Liao and I reproduced the same results on different boards.
> 
> We'll need to find someone with direct device access to provide more
> information on the problem, remote testing without ssh is a
> self-negating proposition.
> 
> Is there a dependency on other patches? Our tests are still based on
> 6.7.0-rc3 due to other upstream issues we're currently working through.

This should be totally stand-alone and not cause any problems,
especially if you don't have any other patches applied.

I did make this against 6.8-rc2, perhaps that's the issue?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 1/6] sysfs: Introduce a mechanism to hide static attribute_groups
  2024-01-31 13:05   ` Pierre-Louis Bossart
  2024-01-31 16:30     ` Greg Kroah-Hartman
@ 2024-01-31 18:08     ` Dan Williams
  2024-01-31 19:43       ` Dan Williams
  1 sibling, 1 reply; 23+ messages in thread
From: Dan Williams @ 2024-01-31 18:08 UTC (permalink / raw)
  To: Pierre-Louis Bossart, Greg Kroah-Hartman, alsa-devel
  Cc: linux-kernel, Dan Williams, Vinod Koul, Bard Liao, Sanyog Kale

Pierre-Louis Bossart wrote:
> 
> 
> On 1/30/24 19:46, Greg Kroah-Hartman wrote:
> > From: Dan Williams <dan.j.williams@intel.com>
> > 
> > Add a mechanism for named attribute_groups to hide their directory at
> > sysfs_update_group() time, or otherwise skip emitting the group
> > directory when the group is first registered. It piggybacks on
> > is_visible() in a similar manner as SYSFS_PREALLOC, i.e. special flags
> > in the upper bits of the returned mode. To use it, specify a symbol
> > prefix to DEFINE_SYSFS_GROUP_VISIBLE(), and then pass that same prefix
> > to SYSFS_GROUP_VISIBLE() when assigning the @is_visible() callback:
> > 
> > 	DEFINE_SYSFS_GROUP_VISIBLE($prefix)
> > 
> > 	struct attribute_group $prefix_group = {
> > 		.name = $name,
> > 		.is_visible = SYSFS_GROUP_VISIBLE($prefix),
> > 	};
> > 
> > SYSFS_GROUP_VISIBLE() expects a definition of $prefix_group_visible()
> > and $prefix_attr_visible(), where $prefix_group_visible() just returns
> > true / false and $prefix_attr_visible() behaves as normal.
> > 
> > The motivation for this capability is to centralize PCI device
> > authentication in the PCI core with a named sysfs group while keeping
> > that group hidden for devices and platforms that do not meet the
> > requirements. In a PCI topology, most devices will not support
> > authentication, a small subset will support just PCI CMA (Component
> > Measurement and Authentication), a smaller subset will support PCI CMA +
> > PCIe IDE (Link Integrity and Encryption), and only next generation
> > server hosts will start to include a platform TSM (TEE Security
> > Manager).
> > 
> > Without this capability the alternatives are:
> > 
> > * Check if all attributes are invisible and if so, hide the directory.
> >   Beyond trouble getting this to work [1], this is an ABI change for
> >   scenarios if userspace happens to depend on group visibility absent any
> >   attributes. I.e. this new capability avoids regression since it does
> >   not retroactively apply to existing cases.
> > 
> > * Publish an empty /sys/bus/pci/devices/$pdev/tsm/ directory for all PCI
> >   devices (i.e. for the case when TSM platform support is present, but
> >   device support is absent). Unfortunate that this will be a vestigial
> >   empty directory in the vast majority of cases.
> > 
> > * Reintroduce usage of runtime calls to sysfs_{create,remove}_group()
> >   in the PCI core. Bjorn has already indicated that he does not want to
> >   see any growth of pci_sysfs_init() [2].
> > 
> > * Drop the named group and simulate a directory by prefixing all
> >   TSM-related attributes with "tsm_". Unfortunate to not use the naming
> >   capability of a sysfs group as intended.
> > 
> > In comparison, there is a small potential for regression if for some
> > reason an @is_visible() callback had dependencies on how many times it
> > was called. Additionally, it is no longer an error to update a group
> > that does not have its directory already present, and it is no longer a
> > WARN() to remove a group that was never visible.
> > 
> > Link: https://lore.kernel.org/all/2024012321-envious-procedure-4a58@gregkh/ [1]
> > Link: https://lore.kernel.org/linux-pci/20231019200110.GA1410324@bhelgaas/ [2]
> > Signed-off-by: Dan Williams <dan.j.williams@intel.com>
> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> 
> This patch seems to introduce a regression on our Lunar Lake test
> devices, where we can't boot to an ssh shell. No issues on older devices
> [1]. Bard Liao and I reproduced the same results on different boards.
> 
> We'll need to find someone with direct device access to provide more
> information on the problem, remote testing without ssh is a
> self-negating proposition.
> 
> Is there a dependency on other patches? Our tests are still based on
> 6.7.0-rc3 due to other upstream issues we're currently working through.

The only behavior change I can imagine with this patch is that
->is_visble() callbacks get called extra times for named attribute
groups.

...or if an is_visible() callback was inadvertantly already using the
SYSFS_GROUP_INVISIBLE flag in umode_t result.

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 1/6] sysfs: Introduce a mechanism to hide static attribute_groups
  2024-01-31 18:08     ` Dan Williams
@ 2024-01-31 19:43       ` Dan Williams
  0 siblings, 0 replies; 23+ messages in thread
From: Dan Williams @ 2024-01-31 19:43 UTC (permalink / raw)
  To: Dan Williams, Pierre-Louis Bossart, Greg Kroah-Hartman, alsa-devel
  Cc: linux-kernel, Dan Williams, Vinod Koul, Bard Liao, Sanyog Kale

Dan Williams wrote:
> Pierre-Louis Bossart wrote:
> > 
> > 
> > On 1/30/24 19:46, Greg Kroah-Hartman wrote:
> > > From: Dan Williams <dan.j.williams@intel.com>
> > > 
> > > Add a mechanism for named attribute_groups to hide their directory at
> > > sysfs_update_group() time, or otherwise skip emitting the group
> > > directory when the group is first registered. It piggybacks on
> > > is_visible() in a similar manner as SYSFS_PREALLOC, i.e. special flags
> > > in the upper bits of the returned mode. To use it, specify a symbol
> > > prefix to DEFINE_SYSFS_GROUP_VISIBLE(), and then pass that same prefix
> > > to SYSFS_GROUP_VISIBLE() when assigning the @is_visible() callback:
> > > 
> > > 	DEFINE_SYSFS_GROUP_VISIBLE($prefix)
> > > 
> > > 	struct attribute_group $prefix_group = {
> > > 		.name = $name,
> > > 		.is_visible = SYSFS_GROUP_VISIBLE($prefix),
> > > 	};
> > > 
> > > SYSFS_GROUP_VISIBLE() expects a definition of $prefix_group_visible()
> > > and $prefix_attr_visible(), where $prefix_group_visible() just returns
> > > true / false and $prefix_attr_visible() behaves as normal.
> > > 
> > > The motivation for this capability is to centralize PCI device
> > > authentication in the PCI core with a named sysfs group while keeping
> > > that group hidden for devices and platforms that do not meet the
> > > requirements. In a PCI topology, most devices will not support
> > > authentication, a small subset will support just PCI CMA (Component
> > > Measurement and Authentication), a smaller subset will support PCI CMA +
> > > PCIe IDE (Link Integrity and Encryption), and only next generation
> > > server hosts will start to include a platform TSM (TEE Security
> > > Manager).
> > > 
> > > Without this capability the alternatives are:
> > > 
> > > * Check if all attributes are invisible and if so, hide the directory.
> > >   Beyond trouble getting this to work [1], this is an ABI change for
> > >   scenarios if userspace happens to depend on group visibility absent any
> > >   attributes. I.e. this new capability avoids regression since it does
> > >   not retroactively apply to existing cases.
> > > 
> > > * Publish an empty /sys/bus/pci/devices/$pdev/tsm/ directory for all PCI
> > >   devices (i.e. for the case when TSM platform support is present, but
> > >   device support is absent). Unfortunate that this will be a vestigial
> > >   empty directory in the vast majority of cases.
> > > 
> > > * Reintroduce usage of runtime calls to sysfs_{create,remove}_group()
> > >   in the PCI core. Bjorn has already indicated that he does not want to
> > >   see any growth of pci_sysfs_init() [2].
> > > 
> > > * Drop the named group and simulate a directory by prefixing all
> > >   TSM-related attributes with "tsm_". Unfortunate to not use the naming
> > >   capability of a sysfs group as intended.
> > > 
> > > In comparison, there is a small potential for regression if for some
> > > reason an @is_visible() callback had dependencies on how many times it
> > > was called. Additionally, it is no longer an error to update a group
> > > that does not have its directory already present, and it is no longer a
> > > WARN() to remove a group that was never visible.
> > > 
> > > Link: https://lore.kernel.org/all/2024012321-envious-procedure-4a58@gregkh/ [1]
> > > Link: https://lore.kernel.org/linux-pci/20231019200110.GA1410324@bhelgaas/ [2]
> > > Signed-off-by: Dan Williams <dan.j.williams@intel.com>
> > > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > 
> > This patch seems to introduce a regression on our Lunar Lake test
> > devices, where we can't boot to an ssh shell. No issues on older devices
> > [1]. Bard Liao and I reproduced the same results on different boards.
> > 
> > We'll need to find someone with direct device access to provide more
> > information on the problem, remote testing without ssh is a
> > self-negating proposition.
> > 
> > Is there a dependency on other patches? Our tests are still based on
> > 6.7.0-rc3 due to other upstream issues we're currently working through.
> 
> The only behavior change I can imagine with this patch is that
> ->is_visble() callbacks get called extra times for named attribute
> groups.
> 
> ...or if an is_visible() callback was inadvertantly already using the
> SYSFS_GROUP_INVISIBLE flag in umode_t result.

Are you able to get kernel logs? A before and after with this patch
applied might highlight which attribute does not appreciate the extra
callback...

diff --git a/fs/sysfs/group.c b/fs/sysfs/group.c
index ccb275cdabcb..683c0b10990b 100644
--- a/fs/sysfs/group.c
+++ b/fs/sysfs/group.c
@@ -33,11 +33,17 @@ static void remove_files(struct kernfs_node *parent,
 
 static umode_t __first_visible(const struct attribute_group *grp, struct kobject *kobj)
 {
-       if (grp->attrs && grp->is_visible)
+       if (grp->attrs && grp->is_visible) {
+               pr_info("kobj: %s is_visible: %pS\n", kobj->name,
+                       grp->is_visible);
                return grp->is_visible(kobj, grp->attrs[0], 0);
+       }
 
-       if (grp->bin_attrs && grp->is_bin_visible)
+       if (grp->bin_attrs && grp->is_bin_visible) {
+               pr_info("kobj: %s is_bin_visible: %pS\n", kobj->name,
+                       grp->is_bin_visible);
                return grp->is_bin_visible(kobj, grp->bin_attrs[0], 0);
+       }
 
        return 0;
 }
@@ -62,6 +68,8 @@ static int create_files(struct kernfs_node *parent, struct kobject *kobj,
                        if (update)
                                kernfs_remove_by_name(parent, (*attr)->name);
                        if (grp->is_visible) {
+                               pr_info("kobj: %s is_visible: %pS\n",
+                                       kobj->name, grp->is_visible);
                                mode = grp->is_visible(kobj, *attr, i);
                                mode &= ~SYSFS_GROUP_INVISIBLE;
                                if (!mode)
@@ -92,6 +100,8 @@ static int create_files(struct kernfs_node *parent, struct kobject *kobj,
                                kernfs_remove_by_name(parent,
                                                (*bin_attr)->attr.name);
                        if (grp->is_bin_visible) {
+                               pr_info("kobj: %s is_bin_visible: %pS\n",
+                                       kobj->name, grp->is_bin_visible);
                                mode = grp->is_bin_visible(kobj, *bin_attr, i);
                                mode &= ~SYSFS_GROUP_INVISIBLE;
                                if (!mode)


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [PATCH 2/6] soundwire: sysfs: move sdw_slave_dev_attr_group into the existing list of groups
  2024-01-31  7:12     ` Pierre-Louis Bossart
@ 2024-02-01 14:56       ` Greg Kroah-Hartman
  0 siblings, 0 replies; 23+ messages in thread
From: Greg Kroah-Hartman @ 2024-02-01 14:56 UTC (permalink / raw)
  To: Pierre-Louis Bossart
  Cc: Dan Williams, alsa-devel, linux-kernel, Vinod Koul, Bard Liao,
	Sanyog Kale

On Wed, Jan 31, 2024 at 08:12:10AM +0100, Pierre-Louis Bossart wrote:
> 
> > Makes sense. I won't say "looks good" as this file has "slave" all over
> > the place, but I checked and it entered the kernel just before the
> > CodingStyle changed.
> 
> SoundWire 1.2.1 introduced the terms "Manager" and "Peripheral", I had a
> patchset to rename everything maybe two years ago already but it's been
> difficult to add without getting in the way of development and backports.

Don't worry about backports for stable, we can handle that.  Development
for fixes or changes should NEVER worry about stable kernels, worst
case, we can just take all of the same changes into them, no problem.

> Maybe a gradual replacement makes more sense, not sure how to go about this.

Just rename it all.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 0/7] Soundwire: clean up sysfs group creation
  2024-01-31 13:04 ` [PATCH 0/7] Soundwire: clean up sysfs group creation Vinod Koul
@ 2024-03-27  8:13   ` Greg Kroah-Hartman
  2024-03-27 12:51     ` Vinod Koul
  0 siblings, 1 reply; 23+ messages in thread
From: Greg Kroah-Hartman @ 2024-03-27  8:13 UTC (permalink / raw)
  To: Vinod Koul
  Cc: alsa-devel, linux-kernel, Dan Williams, Bard Liao,
	Pierre-Louis Bossart, Sanyog Kale

On Wed, Jan 31, 2024 at 06:34:15PM +0530, Vinod Koul wrote:
> On 30-01-24, 10:46, Greg Kroah-Hartman wrote:
> > Note, this is a redone version of a very old series I wrote back in
> > 2022:
> > 	https://lore.kernel.org/r/20220824135951.3604059-1-gregkh@linuxfoundation.org
> > but everyone has forgotten about it now, and I've reworked it, so I'm
> > considering it a "new" version, and not v2.
> > 
> > Here's a series that adds the functionality to the driver core to hide
> > entire attribute groups, in a much saner way than we have attempted in
> > the past (i.e. dynamically figuring it out.)  Many thanks to Dan for
> > this patch.  I'll also be taking this into my driver-core branch and
> > creating a stable tag for anyone else to pull from to get it into their
> > trees, as I think it will want to be in many for this development cycle.
> > 
> > After the driver core change, there's cleanups to the soundwire core for
> > how the attribute groups are created, to remove the "manual" creation of
> > them, and allow the driver core to create them correctly, as needed,
> > when needed, which makes things much smaller for the soundwire code to
> > manage.
> 
> The series lgtm, having the core handle these would be good. I will wait
> couple of days for people to test this and give a t-b and apply.
> I hope it is okay if patch1 goes thru sdw tree?

patch 1 is now in Linus's tree, so the remaining ones can go through the
your tree now if you want.  Or I can resend them if needed, just let me
know.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 0/7] Soundwire: clean up sysfs group creation
  2024-03-27  8:13   ` Greg Kroah-Hartman
@ 2024-03-27 12:51     ` Vinod Koul
  2024-03-28 12:23       ` Mukunda,Vijendar
  0 siblings, 1 reply; 23+ messages in thread
From: Vinod Koul @ 2024-03-27 12:51 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: alsa-devel, linux-kernel, Dan Williams, Bard Liao,
	Pierre-Louis Bossart, Sanyog Kale

On 27-03-24, 09:13, Greg Kroah-Hartman wrote:
> On Wed, Jan 31, 2024 at 06:34:15PM +0530, Vinod Koul wrote:
> > On 30-01-24, 10:46, Greg Kroah-Hartman wrote:
> > > Note, this is a redone version of a very old series I wrote back in
> > > 2022:
> > > 	https://lore.kernel.org/r/20220824135951.3604059-1-gregkh@linuxfoundation.org
> > > but everyone has forgotten about it now, and I've reworked it, so I'm
> > > considering it a "new" version, and not v2.
> > > 
> > > Here's a series that adds the functionality to the driver core to hide
> > > entire attribute groups, in a much saner way than we have attempted in
> > > the past (i.e. dynamically figuring it out.)  Many thanks to Dan for
> > > this patch.  I'll also be taking this into my driver-core branch and
> > > creating a stable tag for anyone else to pull from to get it into their
> > > trees, as I think it will want to be in many for this development cycle.
> > > 
> > > After the driver core change, there's cleanups to the soundwire core for
> > > how the attribute groups are created, to remove the "manual" creation of
> > > them, and allow the driver core to create them correctly, as needed,
> > > when needed, which makes things much smaller for the soundwire code to
> > > manage.
> > 
> > The series lgtm, having the core handle these would be good. I will wait
> > couple of days for people to test this and give a t-b and apply.
> > I hope it is okay if patch1 goes thru sdw tree?
> 
> patch 1 is now in Linus's tree, so the remaining ones can go through the
> your tree now if you want.  Or I can resend them if needed, just let me
> know.

Great, I was about to ask about this. If there is no conflicts I can
pick this series (looking at folks for giving me a t-b)

-- 
~Vinod

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 0/7] Soundwire: clean up sysfs group creation
  2024-03-27 12:51     ` Vinod Koul
@ 2024-03-28 12:23       ` Mukunda,Vijendar
  0 siblings, 0 replies; 23+ messages in thread
From: Mukunda,Vijendar @ 2024-03-28 12:23 UTC (permalink / raw)
  To: Vinod Koul, Greg Kroah-Hartman
  Cc: alsa-devel, linux-kernel, Dan Williams, Bard Liao,
	Pierre-Louis Bossart, Sanyog Kale, Dommati, Sunil-kumar

On 27/03/24 18:21, Vinod Koul wrote:
> On 27-03-24, 09:13, Greg Kroah-Hartman wrote:
>> On Wed, Jan 31, 2024 at 06:34:15PM +0530, Vinod Koul wrote:
>>> On 30-01-24, 10:46, Greg Kroah-Hartman wrote:
>>>> Note, this is a redone version of a very old series I wrote back in
>>>> 2022:
>>>> 	https://lore.kernel.org/r/20220824135951.3604059-1-gregkh@linuxfoundation.org
>>>> but everyone has forgotten about it now, and I've reworked it, so I'm
>>>> considering it a "new" version, and not v2.
>>>>
>>>> Here's a series that adds the functionality to the driver core to hide
>>>> entire attribute groups, in a much saner way than we have attempted in
>>>> the past (i.e. dynamically figuring it out.)  Many thanks to Dan for
>>>> this patch.  I'll also be taking this into my driver-core branch and
>>>> creating a stable tag for anyone else to pull from to get it into their
>>>> trees, as I think it will want to be in many for this development cycle.
>>>>
>>>> After the driver core change, there's cleanups to the soundwire core for
>>>> how the attribute groups are created, to remove the "manual" creation of
>>>> them, and allow the driver core to create them correctly, as needed,
>>>> when needed, which makes things much smaller for the soundwire code to
>>>> manage.
>>> The series lgtm, having the core handle these would be good. I will wait
>>> couple of days for people to test this and give a t-b and apply.
>>> I hope it is okay if patch1 goes thru sdw tree?
>> patch 1 is now in Linus's tree, so the remaining ones can go through the
>> your tree now if you want.  Or I can resend them if needed, just let me
>> know.
> Great, I was about to ask about this. If there is no conflicts I can
> pick this series (looking at folks for giving me a t-b)
Applied this patch series on top of soundwire git tree and validated SoundWire
stack on AMD platform using command line alsa utils. All use cases are working
fine. Tested-By: Vijendar Mukunda <Vijendar.Mukunda@amd.com>

>


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (subset) [PATCH 0/7] Soundwire: clean up sysfs group creation
  2024-01-30 18:46 [PATCH 0/7] Soundwire: clean up sysfs group creation Greg Kroah-Hartman
                   ` (6 preceding siblings ...)
  2024-01-31 13:04 ` [PATCH 0/7] Soundwire: clean up sysfs group creation Vinod Koul
@ 2024-03-28 18:15 ` Vinod Koul
  7 siblings, 0 replies; 23+ messages in thread
From: Vinod Koul @ 2024-03-28 18:15 UTC (permalink / raw)
  To: alsa-devel, Greg Kroah-Hartman
  Cc: linux-kernel, Dan Williams, Bard Liao, Pierre-Louis Bossart, Sanyog Kale


On Tue, 30 Jan 2024 10:46:26 -0800, Greg Kroah-Hartman wrote:
> Note, this is a redone version of a very old series I wrote back in
> 2022:
> 	https://lore.kernel.org/r/20220824135951.3604059-1-gregkh@linuxfoundation.org
> but everyone has forgotten about it now, and I've reworked it, so I'm
> considering it a "new" version, and not v2.
> 
> Here's a series that adds the functionality to the driver core to hide
> entire attribute groups, in a much saner way than we have attempted in
> the past (i.e. dynamically figuring it out.)  Many thanks to Dan for
> this patch.  I'll also be taking this into my driver-core branch and
> creating a stable tag for anyone else to pull from to get it into their
> trees, as I think it will want to be in many for this development cycle.
> 
> [...]

Applied, thanks!

[2/6] soundwire: sysfs: move sdw_slave_dev_attr_group into the existing list of groups
      commit: b1b11bb07898b7e0313438734c310100219e676f
[3/6] soundwire: sysfs: cleanup the logic for creating the dp0 sysfs attributes
      commit: 3ee43f7cc9841cdf3f2bec2de4b1e729fd17e303
[4/6] soundwire: sysfs: have the driver core handle the creation of the device groups
      commit: fc7e56017b51482f1b9da2e778eedb4bd1deb6b3
[5/6] soundwire: sysfs: remove sdw_slave_sysfs_init()
      commit: f88c1afe338edbcbfd23743742c45581075fb86c
[6/6] soundwire: sysfs: remove unneeded ATTRIBUTE_GROUPS() comments
      commit: 91c4dd2e5c9066577960c7eef7dd8e699220c85e

Best regards,
-- 
~Vinod



^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2024-03-28 18:15 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-30 18:46 [PATCH 0/7] Soundwire: clean up sysfs group creation Greg Kroah-Hartman
2024-01-30 18:46 ` [PATCH 1/6] sysfs: Introduce a mechanism to hide static attribute_groups Greg Kroah-Hartman
2024-01-31 13:05   ` Pierre-Louis Bossart
2024-01-31 16:30     ` Greg Kroah-Hartman
2024-01-31 18:08     ` Dan Williams
2024-01-31 19:43       ` Dan Williams
2024-01-30 18:46 ` [PATCH 2/6] soundwire: sysfs: move sdw_slave_dev_attr_group into the existing list of groups Greg Kroah-Hartman
2024-01-31  5:20   ` Dan Williams
2024-01-31  7:12     ` Pierre-Louis Bossart
2024-02-01 14:56       ` Greg Kroah-Hartman
2024-01-30 18:46 ` [PATCH 3/6] soundwire: sysfs: cleanup the logic for creating the dp0 sysfs attributes Greg Kroah-Hartman
2024-01-31  5:32   ` Dan Williams
2024-01-30 18:46 ` [PATCH 4/6] soundwire: sysfs: have the driver core handle the creation of the device groups Greg Kroah-Hartman
2024-01-31  5:37   ` Dan Williams
2024-01-30 18:46 ` [PATCH 5/6] soundwire: sysfs: remove sdw_slave_sysfs_init() Greg Kroah-Hartman
2024-01-31  5:39   ` Dan Williams
2024-01-30 18:46 ` [PATCH 6/6] soundwire: sysfs: remove unneeded ATTRIBUTE_GROUPS() comments Greg Kroah-Hartman
2024-01-31  5:41   ` Dan Williams
2024-01-31 13:04 ` [PATCH 0/7] Soundwire: clean up sysfs group creation Vinod Koul
2024-03-27  8:13   ` Greg Kroah-Hartman
2024-03-27 12:51     ` Vinod Koul
2024-03-28 12:23       ` Mukunda,Vijendar
2024-03-28 18:15 ` (subset) " Vinod Koul

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.