Jeroen Van den Keybus wrote:
Could you post the patch you are successfully using to boot your
box? TIA,
--- linux-2.6.15/drivers/pci/msi.c 2006-01-03 04:21:10.000000000 +0100
+++ linux-2.6.15-ipipe/drivers/pci/msi.c 2006-02-17
16:48:21.000000000 +0100
@@ -185,10 +185,20 @@
spin_unlock_irqrestore(&msi_lock, flags);
}
+#if defined(CONFIG_IPIPE)
+/* Attention: only MSI without maskbits is currently fixed for I-PIPE */
+static void ack_msi_irq_wo_maskbit(unsigned int vector)
+{
+ __ack_APIC_irq();
+}
+#endif /* CONFIG_IPIPE */
+
static void end_msi_irq_wo_maskbit(unsigned int vector)
{
move_native_irq(vector);
+#if !defined(CONFIG_IPIPE)
ack_APIC_irq();
+#endif /* !CONFIG_IPIPE */
ack_APIC_irq() is nullified when CONFIG_IPIPE is enabled, and __ack_APIC_irq()
stands for the actual APIC acknowledging code. So the change above is not needed.
}
static void end_msi_irq_w_maskbit(unsigned int vector)
@@ -244,7 +254,11 @@
.shutdown = shutdown_msi_irq,
.enable = do_nothing,
.disable = do_nothing,
+#if defined(CONFIG_IPIPE)
+ .ack = ack_msi_irq_wo_maskbit,
+#else /* CONFIG_IPIPE */
.ack = do_nothing,
+#endif /* !CONFIG_IPIPE */
.end = end_msi_irq_wo_maskbit,
.set_affinity = set_msi_irq_affinity
};
Ok; unless my brain is completely toast, the last patch I recently posted does the
same, but extends the support to the "MSI and MSI-X with masking bit" cases. Could
you test in on your box with a vanilla 2.6.15 when time allows? If it works, then
I will roll out a new Adeos/x86 patch including this fix. TIA,
--- 2.6.15/drivers/pci/msi.c 2006-01-03 04:21:10.000000000 +0100
+++ 2.6.15-ipipe/drivers/pci/msi.c 2006-02-16 10:30:27.000000000 +0100
@@ -149,6 +149,21 @@
msi_set_mask_bit(vector, 0);
}
+#ifdef CONFIG_IPIPE
+static void ack_MSI_irq_w_maskbits(unsigned int vector)
+{
+ mask_MSI_irq(vector);
+ __ack_APIC_irq();
+}
+static void ack_MSI_irq_wo_maskbits(unsigned int vector)
+{
+ __ack_APIC_irq();
+}
+#else /* !CONFIG_IPIPE */
+#define ack_MSI_irq_wo_maskbits do_nothing
+#define ack_MSI_irq_w_maskbits mask_MSI_irq
+#endif /* CONFIG_IPIPE */
+
static unsigned int startup_msi_irq_wo_maskbit(unsigned int vector)
{
struct msi_desc *entry;
@@ -212,7 +227,7 @@
.shutdown = shutdown_msi_irq,
.enable = unmask_MSI_irq,
.disable = mask_MSI_irq,
- .ack = mask_MSI_irq,
+ .ack = ack_MSI_irq_w_maskbits,
.end = end_msi_irq_w_maskbit,
.set_affinity = set_msi_irq_affinity
};
@@ -228,7 +243,7 @@
.shutdown = shutdown_msi_irq,
.enable = unmask_MSI_irq,
.disable = mask_MSI_irq,
- .ack = mask_MSI_irq,
+ .ack = ack_MSI_irq_w_maskbits,
.end = end_msi_irq_w_maskbit,
.set_affinity = set_msi_irq_affinity
};
@@ -244,7 +259,7 @@
.shutdown = shutdown_msi_irq,
.enable = do_nothing,
.disable = do_nothing,
- .ack = do_nothing,
+ .ack = ack_MSI_irq_wo_maskbits,
.end = end_msi_irq_wo_maskbit,
.set_affinity = set_msi_irq_affinity
};
--
Philippe.