aboutsummaryrefslogtreecommitdiffstats
path: root/driver
diff options
authorGreg Kroah-Hartman <gregkh@suse.de>2007-11-02 11:43:47 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2007-11-02 11:43:47 -0700
commit73374b594ef505a9a38e275697f452d0e2800c36 (patch)
treead29a13145958979edb24d71f5114e710221fb43 /driver
parent8962598dad2173087d9dc280f62e882a6d6fa9d0 (diff)
downloadpatches-73374b594ef505a9a38e275697f452d0e2800c36.tar.gz
add 2 patches from Kay
Diffstat (limited to 'driver')
-rw-r--r--driver/kobject-kobj_attribute-handling.patch79
-rw-r--r--driver/kset-convert-to-kobj_sysfs_ops.patch278
2 files changed, 357 insertions, 0 deletions
diff --git a/driver/kobject-kobj_attribute-handling.patch b/driver/kobject-kobj_attribute-handling.patch
new file mode 100644
index 00000000000000..b5d6563e4e9d8c
--- /dev/null
+++ b/driver/kobject-kobj_attribute-handling.patch
@@ -0,0 +1,79 @@
+From kay.sievers@vrfy.org Fri Nov 2 08:38:32 2007
+From: Kay Sievers <kay.sievers@vrfy.org>
+Date: Fri, 02 Nov 2007 13:47:53 +0100
+Subject: Driver Core: add kobj_attribute handling
+Message-ID: <1194007673.2194.10.camel@lov.site>
+
+From: Kay Sievers <kay.sievers@vrfy.org>
+
+Add kobj_sysfs_ops to replace subsys_sysfs_ops. There is no
+need for special kset operations, we want to be able to use
+simple attribute operations at any kobject, not only ksets.
+
+The whole concept of any default sysfs attribute operations
+will go away with the upcoming removal of subsys_sysfs_ops.
+
+Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+---
+ include/linux/kobject.h | 10 ++++++++++
+ lib/kobject.c | 29 +++++++++++++++++++++++++++++
+ 2 files changed, 39 insertions(+)
+
+--- a/include/linux/kobject.h
++++ b/include/linux/kobject.h
+@@ -119,6 +119,16 @@ struct kset_uevent_ops {
+ struct kobj_uevent_env *env);
+ };
+
++struct kobj_attribute {
++ struct attribute attr;
++ ssize_t (*show)(struct kobject *kobj, struct kobj_attribute *attr,
++ char *buf);
++ ssize_t (*store)(struct kobject *kobj, struct kobj_attribute *attr,
++ const char *buf, size_t count);
++};
++
++extern struct sysfs_ops kobj_sysfs_ops;
++
+ /**
+ * struct kset - a set of kobjects of a specific type, belonging to a specific subsystem.
+ *
+--- a/lib/kobject.c
++++ b/lib/kobject.c
+@@ -486,6 +486,35 @@ void kobject_put(struct kobject * kobj)
+ kref_put(&kobj->kref, kobject_release);
+ }
+
++/* default kobject attribute operations */
++static ssize_t kobj_attr_show(struct kobject *kobj, struct attribute *attr,
++ char *buf)
++{
++ struct kobj_attribute *kattr;
++ ssize_t ret = -EIO;
++
++ kattr = container_of(attr, struct kobj_attribute, attr);
++ if (kattr->show)
++ ret = kattr->show(kobj, kattr, buf);
++ return ret;
++}
++
++static ssize_t kobj_attr_store(struct kobject *kobj, struct attribute *attr,
++ const char *buf, size_t count)
++{
++ struct kobj_attribute *kattr;
++ ssize_t ret = -EIO;
++
++ kattr = container_of(attr, struct kobj_attribute, attr);
++ if (kattr->store)
++ ret = kattr->store(kobj, kattr, buf, count);
++ return ret;
++}
++
++struct sysfs_ops kobj_sysfs_ops = {
++ .show = kobj_attr_show,
++ .store = kobj_attr_store,
++};
+
+ static void dir_release(struct kobject *kobj)
+ {
diff --git a/driver/kset-convert-to-kobj_sysfs_ops.patch b/driver/kset-convert-to-kobj_sysfs_ops.patch
new file mode 100644
index 00000000000000..18eb966dc93332
--- /dev/null
+++ b/driver/kset-convert-to-kobj_sysfs_ops.patch
@@ -0,0 +1,278 @@
+From kay.sievers@vrfy.org Fri Nov 2 08:38:34 2007
+From: Kay Sievers <kay.sievers@vrfy.org>
+Date: Fri, 02 Nov 2007 13:47:53 +0100
+Subject: Driver Core: switch all dynamic ksets to kobj_sysfs_ops
+Message-ID: <1194007673.2194.11.camel@lov.site>
+
+From: Kay Sievers <kay.sievers@vrfy.org>
+
+Switch all dynamically created ksets, that export simple attributes,
+to kobj_attribute from subsys_attribute. Struct subsys_attribute will
+be removed.
+
+Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
+Cc: Mike Halcrow <mhalcrow@us.ibm.com>
+Cc: Phillip Hellewell <phillip@hellewell.homeip.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+---
+ fs/ecryptfs/main.c | 10 ++++++----
+ kernel/ksysfs.c | 35 +++++++++++++++++++++--------------
+ kernel/power/disk.c | 18 ++++++++++++------
+ kernel/power/main.c | 12 ++++++++----
+ kernel/power/power.h | 2 +-
+ lib/kobject.c | 8 ++++----
+ 6 files changed, 52 insertions(+), 33 deletions(-)
+
+--- a/fs/ecryptfs/main.c
++++ b/fs/ecryptfs/main.c
+@@ -732,12 +732,13 @@ static int ecryptfs_init_kmem_caches(voi
+
+ static struct kset *ecryptfs_kset;
+
+-static ssize_t version_show(struct kset *kset, char *buff)
++static ssize_t version_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buff)
+ {
+ return snprintf(buff, PAGE_SIZE, "%d\n", ECRYPTFS_VERSIONING_MASK);
+ }
+
+-static struct subsys_attribute version_attr = __ATTR_RO(version);
++static struct kobj_attribute version_attr = __ATTR_RO(version);
+
+ static struct ecryptfs_version_str_map_elem {
+ u32 flag;
+@@ -751,7 +752,8 @@ static struct ecryptfs_version_str_map_e
+ {ECRYPTFS_VERSIONING_MULTKEY, "multiple keys per file"}
+ };
+
+-static ssize_t version_str_show(struct kset *kset, char *buff)
++static ssize_t version_str_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buff)
+ {
+ int i;
+ int remaining = PAGE_SIZE;
+@@ -778,7 +780,7 @@ out:
+ return total_written;
+ }
+
+-static struct subsys_attribute version_attr_str = __ATTR_RO(version_str);
++static struct kobj_attribute version_attr_str = __ATTR_RO(version_str);
+
+ static struct attribute *attributes[] = {
+ &version_attr.attr,
+--- a/kernel/ksysfs.c
++++ b/kernel/ksysfs.c
+@@ -18,30 +18,34 @@
+ #include <linux/err.h>
+
+ #define KERNEL_ATTR_RO(_name) \
+-static struct subsys_attribute _name##_attr = __ATTR_RO(_name)
++static struct kobj_attribute _name##_attr = __ATTR_RO(_name)
+
+ #define KERNEL_ATTR_RW(_name) \
+-static struct subsys_attribute _name##_attr = \
++static struct kobj_attribute _name##_attr = \
+ __ATTR(_name, 0644, _name##_show, _name##_store)
+
+ #if defined(CONFIG_HOTPLUG) && defined(CONFIG_NET)
+ /* current uevent sequence number */
+-static ssize_t uevent_seqnum_show(struct kset *kset, char *page)
++static ssize_t uevent_seqnum_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
+ {
+- return sprintf(page, "%llu\n", (unsigned long long)uevent_seqnum);
++ return sprintf(buf, "%llu\n", (unsigned long long)uevent_seqnum);
+ }
+ KERNEL_ATTR_RO(uevent_seqnum);
+
+ /* uevent helper program, used during early boo */
+-static ssize_t uevent_helper_show(struct kset *kset, char *page)
++static ssize_t uevent_helper_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
+ {
+- return sprintf(page, "%s\n", uevent_helper);
++ return sprintf(buf, "%s\n", uevent_helper);
+ }
+-static ssize_t uevent_helper_store(struct kset *kset, const char *page, size_t count)
++static ssize_t uevent_helper_store(struct kobject *kobj,
++ struct kobj_attribute *attr,
++ const char *buf, size_t count)
+ {
+ if (count+1 > UEVENT_HELPER_PATH_LEN)
+ return -ENOENT;
+- memcpy(uevent_helper, page, count);
++ memcpy(uevent_helper, buf, count);
+ uevent_helper[count] = '\0';
+ if (count && uevent_helper[count-1] == '\n')
+ uevent_helper[count-1] = '\0';
+@@ -51,21 +55,24 @@ KERNEL_ATTR_RW(uevent_helper);
+ #endif
+
+ #ifdef CONFIG_KEXEC
+-static ssize_t kexec_loaded_show(struct kset *kset, char *page)
++static ssize_t kexec_loaded_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
+ {
+- return sprintf(page, "%d\n", !!kexec_image);
++ return sprintf(buf, "%d\n", !!kexec_image);
+ }
+ KERNEL_ATTR_RO(kexec_loaded);
+
+-static ssize_t kexec_crash_loaded_show(struct kset *kset, char *page)
++static ssize_t kexec_crash_loaded_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
+ {
+- return sprintf(page, "%d\n", !!kexec_crash_image);
++ return sprintf(buf, "%d\n", !!kexec_crash_image);
+ }
+ KERNEL_ATTR_RO(kexec_crash_loaded);
+
+-static ssize_t vmcoreinfo_show(struct kset *kset, char *page)
++static ssize_t vmcoreinfo_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
+ {
+- return sprintf(page, "%lx %x\n",
++ return sprintf(buf, "%lx %x\n",
+ paddr_vmcoreinfo_note(),
+ (unsigned int)vmcoreinfo_max_size);
+ }
+--- a/kernel/power/disk.c
++++ b/kernel/power/disk.c
+@@ -557,7 +557,8 @@ static const char * const hibernation_mo
+ * supports it (as determined by having hibernation_ops).
+ */
+
+-static ssize_t disk_show(struct kset *kset, char *buf)
++static ssize_t disk_show(struct kobject *kobj, struct kobj_attribut *attr,
++ char *buf)
+ {
+ int i;
+ char *start = buf;
+@@ -587,7 +588,8 @@ static ssize_t disk_show(struct kset *ks
+ }
+
+
+-static ssize_t disk_store(struct kset *kset, const char *buf, size_t n)
++static ssize_t disk_store(struct kobject *kobj, struct kobj_attribut *attr,
++ const char *buf, size_t n)
+ {
+ int error = 0;
+ int i;
+@@ -632,13 +634,15 @@ static ssize_t disk_store(struct kset *k
+
+ power_attr(disk);
+
+-static ssize_t resume_show(struct kset *kset, char *buf)
++static ssize_t resume_show(struct kobject *kobj, struct kobj_attribut *attr,
++ char *buf)
+ {
+ return sprintf(buf,"%d:%d\n", MAJOR(swsusp_resume_device),
+ MINOR(swsusp_resume_device));
+ }
+
+-static ssize_t resume_store(struct kset *kset, const char *buf, size_t n)
++static ssize_t resume_store(struct kobject *kobj, struct kobj_attribut *attr,
++ const char *buf, size_t n)
+ {
+ unsigned int maj, min;
+ dev_t res;
+@@ -664,12 +668,14 @@ static ssize_t resume_store(struct kset
+
+ power_attr(resume);
+
+-static ssize_t image_size_show(struct kset *kset, char *buf)
++static ssize_t image_size_show(struct kobject *kobj, struct kobj_attribut *attr,
++ char *buf)
+ {
+ return sprintf(buf, "%lu\n", image_size);
+ }
+
+-static ssize_t image_size_store(struct kset *kset, const char *buf, size_t n)
++static ssize_t image_size_store(struct kobject *kobj, struct kobj_attribut *attr,
++ const char *buf, size_t n)
+ {
+ unsigned long size;
+
+--- a/kernel/power/main.c
++++ b/kernel/power/main.c
+@@ -287,7 +287,8 @@ struct kset *power_kset;
+ * proper enumerated value, and initiates a suspend transition.
+ */
+
+-static ssize_t state_show(struct kset *kset, char *buf)
++static ssize_t state_show(struct kobject *kobj, struct kobj_attribute *attr,
++ char *buf)
+ {
+ char *s = buf;
+ #ifdef CONFIG_SUSPEND
+@@ -308,7 +309,8 @@ static ssize_t state_show(struct kset *k
+ return (s - buf);
+ }
+
+-static ssize_t state_store(struct kset *kset, const char *buf, size_t n)
++static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr,
++ const char *buf, size_t n)
+ {
+ #ifdef CONFIG_SUSPEND
+ suspend_state_t state = PM_SUSPEND_STANDBY;
+@@ -345,13 +347,15 @@ power_attr(state);
+ #ifdef CONFIG_PM_TRACE
+ int pm_trace_enabled;
+
+-static ssize_t pm_trace_show(struct kset *kset, char *buf)
++static ssize_t pm_trace_show(struct kobject *kobj, struct kobj_attribute *attr,
++ char *buf)
+ {
+ return sprintf(buf, "%d\n", pm_trace_enabled);
+ }
+
+ static ssize_t
+-pm_trace_store(struct kset *kset, const char *buf, size_t n)
++pm_trace_store(struct kobject *kobj, struct kobj_attribute *attr,
++ const char *buf, size_t n)
+ {
+ int val;
+
+--- a/kernel/power/power.h
++++ b/kernel/power/power.h
+@@ -54,7 +54,7 @@ extern int pfn_is_nosave(unsigned long);
+ extern struct mutex pm_mutex;
+
+ #define power_attr(_name) \
+-static struct subsys_attribute _name##_attr = { \
++static struct kobj_attribute _name##_attr = { \
+ .attr = { \
+ .name = __stringify(_name), \
+ .mode = 0644, \
+--- a/lib/kobject.c
++++ b/lib/kobject.c
+@@ -522,9 +522,8 @@ static void dir_release(struct kobject *
+ }
+
+ static struct kobj_type dir_ktype = {
++ .sysfs_ops = &kobj_sysfs_ops,
+ .release = dir_release,
+- .sysfs_ops = NULL,
+- .default_attrs = NULL,
+ };
+
+ /**
+@@ -697,7 +696,8 @@ static void kset_release(struct kobject
+ kfree(kset);
+ }
+
+-static struct kobj_type kset_type = {
++static struct kobj_type kset_ktype = {
++ .sysfs_ops = &kobj_sysfs_ops,
+ .release = kset_release,
+ };
+
+@@ -739,7 +739,7 @@ static struct kset *kset_create(const ch
+ kset->uevent_ops = uevent_ops;
+ kset->kobj.parent = parent_kobj;
+ kset->kobj.kset = parent_kset;
+- kset->kobj.ktype = &kset_type;
++ kset->kobj.ktype = &kset_ktype;
+
+ return kset;
+ }