Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 302329 Details for
Bug 438878
megaraid SAS driver corruption on 2.6.24.3-29.el5rt.i386 kernel
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
ioapic quirk for i386
ioapic_quirk_i386-v2.patch (text/plain), 5.63 KB, created by
Michal Schmidt
on 2008-04-14 11:34:58 UTC
(
hide
)
Description:
ioapic quirk for i386
Filename:
MIME Type:
Creator:
Michal Schmidt
Created:
2008-04-14 11:34:58 UTC
Size:
5.63 KB
patch
obsolete
>diff -Nurp linux-2.6.24.4.i686.orig/arch/x86/kernel/io_apic_32.c linux-2.6.24.4.i686/arch/x86/kernel/io_apic_32.c >--- linux-2.6.24.4.i686.orig/arch/x86/kernel/io_apic_32.c 2008-04-14 13:01:55.000000000 +0200 >+++ linux-2.6.24.4.i686/arch/x86/kernel/io_apic_32.c 2008-04-14 13:03:54.000000000 +0200 >@@ -75,6 +75,12 @@ int nr_ioapic_registers[MAX_IO_APICS]; > static int disable_timer_pin_1 __initdata; > > /* >+ * Work around some broken (PCIe/PCI-X) chipsets that won't accept an IRQ mask >+ * by switching to APIC edge mode and back to level instead. >+ */ >+int ioapic_level_quirk __read_mostly; >+ >+/* > * Rough estimation of how many shared IRQs there are, can > * be changed anytime. > */ >@@ -287,6 +293,10 @@ static void unmask_IO_APIC_irq (unsigned > unsigned long flags; > > spin_lock_irqsave(&ioapic_lock, flags); >+ /* >+ * Always call quirk version, ensures we always unmask since we might >+ * change the quirk sysctl tunable at the wrong moment in time. >+ */ > __unmask_IO_APIC_irq(irq); > spin_unlock_irqrestore(&ioapic_lock, flags); > } >@@ -296,7 +306,10 @@ static void pcix_mask_IO_APIC_irq (unsig > unsigned long flags; > > spin_lock_irqsave(&ioapic_lock, flags); >- __pcix_mask_IO_APIC_irq(irq); >+ if (ioapic_level_quirk) >+ __pcix_mask_IO_APIC_irq(irq); >+ else >+ __mask_IO_APIC_irq(irq); > spin_unlock_irqrestore(&ioapic_lock, flags); > } > >@@ -1265,13 +1278,21 @@ static struct irq_chip pcix_ioapic_chip; > static void ioapic_register_intr(int irq, int vector, unsigned long trigger, > int pcix) > { >+ /* pcix is a missnomer, since it's just as likely to be PCIe */ > struct irq_chip *chip = pcix ? &pcix_ioapic_chip : &ioapic_chip; > >+ if (pcix && ioapic_level_quirk) >+ printk("IO-APIC: Detected an IO-APIC needing a special quirk. If you experience unusual interrupt problems, try booting with \"ioapic_level_quirk=0\", or \"noapic\", if that doesn't work either.\n"); >+ > if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) || > trigger == IOAPIC_LEVEL) { > irq_desc[irq].status |= IRQ_LEVEL; > set_irq_chip_and_handler_name(irq, chip, handle_fasteoi_irq, > pcix ? "pcix-fasteoi" : "fasteoi"); >+ /* >+ * NOTE: In theory non-MSI PCIe/PCI-X should never edge, so no quirk >+ * should be needed here in the longer term. >+ */ > } else { > irq_desc[irq].status &= ~IRQ_LEVEL; > set_irq_chip_and_handler_name(irq, chip, handle_edge_irq, >@@ -2380,6 +2401,22 @@ static int __init setup_enable_8254_time > __setup("disable_8254_timer", setup_disable_8254_timer); > __setup("enable_8254_timer", setup_enable_8254_timer); > >+static int __init setup_ioapic_level_quirk(char *str) >+{ >+ if (NULL == str) { >+ ioapic_level_quirk = 0; >+ return 0; >+ } >+ >+ if (0 == strcmp("0", str)) >+ ioapic_level_quirk = 0; >+ else >+ ioapic_level_quirk = 1; >+ >+ return 0; >+} >+early_param("ioapic_level_quirk", setup_ioapic_level_quirk); >+ > /* > * Called after all the initialization is done. If we didnt find any > * APIC bugs then we can allow the modify fast path >diff -Nurp linux-2.6.24.4.i686.orig/arch/x86/kernel/quirks.c linux-2.6.24.4.i686/arch/x86/kernel/quirks.c >--- linux-2.6.24.4.i686.orig/arch/x86/kernel/quirks.c 2008-04-14 13:01:56.000000000 +0200 >+++ linux-2.6.24.4.i686/arch/x86/kernel/quirks.c 2008-04-14 13:04:36.000000000 +0200 >@@ -394,7 +394,6 @@ void force_hpet_resume(void) > > #endif > >-#ifdef CONFIG_X86_64 > #ifdef CONFIG_X86_IO_APIC > > extern int ioapic_level_quirk; >@@ -429,4 +428,3 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I > PCI_DEVICE_ID_INTEL_E8500_X4_PORT_A1, > legacy_ioapic_mask_quirk); > #endif /* CONFIG_X86_IO_APIC */ >-#endif /* CONFIG_x86_64 */ >diff -Nurp linux-2.6.24.4.i686.orig/kernel/irq/spurious.c linux-2.6.24.4.i686/kernel/irq/spurious.c >--- linux-2.6.24.4.i686.orig/kernel/irq/spurious.c 2008-04-14 13:01:56.000000000 +0200 >+++ linux-2.6.24.4.i686/kernel/irq/spurious.c 2008-04-14 13:03:54.000000000 +0200 >@@ -17,11 +17,9 @@ > > static int irqfixup __read_mostly; > >-#ifdef CONFIG_X86_64 > #ifdef CONFIG_X86_IO_APIC > extern int ioapic_level_quirk; > #endif /* CONFIG_X86_IO_APIC */ >-#endif /* CONFIG_X86_64 */ > > /* > * Recovery handler for misrouted interrupts. >@@ -120,7 +118,6 @@ __report_bad_irq(unsigned int irq, struc > printk(KERN_ERR "irq %d: nobody cared (try booting with " > "the \"irqpoll\" option)\n", irq); > >-#ifdef CONFIG_X86_64 > #ifdef CONFIG_X86_IO_APIC > if (!ioapic_level_quirk) { > printk(KERN_ERR "irq %d: Some systems using an IO-APIC require a special quirk to workaround\n", irq); >@@ -128,7 +125,6 @@ __report_bad_irq(unsigned int irq, struc > printk(KERN_ERR "irq %d: please try booting with the \"ioapic_level_quirk=1\" option.\n", irq); > } > #endif /* CONFIG_X86_IO_APIC */ >-#endif /* CONFIG_X86_64 */ > } > dump_stack(); > printk(KERN_ERR "handlers:\n"); >diff -Nurp linux-2.6.24.4.i686.orig/kernel/sysctl.c linux-2.6.24.4.i686/kernel/sysctl.c >--- linux-2.6.24.4.i686.orig/kernel/sysctl.c 2008-04-14 13:01:56.000000000 +0200 >+++ linux-2.6.24.4.i686/kernel/sysctl.c 2008-04-14 13:03:54.000000000 +0200 >@@ -180,11 +180,9 @@ int sysctl_legacy_va_layout; > extern int prove_locking; > extern int lock_stat; > >-#ifdef CONFIG_X86_64 > #ifdef CONFIG_X86_IO_APIC > extern int ioapic_level_quirk; > #endif /* CONFIG_X86_IO_APIC */ >-#endif /* CONFIG_X86_64 */ > > /* The default sysctl tables: */ > >@@ -863,7 +861,6 @@ static struct ctl_table kern_table[] = { > .proc_handler = &proc_dostring, > .strategy = &sysctl_string, > }, >-#ifdef CONFIG_X86_64 > #ifdef CONFIG_X86_IO_APIC > { > .ctl_name = CTL_UNNUMBERED, >@@ -874,7 +871,6 @@ static struct ctl_table kern_table[] = { > .proc_handler = &proc_dointvec, > }, > #endif /* CONFIG_X86_IO_APIC */ >-#endif /* CONFIG_X86_64 */ > > /* > * NOTE: do not add new entries to this table unless you have read
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 438878
:
299054
|
299347
| 302329