Re: [patch] Real-Time Preemption, -RT-2.6.10-rc1-mm3-V0.7.25-1

From: Ingo Molnar
Date: Fri Nov 12 2004 - 14:12:52 EST



* Shane Shrybman <shrybman@xxxxxx> wrote:

> V0.7.25-1 has been stable here with the ivtv driver for 11 hrs. No
> sign of the ide dma time out issue either. Out of curiosity, do we
> know what solved that problem?

could you try the attached patch - does it trigger the DMA timeouts
again? There were 3 changes to the IOAPIC code that could have affected
your dma-timeout problem, this patch reverts all of them.

Mark's suggestion sounds quite plausible too - but the question is, your
timeout problems went away previously by tweaking io_apic.c, so it would
be nice to see that they are still gone even with the old 'broken'
io_apic.c logic. (none of the io_apic.c changes fixes any particular
bug, they are only latency optimizations, so i'd be surprised if they
really impacted your timeout problems.)

if the DMA timeouts are still gone even with this patch applied then i
think it's safe to conclude that Mark's explanation is the correct one,
and that it was starvation of the SCHED_OTHER IDE irq-thread that caused
the timeouts: it _really_ was a timeout. (a workaround would be to make
the timeout longer)

Ingo

--- linux/arch/i386/kernel/io_apic.c.orig2
+++ linux/arch/i386/kernel/io_apic.c
@@ -150,7 +150,7 @@ static void update_io_apic_cache(unsigne
}
}

-#define IOAPIC_CACHE
+// #define IOAPIC_CACHE
/*
* Some systems need a POST flush or else level-triggered interrupts
* generate lots of spurious interrupts due to the POST-ed write not
@@ -188,7 +188,7 @@ static void __modify_IO_APIC_irq (unsign
/*
* Force POST flush by reading:
*/
- reg = *(IO_APIC_BASE(entry->apic)+4);
+ reg = io_apic_read(entry->apic, 0x10 + pin*2);
#endif
if (!entry->next)
break;
@@ -1940,7 +1940,7 @@ static unsigned int startup_level_ioapic
* unacked local APIC is dangerous on SMP as it can prevent the
* delivery of IPIs and can thus cause deadlocks.)
*/
-#if defined(CONFIG_PREEMPT_HARDIRQS) && defined(CONFIG_SMP)
+#if defined(CONFIG_PREEMPT_HARDIRQS)

static void mask_and_ack_level_ioapic_irq(unsigned int irq)
{
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/