WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-3.4-testing] cpufreq: fix statistic lock problem

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-3.4-testing] cpufreq: fix statistic lock problem
From: "Xen patchbot-3.4-testing" <patchbot-3.4-testing@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 30 Mar 2010 05:45:38 -0700
Delivery-date: Tue, 30 Mar 2010 05:46:04 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1269952696 -3600
# Node ID 106fb323c803537762ad436991fb82aabfa2ca73
# Parent  a8d1c8013bb69a7f1740d4631ca6b8623d75d9d0
cpufreq: fix statistic lock problem

cpufreq_statistic_lock should not only protect the statistic memory
pointed by cpufreq_statistic_data[cpu], but also have to protect the
pointer in cpufreq_statistic_data[cpu] itself. So move the read
operation of cpufreq_statistic_data[cpu] after
spin_lock(cpufreq_statistic_lock).

Signed-off-by: Wei Gang <gang.wei@xxxxxxxxx>
xen-unstable changeset:   21071:415c0bf4ac7a
xen-unstable date:        Fri Mar 26 08:49:13 2010 +0000
---
 xen/drivers/cpufreq/utility.c |   12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)

diff -r a8d1c8013bb6 -r 106fb323c803 xen/drivers/cpufreq/utility.c
--- a/xen/drivers/cpufreq/utility.c     Tue Mar 30 13:37:15 2010 +0100
+++ b/xen/drivers/cpufreq/utility.c     Tue Mar 30 13:38:16 2010 +0100
@@ -63,13 +63,14 @@ void cpufreq_residency_update(unsigned i
 
 void cpufreq_statistic_update(unsigned int cpu, uint8_t from, uint8_t to)
 {
-    struct pm_px *pxpt = cpufreq_statistic_data[cpu];
+    struct pm_px *pxpt;
     struct processor_pminfo *pmpt = processor_pminfo[cpu];
     spinlock_t *cpufreq_statistic_lock = 
                &per_cpu(cpufreq_statistic_lock, cpu);
 
     spin_lock(cpufreq_statistic_lock);
 
+    pxpt = cpufreq_statistic_data[cpu];
     if ( !pxpt || !pmpt ) {
         spin_unlock(cpufreq_statistic_lock);
         return;
@@ -89,7 +90,7 @@ int cpufreq_statistic_init(unsigned int 
 int cpufreq_statistic_init(unsigned int cpuid)
 {
     uint32_t i, count;
-    struct pm_px *pxpt = cpufreq_statistic_data[cpuid];
+    struct pm_px *pxpt;
     const struct processor_pminfo *pmpt = processor_pminfo[cpuid];
     spinlock_t *cpufreq_statistic_lock = 
                           &per_cpu(cpufreq_statistic_lock, cpuid);
@@ -99,6 +100,7 @@ int cpufreq_statistic_init(unsigned int 
 
     spin_lock(cpufreq_statistic_lock);
 
+    pxpt = cpufreq_statistic_data[cpuid];
     if ( pxpt ) {
         spin_unlock(cpufreq_statistic_lock);
         return 0;
@@ -148,12 +150,13 @@ int cpufreq_statistic_init(unsigned int 
 
 void cpufreq_statistic_exit(unsigned int cpuid)
 {
-    struct pm_px *pxpt = cpufreq_statistic_data[cpuid];
+    struct pm_px *pxpt;
     spinlock_t *cpufreq_statistic_lock = 
                &per_cpu(cpufreq_statistic_lock, cpuid);
 
     spin_lock(cpufreq_statistic_lock);
 
+    pxpt = cpufreq_statistic_data[cpuid];
     if (!pxpt) {
         spin_unlock(cpufreq_statistic_lock);
         return;
@@ -170,13 +173,14 @@ void cpufreq_statistic_reset(unsigned in
 void cpufreq_statistic_reset(unsigned int cpuid)
 {
     uint32_t i, j, count;
-    struct pm_px *pxpt = cpufreq_statistic_data[cpuid];
+    struct pm_px *pxpt;
     const struct processor_pminfo *pmpt = processor_pminfo[cpuid];
     spinlock_t *cpufreq_statistic_lock = 
                &per_cpu(cpufreq_statistic_lock, cpuid);
 
     spin_lock(cpufreq_statistic_lock);
 
+    pxpt = cpufreq_statistic_data[cpuid];
     if ( !pmpt || !pxpt || !pxpt->u.pt || !pxpt->u.trans_pt ) {
         spin_unlock(cpufreq_statistic_lock);
         return;

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-3.4-testing] cpufreq: fix statistic lock problem, Xen patchbot-3.4-testing <=