* [patch 1/6] clockevents: Prevent clockevent event_handler ending up handler_noop
2008-09-03 21:36 [patch 0/6] final clockevents/hpet fixes Thomas Gleixner
@ 2008-09-03 21:36 ` Thomas Gleixner
2008-09-03 21:36 ` [patch 2/6] clockevents: prevent endless loop in periodic broadcast handler Thomas Gleixner
` (5 subsequent siblings)
6 siblings, 0 replies; 11+ messages in thread
From: Thomas Gleixner @ 2008-09-03 21:36 UTC (permalink / raw)
To: LKML
Cc: Ingo Molnar, Venkatesh Pallipadi, Shaohua Li,
Luiz Fernando N. Capitulino, Dmitry Nezhevenko
[-- Attachment #1: cev.patch --]
[-- Type: text/plain, Size: 3162 bytes --]
There is a ordering related problem with clockevents code, due to which
clockevents_register_device() called after tickless/highres switch
will not work. The new clockevent ends up with clockevents_handle_noop as
event handler, resulting in no timer activity.
The problematic path seems to be
* old device already has hrtimer_interrupt as the event_handler
* new clockevent device registers with a higher rating
* tick_check_new_device() is called
* clockevents_exchange_device() gets called
* old->event_handler is set to clockevents_handle_noop
* tick_setup_device() is called for the new device
* which sets new->event_handler using the old->event_handler which is noop.
Change the ordering so that new device inherits the proper handler.
This does not have any issue in normal case as most likely all the clockevent
devices are setup before the highres switch. But, can potentially be affecting
some corner case where HPET force detect happens after the highres switch.
This was a problem with HPET in MSI mode code that we have been experimenting
with.
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: Shaohua Li <shaohua.li@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
include/linux/clockchips.h | 2 ++
kernel/time/clockevents.c | 3 +--
kernel/time/tick-common.c | 1 +
3 files changed, 4 insertions(+), 2 deletions(-)
Index: linux-2.6/include/linux/clockchips.h
===================================================================
--- linux-2.6.orig/include/linux/clockchips.h
+++ linux-2.6/include/linux/clockchips.h
@@ -127,6 +127,8 @@ extern int clockevents_register_notifier
extern int clockevents_program_event(struct clock_event_device *dev,
ktime_t expires, ktime_t now);
+extern void clockevents_handle_noop(struct clock_event_device *dev);
+
#ifdef CONFIG_GENERIC_CLOCKEVENTS
extern void clockevents_notify(unsigned long reason, void *arg);
#else
Index: linux-2.6/kernel/time/clockevents.c
===================================================================
--- linux-2.6.orig/kernel/time/clockevents.c
+++ linux-2.6/kernel/time/clockevents.c
@@ -177,7 +177,7 @@ void clockevents_register_device(struct
/*
* Noop handler when we shut down an event device
*/
-static void clockevents_handle_noop(struct clock_event_device *dev)
+void clockevents_handle_noop(struct clock_event_device *dev)
{
}
@@ -199,7 +199,6 @@ void clockevents_exchange_device(struct
* released list and do a notify add later.
*/
if (old) {
- old->event_handler = clockevents_handle_noop;
clockevents_set_mode(old, CLOCK_EVT_MODE_UNUSED);
list_del(&old->list);
list_add(&old->list, &clockevents_released);
Index: linux-2.6/kernel/time/tick-common.c
===================================================================
--- linux-2.6.orig/kernel/time/tick-common.c
+++ linux-2.6/kernel/time/tick-common.c
@@ -161,6 +161,7 @@ static void tick_setup_device(struct tic
} else {
handler = td->evtdev->event_handler;
next_event = td->evtdev->next_event;
+ td->evtdev->event_handler = clockevents_handle_noop;
}
td->evtdev = newdev;
--
^ permalink raw reply [flat|nested] 11+ messages in thread* [patch 2/6] clockevents: prevent endless loop in periodic broadcast handler
2008-09-03 21:36 [patch 0/6] final clockevents/hpet fixes Thomas Gleixner
2008-09-03 21:36 ` [patch 1/6] clockevents: Prevent clockevent event_handler ending up handler_noop Thomas Gleixner
@ 2008-09-03 21:36 ` Thomas Gleixner
2008-09-03 21:37 ` [patch 3/6] clockevents: enforce reprogram in oneshot setup Thomas Gleixner
` (4 subsequent siblings)
6 siblings, 0 replies; 11+ messages in thread
From: Thomas Gleixner @ 2008-09-03 21:36 UTC (permalink / raw)
To: LKML
Cc: Ingo Molnar, Venkatesh Pallipadi, Luiz Fernando N. Capitulino,
Dmitry Nezhevenko
[-- Attachment #1: clockevents-fix-broadcast-mode.patch --]
[-- Type: text/plain, Size: 1526 bytes --]
The reprogramming of the periodic broadcast handler was broken,
when the first programming returned -ETIME. The clockevents code
stores the new expiry value in the clock events device next_event field
only when the programming time has not been elapsed yet. The loop in
question calculates the new expiry value from the next_event value
and therefor never increases.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
kernel/time/tick-broadcast.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
Index: linux-2.6/kernel/time/tick-broadcast.c
===================================================================
--- linux-2.6.orig/kernel/time/tick-broadcast.c
+++ linux-2.6/kernel/time/tick-broadcast.c
@@ -175,6 +175,8 @@ static void tick_do_periodic_broadcast(v
*/
static void tick_handle_periodic_broadcast(struct clock_event_device *dev)
{
+ ktime_t next;
+
tick_do_periodic_broadcast();
/*
@@ -185,10 +187,13 @@ static void tick_handle_periodic_broadca
/*
* Setup the next period for devices, which do not have
- * periodic mode:
+ * periodic mode. We read dev->next_event first and add to it
+ * when the event alrady expired. clockevents_program_event()
+ * sets dev->next_event only when the event is really
+ * programmed to the device.
*/
- for (;;) {
- ktime_t next = ktime_add(dev->next_event, tick_period);
+ for (next = dev->next_event; ;) {
+ next = ktime_add(next, tick_period);
if (!clockevents_program_event(dev, next, ktime_get()))
return;
--
^ permalink raw reply [flat|nested] 11+ messages in thread* [patch 3/6] clockevents: enforce reprogram in oneshot setup
2008-09-03 21:36 [patch 0/6] final clockevents/hpet fixes Thomas Gleixner
2008-09-03 21:36 ` [patch 1/6] clockevents: Prevent clockevent event_handler ending up handler_noop Thomas Gleixner
2008-09-03 21:36 ` [patch 2/6] clockevents: prevent endless loop in periodic broadcast handler Thomas Gleixner
@ 2008-09-03 21:37 ` Thomas Gleixner
2008-09-03 21:37 ` [patch 4/6] clockevents: prevent multiple init/shutdown Thomas Gleixner
` (3 subsequent siblings)
6 siblings, 0 replies; 11+ messages in thread
From: Thomas Gleixner @ 2008-09-03 21:37 UTC (permalink / raw)
To: LKML
Cc: Ingo Molnar, Venkatesh Pallipadi, Luiz Fernando N. Capitulino,
Dmitry Nezhevenko
[-- Attachment #1: clockevents-enforce-reprogram-in-oneshot-setup.patch --]
[-- Type: text/plain, Size: 1830 bytes --]
In tick_oneshot_setup we program the device to the given next_event,
but we do not check the return value. We need to make sure that the
device is programmed enforced so the interrupt handler engine starts
working. Split out the reprogramming function from tick_program_event()
and call it with the device, which was handed in to tick_setup_oneshot().
Set the force argument, so the devices is firing an interrupt.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
kernel/time/tick-oneshot.c | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
Index: linux-2.6/kernel/time/tick-oneshot.c
===================================================================
--- linux-2.6.orig/kernel/time/tick-oneshot.c
+++ linux-2.6/kernel/time/tick-oneshot.c
@@ -23,11 +23,11 @@
#include "tick-internal.h"
/**
- * tick_program_event
+ * tick_program_event internal worker function
*/
-int tick_program_event(ktime_t expires, int force)
+static int __tick_program_event(struct clock_event_device *dev,
+ ktime_t expires, int force)
{
- struct clock_event_device *dev = __get_cpu_var(tick_cpu_device).evtdev;
ktime_t now = ktime_get();
while (1) {
@@ -41,6 +41,16 @@ int tick_program_event(ktime_t expires,
}
/**
+ * tick_program_event
+ */
+int tick_program_event(ktime_t expires, int force)
+{
+ struct clock_event_device *dev = __get_cpu_var(tick_cpu_device).evtdev;
+
+ return __tick_program_event(dev, expires, force);
+}
+
+/**
* tick_resume_onshot - resume oneshot mode
*/
void tick_resume_oneshot(void)
@@ -61,7 +71,7 @@ void tick_setup_oneshot(struct clock_eve
{
newdev->event_handler = handler;
clockevents_set_mode(newdev, CLOCK_EVT_MODE_ONESHOT);
- clockevents_program_event(newdev, next_event, ktime_get());
+ __tick_program_event(newdev, next_event, 1);
}
/**
--
^ permalink raw reply [flat|nested] 11+ messages in thread* [patch 4/6] clockevents: prevent multiple init/shutdown
2008-09-03 21:36 [patch 0/6] final clockevents/hpet fixes Thomas Gleixner
` (2 preceding siblings ...)
2008-09-03 21:37 ` [patch 3/6] clockevents: enforce reprogram in oneshot setup Thomas Gleixner
@ 2008-09-03 21:37 ` Thomas Gleixner
2008-09-03 21:37 ` [patch 5/6] clockevents: prevent endless loop lockup Thomas Gleixner
` (2 subsequent siblings)
6 siblings, 0 replies; 11+ messages in thread
From: Thomas Gleixner @ 2008-09-03 21:37 UTC (permalink / raw)
To: LKML
Cc: Ingo Molnar, Venkatesh Pallipadi, Luiz Fernando N. Capitulino,
Dmitry Nezhevenko
[-- Attachment #1: clockevents-prevent-multiple-init-shutdown.patch --]
[-- Type: text/plain, Size: 2263 bytes --]
While chasing the C1E/HPET bugreports I went through the clock events
code inch by inch and found that the broadcast device can be initialized
and shutdown multiple times. Multiple shutdowns are not critical, but
useless waste of time. Multiple initializations are simply broken. Another
CPU might have the device in use already after the first initialization and
the second init could just render it unusable again.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
kernel/time/tick-broadcast.c | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
Index: linux-2.6/kernel/time/tick-broadcast.c
===================================================================
--- linux-2.6.orig/kernel/time/tick-broadcast.c
+++ linux-2.6/kernel/time/tick-broadcast.c
@@ -210,7 +210,7 @@ static void tick_do_broadcast_on_off(voi
struct clock_event_device *bc, *dev;
struct tick_device *td;
unsigned long flags, *reason = why;
- int cpu;
+ int cpu, bc_stopped;
spin_lock_irqsave(&tick_broadcast_lock, flags);
@@ -228,6 +228,8 @@ static void tick_do_broadcast_on_off(voi
if (!tick_device_is_functional(dev))
goto out;
+ bc_stopped = cpus_empty(tick_broadcast_mask);
+
switch (*reason) {
case CLOCK_EVT_NOTIFY_BROADCAST_ON:
case CLOCK_EVT_NOTIFY_BROADCAST_FORCE:
@@ -250,9 +252,10 @@ static void tick_do_broadcast_on_off(voi
break;
}
- if (cpus_empty(tick_broadcast_mask))
- clockevents_set_mode(bc, CLOCK_EVT_MODE_SHUTDOWN);
- else {
+ if (cpus_empty(tick_broadcast_mask)) {
+ if (!bc_stopped)
+ clockevents_set_mode(bc, CLOCK_EVT_MODE_SHUTDOWN);
+ } else if (bc_stopped) {
if (tick_broadcast_device.mode == TICKDEV_MODE_PERIODIC)
tick_broadcast_start_periodic(bc);
else
@@ -501,9 +504,12 @@ static void tick_broadcast_clear_oneshot
*/
void tick_broadcast_setup_oneshot(struct clock_event_device *bc)
{
- bc->event_handler = tick_handle_oneshot_broadcast;
- clockevents_set_mode(bc, CLOCK_EVT_MODE_ONESHOT);
- bc->next_event.tv64 = KTIME_MAX;
+ /* Set it up only once ! */
+ if (bc->event_handler != tick_handle_oneshot_broadcast) {
+ bc->event_handler = tick_handle_oneshot_broadcast;
+ clockevents_set_mode(bc, CLOCK_EVT_MODE_ONESHOT);
+ bc->next_event.tv64 = KTIME_MAX;
+ }
}
/*
--
^ permalink raw reply [flat|nested] 11+ messages in thread* [patch 5/6] clockevents: prevent endless loop lockup
2008-09-03 21:36 [patch 0/6] final clockevents/hpet fixes Thomas Gleixner
` (3 preceding siblings ...)
2008-09-03 21:37 ` [patch 4/6] clockevents: prevent multiple init/shutdown Thomas Gleixner
@ 2008-09-03 21:37 ` Thomas Gleixner
2008-09-03 21:37 ` [patch 6/6] HPET: make minimum reprogramming delta useful Thomas Gleixner
2008-09-03 23:00 ` [patch 0/6] final clockevents/hpet fixes Dmitry Nezhevenko
6 siblings, 0 replies; 11+ messages in thread
From: Thomas Gleixner @ 2008-09-03 21:37 UTC (permalink / raw)
To: LKML
Cc: Ingo Molnar, Venkatesh Pallipadi, Luiz Fernando N. Capitulino,
Dmitry Nezhevenko
[-- Attachment #1: clockevents-prevent-endless-loop-lockup.patch --]
[-- Type: text/plain, Size: 4356 bytes --]
The C1E/HPET bug reports on AMDX2/RS690 systems where tracked down to a
too small value of the HPET minumum delta for programming an event.
The clockevents code needs to enforce an interrupt event on the clock event
device in some cases. The enforcement code was stupid and naive, as it just
added the minimum delta to the current time and tried to reprogram the device.
When the minimum delta is too small, then this loops forever.
Add a sanity check. Allow reprogramming to fail 3 times, then print a warning
and double the minimum delta value to make sure, that this does not happen again.
Use the same function for both tick-oneshot and tick-broadcast code.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
kernel/time/tick-broadcast.c | 10 +---------
kernel/time/tick-internal.h | 2 ++
kernel/time/tick-oneshot.c | 36 ++++++++++++++++++++++++++++++------
3 files changed, 33 insertions(+), 15 deletions(-)
Index: linux-2.6/kernel/time/tick-broadcast.c
===================================================================
--- linux-2.6.orig/kernel/time/tick-broadcast.c
+++ linux-2.6/kernel/time/tick-broadcast.c
@@ -372,16 +372,8 @@ cpumask_t *tick_get_broadcast_oneshot_ma
static int tick_broadcast_set_event(ktime_t expires, int force)
{
struct clock_event_device *bc = tick_broadcast_device.evtdev;
- ktime_t now = ktime_get();
- int res;
- for(;;) {
- res = clockevents_program_event(bc, expires, now);
- if (!res || !force)
- return res;
- now = ktime_get();
- expires = ktime_add(now, ktime_set(0, bc->min_delta_ns));
- }
+ return tick_dev_program_event(bc, expires, force);
}
int tick_resume_broadcast_oneshot(struct clock_event_device *bc)
Index: linux-2.6/kernel/time/tick-internal.h
===================================================================
--- linux-2.6.orig/kernel/time/tick-internal.h
+++ linux-2.6/kernel/time/tick-internal.h
@@ -17,6 +17,8 @@ extern void tick_handle_periodic(struct
extern void tick_setup_oneshot(struct clock_event_device *newdev,
void (*handler)(struct clock_event_device *),
ktime_t nextevt);
+extern int tick_dev_program_event(struct clock_event_device *dev,
+ ktime_t expires, int force);
extern int tick_program_event(ktime_t expires, int force);
extern void tick_oneshot_notify(void);
extern int tick_switch_to_oneshot(void (*handler)(struct clock_event_device *));
Index: linux-2.6/kernel/time/tick-oneshot.c
===================================================================
--- linux-2.6.orig/kernel/time/tick-oneshot.c
+++ linux-2.6/kernel/time/tick-oneshot.c
@@ -25,18 +25,42 @@
/**
* tick_program_event internal worker function
*/
-static int __tick_program_event(struct clock_event_device *dev,
- ktime_t expires, int force)
+int tick_dev_program_event(struct clock_event_device *dev, ktime_t expires,
+ int force)
{
ktime_t now = ktime_get();
+ int i;
- while (1) {
+ for (i = 0;;) {
int ret = clockevents_program_event(dev, expires, now);
if (!ret || !force)
return ret;
+
+ /*
+ * We tried 2 times to program the device with the given
+ * min_delta_ns. If that's not working then we double it
+ * and emit a warning.
+ */
+ if (++i > 2) {
+ printk(KERN_WARNING "CE: __tick_program_event of %s is "
+ "stuck %llx %llx\n", dev->name ? dev->name : "?",
+ now.tv64, expires.tv64);
+ printk(KERN_WARNING
+ "CE: increasing min_delta_ns %ld to %ld nsec\n",
+ dev->min_delta_ns, dev->min_delta_ns << 1);
+ WARN_ON(1);
+
+ /* Double the min. delta and try again */
+ if (!dev->min_delta_ns)
+ dev->min_delta_ns = 5000;
+ else
+ dev->min_delta_ns <<= 1;
+ i = 0;
+ }
+
now = ktime_get();
- expires = ktime_add(now, ktime_set(0, dev->min_delta_ns));
+ expires = ktime_add_ns(now, dev->min_delta_ns);
}
}
@@ -47,7 +71,7 @@ int tick_program_event(ktime_t expires,
{
struct clock_event_device *dev = __get_cpu_var(tick_cpu_device).evtdev;
- return __tick_program_event(dev, expires, force);
+ return tick_dev_program_event(dev, expires, force);
}
/**
@@ -71,7 +95,7 @@ void tick_setup_oneshot(struct clock_eve
{
newdev->event_handler = handler;
clockevents_set_mode(newdev, CLOCK_EVT_MODE_ONESHOT);
- __tick_program_event(newdev, next_event, 1);
+ tick_dev_program_event(newdev, next_event, 1);
}
/**
--
^ permalink raw reply [flat|nested] 11+ messages in thread* [patch 6/6] HPET: make minimum reprogramming delta useful
2008-09-03 21:36 [patch 0/6] final clockevents/hpet fixes Thomas Gleixner
` (4 preceding siblings ...)
2008-09-03 21:37 ` [patch 5/6] clockevents: prevent endless loop lockup Thomas Gleixner
@ 2008-09-03 21:37 ` Thomas Gleixner
2008-09-03 23:00 ` [patch 0/6] final clockevents/hpet fixes Dmitry Nezhevenko
6 siblings, 0 replies; 11+ messages in thread
From: Thomas Gleixner @ 2008-09-03 21:37 UTC (permalink / raw)
To: LKML
Cc: Ingo Molnar, Venkatesh Pallipadi, Luiz Fernando N. Capitulino,
Dmitry Nezhevenko
[-- Attachment #1: hpet-make-minimum-delta-useful.patch --]
[-- Type: text/plain, Size: 1310 bytes --]
The minimum reprogramming delta was hardcoded in HPET ticks,
which is stupid as it does not work with faster running HPETs.
The C1E idle patches made this prominent on AMD/RS690 chipsets,
where the HPET runs with 25MHz. Set it to 5us which seems to be
a reasonable value and fixes the problems on the bug reporters
machines. We have a further sanity check now in the clock events,
which increases the delta when it is not sufficient.
Tested-by: Luiz Fernando N. Capitulino <lcapitulino@mandriva.com.br>
Tested-by: Dmitry Nezhevenko <dion@inhex.net>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/x86/kernel/hpet.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
Index: linux-2.6/arch/x86/kernel/hpet.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/hpet.c
+++ linux-2.6/arch/x86/kernel/hpet.c
@@ -210,8 +210,8 @@ static void hpet_legacy_clockevent_regis
/* Calculate the min / max delta */
hpet_clockevent.max_delta_ns = clockevent_delta2ns(0x7FFFFFFF,
&hpet_clockevent);
- hpet_clockevent.min_delta_ns = clockevent_delta2ns(0x30,
- &hpet_clockevent);
+ /* 5 usec minimum reprogramming delta. */
+ hpet_clockevent.min_delta_ns = 5000;
/*
* Start hpet with the boot cpu mask and make it
--
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [patch 0/6] final clockevents/hpet fixes
2008-09-03 21:36 [patch 0/6] final clockevents/hpet fixes Thomas Gleixner
` (5 preceding siblings ...)
2008-09-03 21:37 ` [patch 6/6] HPET: make minimum reprogramming delta useful Thomas Gleixner
@ 2008-09-03 23:00 ` Dmitry Nezhevenko
2008-09-03 23:04 ` Thomas Gleixner
2008-09-04 18:33 ` Luiz Fernando N. Capitulino
6 siblings, 2 replies; 11+ messages in thread
From: Dmitry Nezhevenko @ 2008-09-03 23:00 UTC (permalink / raw)
To: Thomas Gleixner
Cc: LKML, Ingo Molnar, Venkatesh Pallipadi, Shaohua Li,
Luiz Fernando N. Capitulino
On Wed, Sep 03, 2008 at 09:36:25PM -0000, Thomas Gleixner wrote:
> This is the final version of the various clockevents fixes, which I will
> send to Linus. Can you please give it a try on your machines, so we can
> be sure that I did not mess up anything again.
>
Applied full patchset on top of 2.6.27-rc5. Works great on my affected system.
Tested-by: Dmitry Nezhevenko <dion@inhex.net>
--
WBR, Dmitry
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [patch 0/6] final clockevents/hpet fixes
2008-09-03 23:00 ` [patch 0/6] final clockevents/hpet fixes Dmitry Nezhevenko
@ 2008-09-03 23:04 ` Thomas Gleixner
2008-09-03 23:27 ` Dmitry Nezhevenko
2008-09-04 18:33 ` Luiz Fernando N. Capitulino
1 sibling, 1 reply; 11+ messages in thread
From: Thomas Gleixner @ 2008-09-03 23:04 UTC (permalink / raw)
To: Dmitry Nezhevenko
Cc: LKML, Ingo Molnar, Venkatesh Pallipadi, Shaohua Li,
Luiz Fernando N. Capitulino
On Thu, 4 Sep 2008, Dmitry Nezhevenko wrote:
> On Wed, Sep 03, 2008 at 09:36:25PM -0000, Thomas Gleixner wrote:
> > This is the final version of the various clockevents fixes, which I will
> > send to Linus. Can you please give it a try on your machines, so we can
> > be sure that I did not mess up anything again.
> >
>
> Applied full patchset on top of 2.6.27-rc5. Works great on my affected system.
>
> Tested-by: Dmitry Nezhevenko <dion@inhex.net>
Dimitry, thanks for testing.
Are you up for another debug session in the next days to figure out
why the x86 tree exposes this IPI warning ?
Thanks,
tglx
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [patch 0/6] final clockevents/hpet fixes
2008-09-03 23:04 ` Thomas Gleixner
@ 2008-09-03 23:27 ` Dmitry Nezhevenko
0 siblings, 0 replies; 11+ messages in thread
From: Dmitry Nezhevenko @ 2008-09-03 23:27 UTC (permalink / raw)
To: Thomas Gleixner
Cc: LKML, Ingo Molnar, Venkatesh Pallipadi, Shaohua Li,
Luiz Fernando N. Capitulino
On Thu, Sep 04, 2008 at 01:04:00AM +0200, Thomas Gleixner wrote:
> Dimitry, thanks for testing.
>
> Are you up for another debug session in the next days to figure out
> why the x86 tree exposes this IPI warning ?
>
Sure. I'm subscribed to LKML however don't read it often. So please CC me
--
WBR, Dmitry
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [patch 0/6] final clockevents/hpet fixes
2008-09-03 23:00 ` [patch 0/6] final clockevents/hpet fixes Dmitry Nezhevenko
2008-09-03 23:04 ` Thomas Gleixner
@ 2008-09-04 18:33 ` Luiz Fernando N. Capitulino
1 sibling, 0 replies; 11+ messages in thread
From: Luiz Fernando N. Capitulino @ 2008-09-04 18:33 UTC (permalink / raw)
To: Dmitry Nezhevenko
Cc: Thomas Gleixner, LKML, Ingo Molnar, Venkatesh Pallipadi,
Shaohua Li
Em Thu, 4 Sep 2008 02:00:03 +0300
Dmitry Nezhevenko <dion@inhex.net> escreveu:
| On Wed, Sep 03, 2008 at 09:36:25PM -0000, Thomas Gleixner wrote:
| > This is the final version of the various clockevents fixes, which I will
| > send to Linus. Can you please give it a try on your machines, so we can
| > be sure that I did not mess up anything again.
| >
|
| Applied full patchset on top of 2.6.27-rc5. Works great on my affected system.
Worked for me too, sorry for the delay I was testing this on more
machines.
--
Luiz Fernando N. Capitulino
^ permalink raw reply [flat|nested] 11+ messages in thread