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

Commit f2d6d2fa authored by Park Ju Hyung's avatar Park Ju Hyung Committed by KakatkarAkshay
Browse files

power_supply: don't allocate attrname



healthd queries this extremely frequently and attrname is allocated
and de-allocated repeatedly.

Use the stack space instead.

Signed-off-by: default avatarPark Ju Hyung <qkrwngud825@gmail.com>
Signed-off-by: default avatarAdam W. Willis <return.of.octobot@gmail.com>
Signed-off-by: default avatarLibXZR <xzr467706992@163.com>
parent 09f84dad
Loading
Loading
Loading
Loading
+9 −25
Original line number Diff line number Diff line
@@ -581,29 +581,12 @@ void power_supply_init_attrs(struct device_type *dev_type)
		__power_supply_attrs[i] = &power_supply_attrs[i].attr;
}

static char *kstruprdup(const char *str, gfp_t gfp)
{
	char *ret, *ustr;

	ustr = ret = kmalloc(strlen(str) + 1, gfp);

	if (!ret)
		return NULL;

	while (*str)
		*ustr++ = toupper(*str++);

	*ustr = 0;

	return ret;
}

int power_supply_uevent(struct device *dev, struct kobj_uevent_env *env)
{
	struct power_supply *psy = dev_get_drvdata(dev);
	int ret = 0, j;
	char *prop_buf;
	char *attrname;
	char attrname[64];

	if (!psy || !psy->desc) {
		dev_dbg(dev, "No power supply yet\n");
@@ -620,7 +603,8 @@ int power_supply_uevent(struct device *dev, struct kobj_uevent_env *env)

	for (j = 0; j < psy->desc->num_properties; j++) {
		struct device_attribute *attr;
		char *line;
		const char *str;
		char *line, *ustr;

		attr = &power_supply_attrs[psy->desc->properties[j]];

@@ -639,14 +623,14 @@ int power_supply_uevent(struct device *dev, struct kobj_uevent_env *env)
		if (line)
			*line = 0;

		attrname = kstruprdup(attr->attr.name, GFP_KERNEL);
		if (!attrname) {
			ret = -ENOMEM;
			goto out;
		}
		str = attr->attr.name;
		ustr = attrname;
		while (*str)
			*ustr++ = toupper(*str++);

		*ustr = 0;

		ret = add_uevent_var(env, "POWER_SUPPLY_%s=%s", attrname, prop_buf);
		kfree(attrname);
		if (ret)
			goto out;
	}