Code Review
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
Pull bugzilla-5737 into release branch
[linux-2.6.git]
/
drivers
/
acpi
/
processor_perflib.c
diff --git
a/drivers/acpi/processor_perflib.c
b/drivers/acpi/processor_perflib.c
index cf6167003d8a2e99deceef417fd604c4572e5e03..f02c5ea9084f7b82475c86bcb7cb685835e576b1 100644
(file)
--- a/
drivers/acpi/processor_perflib.c
+++ b/
drivers/acpi/processor_perflib.c
@@
-34,6
+34,7
@@
#ifdef CONFIG_X86_ACPI_CPUFREQ_PROC_INTF
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#ifdef CONFIG_X86_ACPI_CPUFREQ_PROC_INTF
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
+#include <linux/mutex.h>
#include <asm/uaccess.h>
#endif
#include <asm/uaccess.h>
#endif
@@
-48,7
+49,7
@@
#define _COMPONENT ACPI_PROCESSOR_COMPONENT
ACPI_MODULE_NAME("acpi_processor")
#define _COMPONENT ACPI_PROCESSOR_COMPONENT
ACPI_MODULE_NAME("acpi_processor")
-static DE
CLARE_MUTEX(performance_sem
);
+static DE
FINE_MUTEX(performance_mutex
);
/*
* _PPC support is implemented as a CPUfreq policy notifier:
/*
* _PPC support is implemented as a CPUfreq policy notifier:
@@
-72,7
+73,7
@@
static int acpi_processor_ppc_notifier(struct notifier_block *nb,
struct acpi_processor *pr;
unsigned int ppc = 0;
struct acpi_processor *pr;
unsigned int ppc = 0;
-
down(&performance_sem
);
+
mutex_lock(&performance_mutex
);
if (event != CPUFREQ_INCOMPATIBLE)
goto out;
if (event != CPUFREQ_INCOMPATIBLE)
goto out;
@@
-93,7
+94,7
@@
static int acpi_processor_ppc_notifier(struct notifier_block *nb,
core_frequency * 1000);
out:
core_frequency * 1000);
out:
-
up(&performance_sem
);
+
mutex_unlock(&performance_mutex
);
return 0;
}
return 0;
}
@@
-788,30
+789,32
@@
acpi_processor_register_performance(struct acpi_processor_performance
if (!(acpi_processor_ppc_status & PPC_REGISTERED))
return_VALUE(-EINVAL);
if (!(acpi_processor_ppc_status & PPC_REGISTERED))
return_VALUE(-EINVAL);
-
down(&performance_sem
);
+
mutex_lock(&performance_mutex
);
pr = processors[cpu];
if (!pr) {
pr = processors[cpu];
if (!pr) {
-
up(&performance_sem
);
+
mutex_unlock(&performance_mutex
);
return_VALUE(-ENODEV);
}
if (pr->performance) {
return_VALUE(-ENODEV);
}
if (pr->performance) {
-
up(&performance_sem
);
+
mutex_unlock(&performance_mutex
);
return_VALUE(-EBUSY);
}
return_VALUE(-EBUSY);
}
+ WARN_ON(!performance);
+
pr->performance = performance;
if (acpi_processor_get_performance_info(pr)) {
pr->performance = NULL;
pr->performance = performance;
if (acpi_processor_get_performance_info(pr)) {
pr->performance = NULL;
-
up(&performance_sem
);
+
mutex_unlock(&performance_mutex
);
return_VALUE(-EIO);
}
acpi_cpufreq_add_file(pr);
return_VALUE(-EIO);
}
acpi_cpufreq_add_file(pr);
-
up(&performance_sem
);
+
mutex_unlock(&performance_mutex
);
return_VALUE(0);
}
return_VALUE(0);
}
@@
-825,20
+828,21
@@
acpi_processor_unregister_performance(struct acpi_processor_performance
ACPI_FUNCTION_TRACE("acpi_processor_unregister_performance");
ACPI_FUNCTION_TRACE("acpi_processor_unregister_performance");
-
down(&performance_sem
);
+
mutex_lock(&performance_mutex
);
pr = processors[cpu];
if (!pr) {
pr = processors[cpu];
if (!pr) {
-
up(&performance_sem
);
+
mutex_unlock(&performance_mutex
);
return_VOID;
}
return_VOID;
}
- kfree(pr->performance->states);
+ if (pr->performance)
+ kfree(pr->performance->states);
pr->performance = NULL;
acpi_cpufreq_remove_file(pr);
pr->performance = NULL;
acpi_cpufreq_remove_file(pr);
-
up(&performance_sem
);
+
mutex_unlock(&performance_mutex
);
return_VOID;
}
return_VOID;
}