public inbox for linux-acpi@vger.kernel.org
 help / color / mirror / Atom feed
* [patch 0/2] x86, acpi_cpufreq: Make APERF MPERF read only in acpi_cpufreq
@ 2009-02-20  0:53 venkip
  2009-02-20  0:53 ` [patch 1/2] x86, acpi_cpufreq: cleanup structure names related to aperf mperf venkip
  2009-02-20  0:53 ` [patch 2/2] x86, acpi_cpufreq: do not clear aperf mperf MSR after read venkip
  0 siblings, 2 replies; 4+ messages in thread
From: venkip @ 2009-02-20  0:53 UTC (permalink / raw)
  To: lenb; +Cc: linux-acpi, Venkatesh Pallipadi

-- 


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [patch 1/2] x86, acpi_cpufreq: cleanup structure names related to aperf mperf
  2009-02-20  0:53 [patch 0/2] x86, acpi_cpufreq: Make APERF MPERF read only in acpi_cpufreq venkip
@ 2009-02-20  0:53 ` venkip
  2009-03-17  6:02   ` Len Brown
  2009-02-20  0:53 ` [patch 2/2] x86, acpi_cpufreq: do not clear aperf mperf MSR after read venkip
  1 sibling, 1 reply; 4+ messages in thread
From: venkip @ 2009-02-20  0:53 UTC (permalink / raw)
  To: lenb; +Cc: linux-acpi, Venkatesh Pallipadi

[-- Attachment #1: rename_aperf_mperf.patch --]
[-- Type: text/plain, Size: 3486 bytes --]

Change structure name to make the code look simpler. No functionality
change in this patch.

Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>

---

 arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c |   44 ++++++++++++++---------------
 1 file changed, 22 insertions(+), 22 deletions(-)

Index: linux-2.6/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c	2009-02-04 16:03:20.000000000 -0800
+++ linux-2.6/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c	2009-02-04 16:05:42.000000000 -0800
@@ -238,24 +238,24 @@ static u32 get_cur_val(const struct cpum
 	return cmd.val;
 }
 
-struct perf_cur {
+struct perf_pair {
 	union {
 		struct {
 			u32 lo;
 			u32 hi;
 		} split;
 		u64 whole;
-	} aperf_cur, mperf_cur;
+	} aperf, mperf;
 };
 
 
 /* Called via smp_call_function_single(), on the target CPU */
 static void read_measured_perf_ctrs(void *_cur)
 {
-	struct perf_cur *cur = _cur;
+	struct perf_pair *cur = _cur;
 
-	rdmsr(MSR_IA32_APERF, cur->aperf_cur.split.lo, cur->aperf_cur.split.hi);
-	rdmsr(MSR_IA32_MPERF, cur->mperf_cur.split.lo, cur->mperf_cur.split.hi);
+	rdmsr(MSR_IA32_APERF, cur->aperf.split.lo, cur->aperf.split.hi);
+	rdmsr(MSR_IA32_MPERF, cur->mperf.split.lo, cur->mperf.split.hi);
 
 	wrmsr(MSR_IA32_APERF, 0, 0);
 	wrmsr(MSR_IA32_MPERF, 0, 0);
@@ -277,7 +277,7 @@ static void read_measured_perf_ctrs(void
 static unsigned int get_measured_perf(struct cpufreq_policy *policy,
 				      unsigned int cpu)
 {
-	struct perf_cur cur;
+	struct perf_pair cur;
 	unsigned int perf_percent;
 	unsigned int retval;
 
@@ -290,39 +290,39 @@ static unsigned int get_measured_perf(st
 	 * Get an approximate value. Return failure in case we cannot get
 	 * an approximate value.
 	 */
-	if (unlikely(cur.aperf_cur.split.hi || cur.mperf_cur.split.hi)) {
+	if (unlikely(cur.aperf.split.hi || cur.mperf.split.hi)) {
 		int shift_count;
 		u32 h;
 
-		h = max_t(u32, cur.aperf_cur.split.hi, cur.mperf_cur.split.hi);
+		h = max_t(u32, cur.aperf.split.hi, cur.mperf.split.hi);
 		shift_count = fls(h);
 
-		cur.aperf_cur.whole >>= shift_count;
-		cur.mperf_cur.whole >>= shift_count;
+		cur.aperf.whole >>= shift_count;
+		cur.mperf.whole >>= shift_count;
 	}
 
-	if (((unsigned long)(-1) / 100) < cur.aperf_cur.split.lo) {
+	if (((unsigned long)(-1) / 100) < cur.aperf.split.lo) {
 		int shift_count = 7;
-		cur.aperf_cur.split.lo >>= shift_count;
-		cur.mperf_cur.split.lo >>= shift_count;
+		cur.aperf.split.lo >>= shift_count;
+		cur.mperf.split.lo >>= shift_count;
 	}
 
-	if (cur.aperf_cur.split.lo && cur.mperf_cur.split.lo)
-		perf_percent = (cur.aperf_cur.split.lo * 100) /
-				cur.mperf_cur.split.lo;
+	if (cur.aperf.split.lo && cur.mperf.split.lo)
+		perf_percent = (cur.aperf.split.lo * 100) /
+				cur.mperf.split.lo;
 	else
 		perf_percent = 0;
 
 #else
-	if (unlikely(((unsigned long)(-1) / 100) < cur.aperf_cur.whole)) {
+	if (unlikely(((unsigned long)(-1) / 100) < cur.aperf.whole)) {
 		int shift_count = 7;
-		cur.aperf_cur.whole >>= shift_count;
-		cur.mperf_cur.whole >>= shift_count;
+		cur.aperf.whole >>= shift_count;
+		cur.mperf.whole >>= shift_count;
 	}
 
-	if (cur.aperf_cur.whole && cur.mperf_cur.whole)
-		perf_percent = (cur.aperf_cur.whole * 100) /
-				cur.mperf_cur.whole;
+	if (cur.aperf.whole && cur.mperf.whole)
+		perf_percent = (cur.aperf.whole * 100) /
+				cur.mperf.whole;
 	else
 		perf_percent = 0;
 

-- 


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [patch 2/2] x86, acpi_cpufreq: do not clear aperf mperf MSR after read
  2009-02-20  0:53 [patch 0/2] x86, acpi_cpufreq: Make APERF MPERF read only in acpi_cpufreq venkip
  2009-02-20  0:53 ` [patch 1/2] x86, acpi_cpufreq: cleanup structure names related to aperf mperf venkip
@ 2009-02-20  0:53 ` venkip
  1 sibling, 0 replies; 4+ messages in thread
From: venkip @ 2009-02-20  0:53 UTC (permalink / raw)
  To: lenb; +Cc: linux-acpi, Venkatesh Pallipadi

[-- Attachment #1: disable_aperf_mperf_writes_2629.patch --]
[-- Type: text/plain, Size: 1925 bytes --]

Not write zeroes to APERF and MPERF by ondemand governor. With this other
users can share these MSRs during reads.

Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>

---

 arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c |   15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

Index: linux-2.6/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c	2009-02-04 16:05:42.000000000 -0800
+++ linux-2.6/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c	2009-02-04 16:08:51.000000000 -0800
@@ -66,6 +66,7 @@ struct acpi_cpufreq_data {
 	unsigned int max_freq;
 	unsigned int resume;
 	unsigned int cpu_feature;
+	u64 saved_aperf, saved_mperf;
 };
 
 static DEFINE_PER_CPU(struct acpi_cpufreq_data *, drv_data);
@@ -256,9 +257,6 @@ static void read_measured_perf_ctrs(void
 
 	rdmsr(MSR_IA32_APERF, cur->aperf.split.lo, cur->aperf.split.hi);
 	rdmsr(MSR_IA32_MPERF, cur->mperf.split.lo, cur->mperf.split.hi);
-
-	wrmsr(MSR_IA32_APERF, 0, 0);
-	wrmsr(MSR_IA32_MPERF, 0, 0);
 }
 
 /*
@@ -277,13 +275,20 @@ static void read_measured_perf_ctrs(void
 static unsigned int get_measured_perf(struct cpufreq_policy *policy,
 				      unsigned int cpu)
 {
-	struct perf_pair cur;
+	struct perf_pair readin, cur;
 	unsigned int perf_percent;
 	unsigned int retval;
 
-	if (smp_call_function_single(cpu, read_measured_perf_ctrs, &cur, 1))
+	if (smp_call_function_single(cpu, read_measured_perf_ctrs, &readin, 1))
 		return 0;
 
+	cur.aperf.whole = readin.aperf.whole -
+				per_cpu(drv_data, cpu)->saved_aperf;
+	cur.mperf.whole = readin.mperf.whole -
+				per_cpu(drv_data, cpu)->saved_mperf;
+	per_cpu(drv_data, cpu)->saved_aperf = readin.aperf.whole;
+	per_cpu(drv_data, cpu)->saved_mperf = readin.mperf.whole;
+
 #ifdef __i386__
 	/*
 	 * We dont want to do 64 bit divide with 32 bit kernel

-- 


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [patch 1/2] x86, acpi_cpufreq: cleanup structure names related to aperf mperf
  2009-02-20  0:53 ` [patch 1/2] x86, acpi_cpufreq: cleanup structure names related to aperf mperf venkip
@ 2009-03-17  6:02   ` Len Brown
  0 siblings, 0 replies; 4+ messages in thread
From: Len Brown @ 2009-03-17  6:02 UTC (permalink / raw)
  To: venkip; +Cc: linux-acpi, Venkatesh Pallipadi

Venki,
Can you refresh these to apply to top of tree?

thanks,
Len Brown, Intel Open Source Technology Center


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2009-03-17  6:02 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-02-20  0:53 [patch 0/2] x86, acpi_cpufreq: Make APERF MPERF read only in acpi_cpufreq venkip
2009-02-20  0:53 ` [patch 1/2] x86, acpi_cpufreq: cleanup structure names related to aperf mperf venkip
2009-03-17  6:02   ` Len Brown
2009-02-20  0:53 ` [patch 2/2] x86, acpi_cpufreq: do not clear aperf mperf MSR after read venkip

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox