Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 28812fe1 authored by Andi Kleen's avatar Andi Kleen Committed by Greg Kroah-Hartman
Browse files

driver-core: Add attribute argument to class_attribute show/store



Passing the attribute to the low level IO functions allows all kinds
of cleanups, by sharing low level IO code without requiring
an own function for every piece of data.

Also drivers can extend the attributes with own data fields
and use that in the low level function.

This makes the class attributes the same as sysdev_class attributes
and plain attributes.

This will allow further cleanups in drivers.

Full tree sweep converting all users.

Signed-off-by: default avatarAndi Kleen <ak@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 5fbcae57
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -31,7 +31,7 @@ static ssize_t class_attr_show(struct kobject *kobj, struct attribute *attr,
	ssize_t ret = -EIO;
	ssize_t ret = -EIO;


	if (class_attr->show)
	if (class_attr->show)
		ret = class_attr->show(cp->class, buf);
		ret = class_attr->show(cp->class, class_attr, buf);
	return ret;
	return ret;
}
}


@@ -43,7 +43,7 @@ static ssize_t class_attr_store(struct kobject *kobj, struct attribute *attr,
	ssize_t ret = -EIO;
	ssize_t ret = -EIO;


	if (class_attr->store)
	if (class_attr->store)
		ret = class_attr->store(cp->class, buf, count);
		ret = class_attr->store(cp->class, class_attr, buf, count);
	return ret;
	return ret;
}
}


+6 −2
Original line number Original line Diff line number Diff line
@@ -79,13 +79,17 @@ void unregister_cpu(struct cpu *cpu)
}
}


#ifdef CONFIG_ARCH_CPU_PROBE_RELEASE
#ifdef CONFIG_ARCH_CPU_PROBE_RELEASE
static ssize_t cpu_probe_store(struct class *class, const char *buf,
static ssize_t cpu_probe_store(struct class *class,
				struct class_attribute *attr,
				const char *buf,
			       size_t count)
			       size_t count)
{
{
	return arch_cpu_probe(buf, count);
	return arch_cpu_probe(buf, count);
}
}


static ssize_t cpu_release_store(struct class *class, const char *buf,
static ssize_t cpu_release_store(struct class *class,
				struct class_attribute *attr,
				const char *buf,
				 size_t count)
				 size_t count)
{
{
	return arch_cpu_release(buf, count);
	return arch_cpu_release(buf, count);
+6 −2
Original line number Original line Diff line number Diff line
@@ -69,7 +69,9 @@ fw_load_abort(struct firmware_priv *fw_priv)
}
}


static ssize_t
static ssize_t
firmware_timeout_show(struct class *class, char *buf)
firmware_timeout_show(struct class *class,
		      struct class_attribute *attr,
		      char *buf)
{
{
	return sprintf(buf, "%d\n", loading_timeout);
	return sprintf(buf, "%d\n", loading_timeout);
}
}
@@ -87,7 +89,9 @@ firmware_timeout_show(struct class *class, char *buf)
 *	Note: zero means 'wait forever'.
 *	Note: zero means 'wait forever'.
 **/
 **/
static ssize_t
static ssize_t
firmware_timeout_store(struct class *class, const char *buf, size_t count)
firmware_timeout_store(struct class *class,
			struct class_attribute *attr,
			const char *buf, size_t count)
{
{
	loading_timeout = simple_strtol(buf, NULL, 10);
	loading_timeout = simple_strtol(buf, NULL, 10);
	if (loading_timeout < 0)
	if (loading_timeout < 0)
+8 −3
Original line number Original line Diff line number Diff line
@@ -331,7 +331,8 @@ static int block_size_init(void)
 */
 */
#ifdef CONFIG_ARCH_MEMORY_PROBE
#ifdef CONFIG_ARCH_MEMORY_PROBE
static ssize_t
static ssize_t
memory_probe_store(struct class *class, const char *buf, size_t count)
memory_probe_store(struct class *class, struct class_attribute *attr,
		   const char *buf, size_t count)
{
{
	u64 phys_addr;
	u64 phys_addr;
	int nid;
	int nid;
@@ -368,7 +369,9 @@ static inline int memory_probe_init(void)


/* Soft offline a page */
/* Soft offline a page */
static ssize_t
static ssize_t
store_soft_offline_page(struct class *class, const char *buf, size_t count)
store_soft_offline_page(struct class *class,
			struct class_attribute *attr,
			const char *buf, size_t count)
{
{
	int ret;
	int ret;
	u64 pfn;
	u64 pfn;
@@ -385,7 +388,9 @@ store_soft_offline_page(struct class *class, const char *buf, size_t count)


/* Forcibly offline a page, including killing processes. */
/* Forcibly offline a page, including killing processes. */
static ssize_t
static ssize_t
store_hard_offline_page(struct class *class, const char *buf, size_t count)
store_hard_offline_page(struct class *class,
			struct class_attribute *attr,
			const char *buf, size_t count)
{
{
	int ret;
	int ret;
	u64 pfn;
	u64 pfn;
+9 −3
Original line number Original line Diff line number Diff line
@@ -476,7 +476,9 @@ static void class_osdblk_release(struct class *cls)
	kfree(cls);
	kfree(cls);
}
}


static ssize_t class_osdblk_list(struct class *c, char *data)
static ssize_t class_osdblk_list(struct class *c,
				struct class_attribute *attr,
				char *data)
{
{
	int n = 0;
	int n = 0;
	struct list_head *tmp;
	struct list_head *tmp;
@@ -500,7 +502,9 @@ static ssize_t class_osdblk_list(struct class *c, char *data)
	return n;
	return n;
}
}


static ssize_t class_osdblk_add(struct class *c, const char *buf, size_t count)
static ssize_t class_osdblk_add(struct class *c,
				struct class_attribute *attr,
				const char *buf, size_t count)
{
{
	struct osdblk_device *osdev;
	struct osdblk_device *osdev;
	ssize_t rc;
	ssize_t rc;
@@ -592,7 +596,9 @@ err_out_mod:
	return rc;
	return rc;
}
}


static ssize_t class_osdblk_remove(struct class *c, const char *buf,
static ssize_t class_osdblk_remove(struct class *c,
					struct class_attribute *attr,
					const char *buf,
					size_t count)
					size_t count)
{
{
	struct osdblk_device *osdev = NULL;
	struct osdblk_device *osdev = NULL;
Loading