*
  * Sets a new CPUFreq policy.
  */
-struct allmasks {
-       cpumask_t               saved_mask;
-       cpumask_t               covered_cpus;
-};
-
 static int centrino_target (struct cpufreq_policy *policy,
                            unsigned int target_freq,
                            unsigned int relation)
        struct cpufreq_freqs    freqs;
        int                     retval = 0;
        unsigned int            j, k, first_cpu, tmp;
-       CPUMASK_ALLOC(allmasks);
-       CPUMASK_PTR(saved_mask, allmasks);
-       CPUMASK_PTR(covered_cpus, allmasks);
+       cpumask_var_t saved_mask, covered_cpus;
 
-       if (unlikely(allmasks == NULL))
+       if (unlikely(!alloc_cpumask_var(&saved_mask, GFP_KERNEL)))
                return -ENOMEM;
+       if (unlikely(!alloc_cpumask_var(&covered_cpus, GFP_KERNEL))) {
+               free_cpumask_var(saved_mask);
+               return -ENOMEM;
+       }
+       cpumask_copy(saved_mask, ¤t->cpus_allowed);
 
        if (unlikely(per_cpu(centrino_model, cpu) == NULL)) {
                retval = -ENODEV;
                goto out;
        }
 
-       *saved_mask = current->cpus_allowed;
        first_cpu = 1;
-       cpus_clear(*covered_cpus);
        for_each_cpu_mask_nr(j, policy->cpus) {
                const cpumask_t *mask;
 
        preempt_enable();
        set_cpus_allowed_ptr(current, saved_mask);
 out:
-       CPUMASK_FREE(allmasks);
+       free_cpumask_var(saved_mask);
+       free_cpumask_var(covered_cpus);
        return retval;
 }