@@ -10,7 +10,6 @@
#include <linux/platform_profile.h>
#include <linux/sysfs.h>
-static struct platform_profile_handler *cur_profile;
static DEFINE_MUTEX(profile_lock);
static const char * const profile_names[] = {
@@ -415,8 +414,7 @@ static const struct attribute_group platform_profile_group = {
void platform_profile_notify(struct platform_profile_handler *pprof)
{
- if (!cur_profile)
- return;
+ guard(mutex)(&profile_lock);
_notify_class_profile(NULL, pprof);
sysfs_notify(acpi_kobj, NULL, "platform_profile");
}
@@ -480,9 +478,6 @@ int platform_profile_register(struct platform_profile_handler *pprof)
}
guard(mutex)(&profile_lock);
- /* We can only have one active profile */
- if (cur_profile)
- return -EEXIST;
/* create class interface for individual handler */
pprof->minor = ida_alloc(&platform_profile_ida, GFP_KERNEL);
@@ -498,8 +493,6 @@ int platform_profile_register(struct platform_profile_handler *pprof)
sysfs_notify(acpi_kobj, NULL, "platform_profile");
- cur_profile = pprof;
-
err = sysfs_update_group(acpi_kobj, &platform_profile_group);
if (err)
goto cleanup_cur;
@@ -507,7 +500,6 @@ int platform_profile_register(struct platform_profile_handler *pprof)
return 0;
cleanup_cur:
- cur_profile = NULL;
device_unregister(pprof->class_dev);
cleanup_ida:
@@ -528,8 +520,6 @@ int platform_profile_remove(struct platform_profile_handler *pprof)
sysfs_notify(acpi_kobj, NULL, "platform_profile");
- cur_profile = NULL;
-
sysfs_update_group(acpi_kobj, &platform_profile_group);
return 0;