From: Jiri Olsa <jolsa@kernel.org>
To: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: lkml <linux-kernel@vger.kernel.org>,
Ingo Molnar <mingo@kernel.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Andi Kleen <ak@linux.intel.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: [PATCH 1/8] sysfs: Add sysfs_update_groups function
Date: Sat, 4 May 2019 14:52:00 +0200 [thread overview]
Message-ID: <20190504125207.24662-2-jolsa@kernel.org> (raw)
In-Reply-To: <20190504125207.24662-1-jolsa@kernel.org>
Adding sysfs_update_groups function to update
multiple groups.
TODO:
I'm not sure how to handle error path in here,
currently it removes the whole updated group
together with already existing (not updated)
attributes.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
fs/sysfs/group.c | 43 ++++++++++++++++++++++++++++---------------
include/linux/sysfs.h | 2 ++
2 files changed, 30 insertions(+), 15 deletions(-)
diff --git a/fs/sysfs/group.c b/fs/sysfs/group.c
index 57038604d4a8..8fff9673dd5f 100644
--- a/fs/sysfs/group.c
+++ b/fs/sysfs/group.c
@@ -175,6 +175,26 @@ int sysfs_create_group(struct kobject *kobj,
}
EXPORT_SYMBOL_GPL(sysfs_create_group);
+static int internal_create_groups(struct kobject *kobj, int update,
+ const struct attribute_group **groups)
+{
+ int error = 0;
+ int i;
+
+ if (!groups)
+ return 0;
+
+ for (i = 0; groups[i]; i++) {
+ error = internal_create_group(kobj, update, groups[i]);
+ if (error) {
+ while (--i >= 0)
+ sysfs_remove_group(kobj, groups[i]);
+ break;
+ }
+ }
+ return error;
+}
+
/**
* sysfs_create_groups - given a directory kobject, create a bunch of attribute groups
* @kobj: The kobject to create the group on
@@ -191,24 +211,17 @@ EXPORT_SYMBOL_GPL(sysfs_create_group);
int sysfs_create_groups(struct kobject *kobj,
const struct attribute_group **groups)
{
- int error = 0;
- int i;
-
- if (!groups)
- return 0;
-
- for (i = 0; groups[i]; i++) {
- error = sysfs_create_group(kobj, groups[i]);
- if (error) {
- while (--i >= 0)
- sysfs_remove_group(kobj, groups[i]);
- break;
- }
- }
- return error;
+ return internal_create_groups(kobj, 0, groups);
}
EXPORT_SYMBOL_GPL(sysfs_create_groups);
+int sysfs_update_groups(struct kobject *kobj,
+ const struct attribute_group **groups)
+{
+ return internal_create_groups(kobj, 1, groups);
+}
+EXPORT_SYMBOL_GPL(sysfs_update_groups);
+
/**
* sysfs_update_group - given a directory kobject, update an attribute group
* @kobj: The kobject to update the group on
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h
index 786816cf4aa5..d13db254fb99 100644
--- a/include/linux/sysfs.h
+++ b/include/linux/sysfs.h
@@ -268,6 +268,8 @@ int __must_check sysfs_create_group(struct kobject *kobj,
const struct attribute_group *grp);
int __must_check sysfs_create_groups(struct kobject *kobj,
const struct attribute_group **groups);
+int __must_check sysfs_update_groups(struct kobject *kobj,
+ const struct attribute_group **groups);
int sysfs_update_group(struct kobject *kobj,
const struct attribute_group *grp);
void sysfs_remove_group(struct kobject *kobj,
--
2.20.1
next prev parent reply other threads:[~2019-05-04 12:52 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-04 12:51 [RFC 0/8] perf/x86: Add update attribute groups Jiri Olsa
2019-05-04 12:52 ` Jiri Olsa [this message]
2019-05-04 13:53 ` [PATCH 1/8] sysfs: Add sysfs_update_groups function Greg Kroah-Hartman
2019-05-09 15:23 ` Jiri Olsa
2019-05-04 12:52 ` [PATCH 2/8] perf: Add attr_groups_update into struct pmu Jiri Olsa
2019-05-04 12:52 ` [PATCH 3/8] perf/x86: Get rid of x86_pmu::event_attrs Jiri Olsa
2019-05-04 12:52 ` [PATCH 4/8] perf/x86: Use the new pmu::update_attrs attribute group Jiri Olsa
2019-05-04 12:52 ` [PATCH 5/8] perf/x86: Add is_visible attribute_group callback for base events Jiri Olsa
2019-05-04 12:52 ` [PATCH 6/8] perf/x86: Use update attribute groups for caps Jiri Olsa
2019-05-04 12:52 ` [PATCH 7/8] perf/x86/intel: Use update attributes for skylake format Jiri Olsa
2019-05-04 12:52 ` [PATCH 8/8] perf/x86: Use update attribute groups for default attributes Jiri Olsa
2019-05-04 13:53 ` Greg Kroah-Hartman
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=20190504125207.24662-2-jolsa@kernel.org \
--to=jolsa@kernel.org \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@kernel.org \
--cc=ak@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@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 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.