Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / drivers / acpi / processor_perflib.c
index a9a1a8f..f36db22 100644 (file)
@@ -26,7 +26,6 @@
  *
  */
 
-
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #include <acpi/acpi_bus.h>
 #include <acpi/processor.h>
 
-
 #define ACPI_PROCESSOR_COMPONENT       0x01000000
 #define ACPI_PROCESSOR_CLASS           "processor"
 #define ACPI_PROCESSOR_DRIVER_NAME     "ACPI Processor Driver"
 #define ACPI_PROCESSOR_FILE_PERFORMANCE        "performance"
 #define _COMPONENT             ACPI_PROCESSOR_COMPONENT
-ACPI_MODULE_NAME               ("acpi_processor")
-
+ACPI_MODULE_NAME("acpi_processor")
 
 static DECLARE_MUTEX(performance_sem);
 
@@ -69,8 +66,7 @@ static DECLARE_MUTEX(performance_sem);
 static int acpi_processor_ppc_status = 0;
 
 static int acpi_processor_ppc_notifier(struct notifier_block *nb,
-       unsigned long event,
-       void *data)
+                                      unsigned long event, void *data)
 {
        struct cpufreq_policy *policy = data;
        struct acpi_processor *pr;
@@ -85,7 +81,7 @@ static int acpi_processor_ppc_notifier(struct notifier_block *nb,
        if (!pr || !pr->performance)
                goto out;
 
-       ppc = (unsigned int) pr->performance_platform_limit;
+       ppc = (unsigned int)pr->performance_platform_limit;
        if (!ppc)
                goto out;
 
@@ -93,26 +89,23 @@ static int acpi_processor_ppc_notifier(struct notifier_block *nb,
                goto out;
 
        cpufreq_verify_within_limits(policy, 0,
-               pr->performance->states[ppc].core_frequency * 1000);
+                                    pr->performance->states[ppc].
+                                    core_frequency * 1000);
 
- out:
     out:
        up(&performance_sem);
 
        return 0;
 }
 
-
 static struct notifier_block acpi_ppc_notifier_block = {
        .notifier_call = acpi_processor_ppc_notifier,
 };
 
-
-static int
-acpi_processor_get_platform_limit (
-       struct acpi_processor*  pr)
+static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
 {
-       acpi_status             status = 0;
-       unsigned long           ppc = 0;
+       acpi_status status = 0;
+       unsigned long ppc = 0;
 
        ACPI_FUNCTION_TRACE("acpi_processor_get_platform_limit");
 
@@ -128,19 +121,17 @@ acpi_processor_get_platform_limit (
        if (status != AE_NOT_FOUND)
                acpi_processor_ppc_status |= PPC_IN_USE;
 
-       if(ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
+       if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error evaluating _PPC\n"));
                return_VALUE(-ENODEV);
        }
 
-       pr->performance_platform_limit = (int) ppc;
+       pr->performance_platform_limit = (int)ppc;
 
        return_VALUE(0);
 }
 
-
-int acpi_processor_ppc_has_changed(
-       struct acpi_processor *pr)
+int acpi_processor_ppc_has_changed(struct acpi_processor *pr)
 {
        int ret = acpi_processor_get_platform_limit(pr);
        if (ret < 0)
@@ -149,75 +140,44 @@ int acpi_processor_ppc_has_changed(
                return cpufreq_update_policy(pr->id);
 }
 
-
-void acpi_processor_ppc_init(void) {
-       if (!cpufreq_register_notifier(&acpi_ppc_notifier_block, CPUFREQ_POLICY_NOTIFIER))
+void acpi_processor_ppc_init(void)
+{
+       if (!cpufreq_register_notifier
+           (&acpi_ppc_notifier_block, CPUFREQ_POLICY_NOTIFIER))
                acpi_processor_ppc_status |= PPC_REGISTERED;
        else
-               printk(KERN_DEBUG "Warning: Processor Platform Limit not supported.\n");
+               printk(KERN_DEBUG
+                      "Warning: Processor Platform Limit not supported.\n");
 }
 
-
-void acpi_processor_ppc_exit(void) {
+void acpi_processor_ppc_exit(void)
+{
        if (acpi_processor_ppc_status & PPC_REGISTERED)
-               cpufreq_unregister_notifier(&acpi_ppc_notifier_block, CPUFREQ_POLICY_NOTIFIER);
+               cpufreq_unregister_notifier(&acpi_ppc_notifier_block,
+                                           CPUFREQ_POLICY_NOTIFIER);
 
        acpi_processor_ppc_status &= ~PPC_REGISTERED;
 }
 
-/*
- * when registering a cpufreq driver with this ACPI processor driver, the
- * _PCT and _PSS structures are read out and written into struct
- * acpi_processor_performance.
- */
-static int acpi_processor_set_pdc (struct acpi_processor *pr)
+static int acpi_processor_get_performance_control(struct acpi_processor *pr)
 {
-       acpi_status             status = AE_OK;
-       u32                     arg0_buf[3];
-       union acpi_object       arg0 = {ACPI_TYPE_BUFFER};
-       struct acpi_object_list no_object = {1, &arg0};
-       struct acpi_object_list *pdc;
-
-       ACPI_FUNCTION_TRACE("acpi_processor_set_pdc");
-
-       arg0.buffer.length = 12;
-       arg0.buffer.pointer = (u8 *) arg0_buf;
-       arg0_buf[0] = ACPI_PDC_REVISION_ID;
-       arg0_buf[1] = 0;
-       arg0_buf[2] = 0;
-
-       pdc = (pr->performance->pdc) ? pr->performance->pdc : &no_object;
-
-       status = acpi_evaluate_object(pr->handle, "_PDC", pdc, NULL);
-
-       if ((ACPI_FAILURE(status)) && (pr->performance->pdc))
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Error evaluating _PDC, using legacy perf. control...\n"));
-
-       return_VALUE(status);
-}
-
-
-static int
-acpi_processor_get_performance_control (
-       struct acpi_processor *pr)
-{
-       int                     result = 0;
-       acpi_status             status = 0;
-       struct acpi_buffer      buffer = {ACPI_ALLOCATE_BUFFER, NULL};
-       union acpi_object       *pct = NULL;
-       union acpi_object       obj = {0};
+       int result = 0;
+       acpi_status status = 0;
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
+       union acpi_object *pct = NULL;
+       union acpi_object obj = { 0 };
 
        ACPI_FUNCTION_TRACE("acpi_processor_get_performance_control");
 
        status = acpi_evaluate_object(pr->handle, "_PCT", NULL, &buffer);
-       if(ACPI_FAILURE(status)) {
+       if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error evaluating _PCT\n"));
                return_VALUE(-ENODEV);
        }
 
-       pct = (union acpi_object *) buffer.pointer;
+       pct = (union acpi_object *)buffer.pointer;
        if (!pct || (pct->type != ACPI_TYPE_PACKAGE)
-               || (pct->package.count != 2)) {
+           || (pct->package.count != 2)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid _PCT data\n"));
                result = -EFAULT;
                goto end;
@@ -230,15 +190,15 @@ acpi_processor_get_performance_control (
        obj = pct->package.elements[0];
 
        if ((obj.type != ACPI_TYPE_BUFFER)
-               || (obj.buffer.length < sizeof(struct acpi_pct_register))
-               || (obj.buffer.pointer == NULL)) {
+           || (obj.buffer.length < sizeof(struct acpi_pct_register))
+           || (obj.buffer.pointer == NULL)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Invalid _PCT data (control_register)\n"));
+                                 "Invalid _PCT data (control_register)\n"));
                result = -EFAULT;
                goto end;
        }
-       memcpy(&pr->performance->control_register, obj.buffer.pointer, sizeof(struct acpi_pct_register));
-
+       memcpy(&pr->performance->control_register, obj.buffer.pointer,
+              sizeof(struct acpi_pct_register));
 
        /*
         * status_register
@@ -247,44 +207,42 @@ acpi_processor_get_performance_control (
        obj = pct->package.elements[1];
 
        if ((obj.type != ACPI_TYPE_BUFFER)
-               || (obj.buffer.length < sizeof(struct acpi_pct_register))
-               || (obj.buffer.pointer == NULL)) {
+           || (obj.buffer.length < sizeof(struct acpi_pct_register))
+           || (obj.buffer.pointer == NULL)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Invalid _PCT data (status_register)\n"));
+                                 "Invalid _PCT data (status_register)\n"));
                result = -EFAULT;
                goto end;
        }
 
-       memcpy(&pr->performance->status_register, obj.buffer.pointer, sizeof(struct acpi_pct_register));
+       memcpy(&pr->performance->status_register, obj.buffer.pointer,
+              sizeof(struct acpi_pct_register));
 
-end:
+      end:
        acpi_os_free(buffer.pointer);
 
        return_VALUE(result);
 }
 
-
-static int
-acpi_processor_get_performance_states (
-       struct acpi_processor   *pr)
+static int acpi_processor_get_performance_states(struct acpi_processor *pr)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
-       struct acpi_buffer      buffer = {ACPI_ALLOCATE_BUFFER, NULL};
-       struct acpi_buffer      format = {sizeof("NNNNNN"), "NNNNNN"};
-       struct acpi_buffer      state = {0, NULL};
-       union acpi_object       *pss = NULL;
-       int                     i;
+       int result = 0;
+       acpi_status status = AE_OK;
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
+       struct acpi_buffer format = { sizeof("NNNNNN"), "NNNNNN" };
+       struct acpi_buffer state = { 0, NULL };
+       union acpi_object *pss = NULL;
+       int i;
 
        ACPI_FUNCTION_TRACE("acpi_processor_get_performance_states");
 
        status = acpi_evaluate_object(pr->handle, "_PSS", NULL, &buffer);
-       if(ACPI_FAILURE(status)) {
+       if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error evaluating _PSS\n"));
                return_VALUE(-ENODEV);
        }
 
-       pss = (union acpi_object *) buffer.pointer;
+       pss = (union acpi_object *)buffer.pointer;
        if (!pss || (pss->type != ACPI_TYPE_PACKAGE)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid _PSS data\n"));
                result = -EFAULT;
@@ -292,10 +250,12 @@ acpi_processor_get_performance_states (
        }
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found %d performance states\n",
-               pss->package.count));
+                         pss->package.count));
 
        pr->performance->state_count = pss->package.count;
-       pr->performance->states = kmalloc(sizeof(struct acpi_processor_px) * pss->package.count, GFP_KERNEL);
+       pr->performance->states =
+           kmalloc(sizeof(struct acpi_processor_px) * pss->package.count,
+                   GFP_KERNEL);
        if (!pr->performance->states) {
                result = -ENOMEM;
                goto end;
@@ -311,58 +271,54 @@ acpi_processor_get_performance_states (
                ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Extracting state %d\n", i));
 
                status = acpi_extract_package(&(pss->package.elements[i]),
-                       &format, &state);
+                                             &format, &state);
                if (ACPI_FAILURE(status)) {
-                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid _PSS data\n"));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Invalid _PSS data\n"));
                        result = -EFAULT;
                        kfree(pr->performance->states);
                        goto end;
                }
 
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "State [%d]: core_frequency[%d] power[%d] transition_latency[%d] bus_master_latency[%d] control[0x%x] status[0x%x]\n",
-                       i,
-                       (u32) px->core_frequency,
-                       (u32) px->power,
-                       (u32) px->transition_latency,
-                       (u32) px->bus_master_latency,
-                       (u32) px->control,
-                       (u32) px->status));
+                                 "State [%d]: core_frequency[%d] power[%d] transition_latency[%d] bus_master_latency[%d] control[0x%x] status[0x%x]\n",
+                                 i,
+                                 (u32) px->core_frequency,
+                                 (u32) px->power,
+                                 (u32) px->transition_latency,
+                                 (u32) px->bus_master_latency,
+                                 (u32) px->control, (u32) px->status));
 
                if (!px->core_frequency) {
-                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid _PSS data: freq is zero\n"));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Invalid _PSS data: freq is zero\n"));
                        result = -EFAULT;
                        kfree(pr->performance->states);
                        goto end;
                }
        }
 
-end:
+      end:
        acpi_os_free(buffer.pointer);
 
        return_VALUE(result);
 }
 
-
-static int
-acpi_processor_get_performance_info (
-       struct acpi_processor   *pr)
+static int acpi_processor_get_performance_info(struct acpi_processor *pr)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
-       acpi_handle             handle = NULL;
+       int result = 0;
+       acpi_status status = AE_OK;
+       acpi_handle handle = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_processor_get_performance_info");
 
        if (!pr || !pr->performance || !pr->handle)
                return_VALUE(-EINVAL);
 
-       acpi_processor_set_pdc(pr);
-
        status = acpi_get_handle(pr->handle, "_PCT", &handle);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "ACPI-based processor performance control unavailable\n"));
+                                 "ACPI-based processor performance control unavailable\n"));
                return_VALUE(-ENODEV);
        }
 
@@ -381,10 +337,10 @@ acpi_processor_get_performance_info (
        return_VALUE(0);
 }
 
-
-int acpi_processor_notify_smm(struct module *calling_module) {
-       acpi_status             status;
-       static int              is_done = 0;
+int acpi_processor_notify_smm(struct module *calling_module)
+{
+       acpi_status status;
+       static int is_done = 0;
 
        ACPI_FUNCTION_TRACE("acpi_processor_notify_smm");
 
@@ -402,8 +358,7 @@ int acpi_processor_notify_smm(struct module *calling_module) {
        if (is_done > 0) {
                module_put(calling_module);
                return_VALUE(0);
-       }
-       else if (is_done < 0) {
+       } else if (is_done < 0) {
                module_put(calling_module);
                return_VALUE(is_done);
        }
@@ -411,28 +366,30 @@ int acpi_processor_notify_smm(struct module *calling_module) {
        is_done = -EIO;
 
        /* Can't write pstate_cnt to smi_cmd if either value is zero */
-       if ((!acpi_fadt.smi_cmd) ||
-           (!acpi_fadt.pstate_cnt)) {
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "No SMI port or pstate_cnt\n"));
+       if ((!acpi_fadt.smi_cmd) || (!acpi_fadt.pstate_cnt)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No SMI port or pstate_cnt\n"));
                module_put(calling_module);
                return_VALUE(0);
        }
 
-       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Writing pstate_cnt [0x%x] to smi_cmd [0x%x]\n", acpi_fadt.pstate_cnt, acpi_fadt.smi_cmd));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                         "Writing pstate_cnt [0x%x] to smi_cmd [0x%x]\n",
+                         acpi_fadt.pstate_cnt, acpi_fadt.smi_cmd));
 
        /* FADT v1 doesn't support pstate_cnt, many BIOS vendors use
         * it anyway, so we need to support it... */
        if (acpi_fadt_is_v1) {
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Using v1.0 FADT reserved value for pstate_cnt\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Using v1.0 FADT reserved value for pstate_cnt\n"));
        }
 
-       status = acpi_os_write_port (acpi_fadt.smi_cmd,
-                                    (u32) acpi_fadt.pstate_cnt, 8);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_os_write_port(acpi_fadt.smi_cmd,
+                                   (u32) acpi_fadt.pstate_cnt, 8);
+       if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
                                  "Failed to write pstate_cnt [0x%x] to "
-                                 "smi_cmd [0x%x]\n", acpi_fadt.pstate_cnt, acpi_fadt.smi_cmd));
+                                 "smi_cmd [0x%x]\n", acpi_fadt.pstate_cnt,
+                                 acpi_fadt.smi_cmd));
                module_put(calling_module);
                return_VALUE(status);
        }
@@ -446,24 +403,24 @@ int acpi_processor_notify_smm(struct module *calling_module) {
 
        return_VALUE(0);
 }
-EXPORT_SYMBOL(acpi_processor_notify_smm);
 
+EXPORT_SYMBOL(acpi_processor_notify_smm);
 
 #ifdef CONFIG_X86_ACPI_CPUFREQ_PROC_INTF
 /* /proc/acpi/processor/../performance interface (DEPRECATED) */
 
 static int acpi_processor_perf_open_fs(struct inode *inode, struct file *file);
 static struct file_operations acpi_processor_perf_fops = {
-       .open           = acpi_processor_perf_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_processor_perf_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
 static int acpi_processor_perf_seq_show(struct seq_file *seq, void *offset)
 {
-       struct acpi_processor   *pr = (struct acpi_processor *)seq->private;
-       int                     i;
+       struct acpi_processor *pr = (struct acpi_processor *)seq->private;
+       int i;
 
        ACPI_FUNCTION_TRACE("acpi_processor_perf_seq_show");
 
@@ -476,42 +433,40 @@ static int acpi_processor_perf_seq_show(struct seq_file *seq, void *offset)
        }
 
        seq_printf(seq, "state count:             %d\n"
-                       "active state:            P%d\n",
-                       pr->performance->state_count,
-                       pr->performance->state);
+                  "active state:            P%d\n",
+                  pr->performance->state_count, pr->performance->state);
 
        seq_puts(seq, "states:\n");
        for (i = 0; i < pr->performance->state_count; i++)
-               seq_printf(seq, "   %cP%d:                  %d MHz, %d mW, %d uS\n",
-                       (i == pr->performance->state?'*':' '), i,
-                       (u32) pr->performance->states[i].core_frequency,
-                       (u32) pr->performance->states[i].power,
-                       (u32) pr->performance->states[i].transition_latency);
-
-end:
+               seq_printf(seq,
+                          "   %cP%d:                  %d MHz, %d mW, %d uS\n",
+                          (i == pr->performance->state ? '*' : ' '), i,
+                          (u32) pr->performance->states[i].core_frequency,
+                          (u32) pr->performance->states[i].power,
+                          (u32) pr->performance->states[i].transition_latency);
+
+      end:
        return_VALUE(0);
 }
 
 static int acpi_processor_perf_open_fs(struct inode *inode, struct file *file)
 {
        return single_open(file, acpi_processor_perf_seq_show,
-                                               PDE(inode)->data);
+                          PDE(inode)->data);
 }
 
 static ssize_t
-acpi_processor_write_performance (
-        struct file            *file,
-        const char             __user *buffer,
-        size_t                 count,
-        loff_t                 *data)
+acpi_processor_write_performance(struct file *file,
+                                const char __user * buffer,
+                                size_t count, loff_t * data)
 {
-       int                     result = 0;
-       struct seq_file         *m = (struct seq_file *) file->private_data;
-       struct acpi_processor   *pr = (struct acpi_processor *) m->private;
+       int result = 0;
+       struct seq_file *m = (struct seq_file *)file->private_data;
+       struct acpi_processor *pr = (struct acpi_processor *)m->private;
        struct acpi_processor_performance *perf;
-       char                    state_string[12] = {'\0'};
-       unsigned int            new_state = 0;
-       struct cpufreq_policy   policy;
+       char state_string[12] = { '\0' };
+       unsigned int new_state = 0;
+       struct cpufreq_policy policy;
 
        ACPI_FUNCTION_TRACE("acpi_processor_write_performance");
 
@@ -544,12 +499,10 @@ acpi_processor_write_performance (
        return_VALUE(count);
 }
 
-static void
-acpi_cpufreq_add_file (
-       struct acpi_processor *pr)
+static void acpi_cpufreq_add_file(struct acpi_processor *pr)
 {
-       struct proc_dir_entry   *entry = NULL;
-       struct acpi_device      *device = NULL;
+       struct proc_dir_entry *entry = NULL;
+       struct acpi_device *device = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_cpufreq_addfile");
 
@@ -558,25 +511,24 @@ acpi_cpufreq_add_file (
 
        /* add file 'performance' [R/W] */
        entry = create_proc_entry(ACPI_PROCESSOR_FILE_PERFORMANCE,
-                 S_IFREG|S_IRUGO|S_IWUSR, acpi_device_dir(device));
+                                 S_IFREG | S_IRUGO | S_IWUSR,
+                                 acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to create '%s' fs entry\n",
-                       ACPI_PROCESSOR_FILE_PERFORMANCE));
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_PROCESSOR_FILE_PERFORMANCE));
        else {
+               acpi_processor_perf_fops.write = acpi_processor_write_performance;
                entry->proc_fops = &acpi_processor_perf_fops;
-               entry->proc_fops->write = acpi_processor_write_performance;
                entry->data = acpi_driver_data(device);
                entry->owner = THIS_MODULE;
        }
        return_VOID;
 }
 
-static void
-acpi_cpufreq_remove_file (
-       struct acpi_processor *pr)
+static void acpi_cpufreq_remove_file(struct acpi_processor *pr)
 {
-       struct acpi_device      *device = NULL;
+       struct acpi_device *device = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_cpufreq_addfile");
 
@@ -585,21 +537,25 @@ acpi_cpufreq_remove_file (
 
        /* remove file 'performance' */
        remove_proc_entry(ACPI_PROCESSOR_FILE_PERFORMANCE,
-                 acpi_device_dir(device));
+                         acpi_device_dir(device));
 
        return_VOID;
 }
 
 #else
-static void acpi_cpufreq_add_file (struct acpi_processor *pr) { return; }
-static void acpi_cpufreq_remove_file (struct acpi_processor *pr) { return; }
-#endif /* CONFIG_X86_ACPI_CPUFREQ_PROC_INTF */
-
+static void acpi_cpufreq_add_file(struct acpi_processor *pr)
+{
+       return;
+}
+static void acpi_cpufreq_remove_file(struct acpi_processor *pr)
+{
+       return;
+}
+#endif                         /* CONFIG_X86_ACPI_CPUFREQ_PROC_INTF */
 
 int
-acpi_processor_register_performance (
-       struct acpi_processor_performance * performance,
-       unsigned int cpu)
+acpi_processor_register_performance(struct acpi_processor_performance
+                                   *performance, unsigned int cpu)
 {
        struct acpi_processor *pr;
 
@@ -621,6 +577,8 @@ acpi_processor_register_performance (
                return_VALUE(-EBUSY);
        }
 
+       WARN_ON(!performance);
+
        pr->performance = performance;
 
        if (acpi_processor_get_performance_info(pr)) {
@@ -634,13 +592,12 @@ acpi_processor_register_performance (
        up(&performance_sem);
        return_VALUE(0);
 }
-EXPORT_SYMBOL(acpi_processor_register_performance);
 
+EXPORT_SYMBOL(acpi_processor_register_performance);
 
 void
-acpi_processor_unregister_performance (
-       struct acpi_processor_performance * performance,
-       unsigned int cpu)
+acpi_processor_unregister_performance(struct acpi_processor_performance
+                                     *performance, unsigned int cpu)
 {
        struct acpi_processor *pr;
 
@@ -654,7 +611,8 @@ acpi_processor_unregister_performance (
                return_VOID;
        }
 
-       kfree(pr->performance->states);
+       if (pr->performance)
+               kfree(pr->performance->states);
        pr->performance = NULL;
 
        acpi_cpufreq_remove_file(pr);
@@ -663,4 +621,5 @@ acpi_processor_unregister_performance (
 
        return_VOID;
 }
+
 EXPORT_SYMBOL(acpi_processor_unregister_performance);