diff options
| author | Greg Kroah-Hartman <gregkh@suse.de> | 2007-11-02 11:43:47 -0700 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-11-02 11:43:47 -0700 |
| commit | 73374b594ef505a9a38e275697f452d0e2800c36 (patch) | |
| tree | ad29a13145958979edb24d71f5114e710221fb43 /driver | |
| parent | 8962598dad2173087d9dc280f62e882a6d6fa9d0 (diff) | |
| download | patches-73374b594ef505a9a38e275697f452d0e2800c36.tar.gz | |
add 2 patches from Kay
Diffstat (limited to 'driver')
| -rw-r--r-- | driver/kobject-kobj_attribute-handling.patch | 79 | ||||
| -rw-r--r-- | driver/kset-convert-to-kobj_sysfs_ops.patch | 278 |
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; + } |
