[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] AMD, powernow: Update P-state directly when _PSD's CoordType is DOMAIN_COORD_TYPE_HW_ALL





On 08/17/2012 06:31 AM, Jan Beulich wrote:
On 16.08.12 at 18:41, Boris Ostrovsky <boris.ostrovsky@xxxxxxx> wrote:
@@ -137,26 +122,28 @@ static int powernow_cpufreq_target(struc
              return 0;
      }

-    if (policy->shared_type != CPUFREQ_SHARED_TYPE_ANY)
-        cmd.mask = &online_policy_cpus;
-    else
-        cmd.mask = cpumask_of(policy->cpu);
+    if (policy->shared_type == CPUFREQ_SHARED_TYPE_HW &&
+        likely(policy->cpu == smp_processor_id())) {
+        transition_pstate(&next_perf_state);
+        cpufreq_statistic_update(policy->cpu, perf->state, next_perf_state);

Actually - is this enough? Doesn't this also need to be done based
on policy->cpus?

With HW-coordinated transitions there is a policy structure per CPU so policy->cpus is always 1 and policy->cpu is the same as policy->cpus. You can see this in cpufreq_add_cpu(), when hw_all is set.

(This is consistent with ACPI spec:
        When hardware coordinates transitions, OSPM continues to
        initiate state transitions as it would if there were no
        dependencies.
)

-boris



Jan

+    } else {
+        cpumask_and(&online_policy_cpus, policy->cpus, &cpu_online_map);

-    freqs.old = perf->states[perf->state].core_frequency * 1000;
-    freqs.new = data->freq_table[next_state].frequency;
+        if (policy->shared_type == CPUFREQ_SHARED_TYPE_ALL ||
+            unlikely(policy->cpu != smp_processor_id()))
+            on_selected_cpus(&online_policy_cpus, transition_pstate,
+                             &next_perf_state, 1);
+        else
+            transition_pstate(&next_perf_state);

-    cmd.val = next_perf_state;
-    cmd.turbo = policy->turbo;
-
-    on_selected_cpus(cmd.mask, transition_pstate, &cmd, 1);
-
-    for_each_cpu(j, &online_policy_cpus)
-        cpufreq_statistic_update(j, perf->state, next_perf_state);
+        for_each_cpu(j, &online_policy_cpus)
+            cpufreq_statistic_update(j, perf->state, next_perf_state);
+    }

      perf->state = next_perf_state;
-    policy->cur = freqs.new;
+    policy->cur = data->freq_table[next_state].frequency;

-    return result;
+    return 0;
  }

  static int powernow_cpufreq_verify(struct cpufreq_policy *policy)


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel






_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.