Re: [PATCH] PCI and sysfs fixes for 2.5.74

Greg KH (greg@kroah.com)
Thu, 3 Jul 2003 19:09:15 -0700


ChangeSet 1.1378, 2003/07/03 17:52:16-07:00, greg@kroah.com

Merge kroah.com:/home/linux/BK/bleed-2.5
into kroah.com:/home/linux/BK/pci-2.5

arch/i386/kernel/timers/timer_cyclone.c | 2 +-
arch/i386/kernel/timers/timer_tsc.c | 15 +++++++++++++--
2 files changed, 14 insertions(+), 3 deletions(-)

diff -Nru a/arch/i386/kernel/timers/timer_cyclone.c b/arch/i386/kernel/timers/timer_cyclone.c
--- a/arch/i386/kernel/timers/timer_cyclone.c Thu Jul 3 18:15:27 2003
+++ b/arch/i386/kernel/timers/timer_cyclone.c Thu Jul 3 18:15:27 2003
@@ -88,7 +88,7 @@
* between cyclone and pit reads (as noted when
* usec delta is > 90% # of usecs/tick)
*/
- if (abs(delay - delay_at_last_interrupt) > (900000/HZ))
+ if (lost && abs(delay - delay_at_last_interrupt) > (900000/HZ))
jiffies++;
}

diff -Nru a/arch/i386/kernel/timers/timer_tsc.c b/arch/i386/kernel/timers/timer_tsc.c
--- a/arch/i386/kernel/timers/timer_tsc.c Thu Jul 3 18:15:27 2003
+++ b/arch/i386/kernel/timers/timer_tsc.c Thu Jul 3 18:15:27 2003
@@ -124,6 +124,7 @@
int countmp;
static int count1 = 0;
unsigned long long this_offset, last_offset;
+ static int lost_count = 0;

write_lock(&monotonic_lock);
last_offset = ((unsigned long long)last_tsc_high<<32)|last_tsc_low;
@@ -178,9 +179,19 @@
delta += delay_at_last_interrupt;
lost = delta/(1000000/HZ);
delay = delta%(1000000/HZ);
- if (lost >= 2)
+ if (lost >= 2) {
jiffies += lost-1;

+ /* sanity check to ensure we're not always loosing ticks */
+ if (lost_count++ > 100) {
+ printk(KERN_WARNING "Loosing too many ticks!\n");
+ printk(KERN_WARNING "TSC cannot be used as a timesource."
+ " (Are you running with SpeedStep?)\n");
+ printk(KERN_WARNING "Falling back to a sane timesource.\n");
+ clock_fallback();
+ }
+ } else
+ lost_count = 0;
/* update the monotonic base value */
this_offset = ((unsigned long long)last_tsc_high<<32)|last_tsc_low;
monotonic_base += cycles_2_ns(this_offset - last_offset);
@@ -194,7 +205,7 @@
* between tsc and pit reads (as noted when
* usec delta is > 90% # of usecs/tick)
*/
- if (abs(delay - delay_at_last_interrupt) > (900000/HZ))
+ if (lost && abs(delay - delay_at_last_interrupt) > (900000/HZ))
jiffies++;
}

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