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

[PATCH] use-tsc-for-delay_pmtmr.patch


On Fri, 2004-01-23 at 11:27, john stultz wrote:
> If that is going to cause problems, then we'll need to pull out the
> use-pmtmr-for-delay_pmtmr patch. I guess our only option is then to use
> the TSC for delay_pmtrm() (as a loop based delay fails in other cases).
> I'll write that up and send it your way, Andrew. 

Andrew, 
	Here's the patch to replace use-pmtmr-for-delay_pmtmr. It simply uses
the TSC for delay_pmtmr much as delay_tsc does.  The only gottcha is
that __delay will be affected by cpu-frequency changes (much as the
existing loop based delay) until I hook in the cpufreq notificaiton into
the ACPI PM timesource code. I'll get to that issue early next week
(sorry, I had a few other things I had to finish today). 
Let me know if this solves the APIC trouble on your system and if so,
I'd be interested to see how it works in -mm. 

thanks
-john

diff -Nru a/arch/i386/kernel/timers/timer_pm.c b/arch/i386/kernel/timers/timer_pm.c
--- a/arch/i386/kernel/timers/timer_pm.c	Fri Jan 23 13:57:38 2004
+++ b/arch/i386/kernel/timers/timer_pm.c	Fri Jan 23 13:57:38 2004
@@ -73,6 +73,10 @@
 	if (!pmtmr_ioport)
 		return -ENODEV;
 
+	/* we use the TSC for delay_pmtmr, so make sure it exists */
+	if (!cpu_has_tsc)
+		return -ENODEV;
+
 	/* "verify" this timing source */
 	value1 = read_pmtmr();
 	for (i = 0; i < 10000; i++) {
@@ -173,23 +177,16 @@
 	return ret;
 }
 
-static void delay_pmtmr(unsigned long total_loops)
+static void delay_pmtmr(unsigned long loops)
 {
-	u32 then, now;
-	unsigned long loops;
+	unsigned long bclock, now;
 	
-	do{
-		if (total_loops > ACPI_PM_MASK)
-			loops = ACPI_PM_MASK;
-		else
-			loops =  total_loops;
-		total_loops -= loops;
-		
-		then = read_pmtmr();
-		do{ 
-			now = read_pmtmr();
-		} while (((now - then)&ACPI_PM_MASK) < loops);
-	} while (total_loops);
+	rdtscl(bclock);
+	do
+	{
+		rep_nop();
+		rdtscl(now);
+	} while ((now-bclock) < loops);
 }
 
 


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo _at_ vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
References: