Messages in this thread | | | Date | Thu, 24 Apr 2008 17:40:22 -0700 | From | "Yinghai Lu" <> | Subject | Re: [PATCH 1/2] pci/irq: restore mask_bits in msi shutdown -v3 |
| |
On Wed, Apr 23, 2008 at 2:56 PM, Yinghai Lu <yhlu.kernel.send@gmail.com> wrote: > > Yinghai found after using 2.6.25-rc3 later to kexec RHEL 5.1, > NIC can not be used. > > bisected to > > | commit 89d694b9dbe769ca1004e01db0ca43964806a611 > | Author: Thomas Gleixner <tglx@linutronix.de> > | Date: Mon Feb 18 18:25:17 2008 +0100 > | > | genirq: do not leave interupts enabled on free_irq > | > | The default_disable() function was changed in commit: > | > | 76d2160147f43f982dfe881404cfde9fd0a9da21 > | genirq: do not mask interrupts by default > | > | It removed the mask function in favour of the default delayed > | interrupt disabling. Unfortunately this also broke the shutdown in > | free_irq() when the last handler is removed from the interrupt for > | those architectures which rely on the default implementations. Now we > | can end up with a enabled interrupt line after the last handler was > | removed, which can result in spurious interrupts. > | > | Fix this by adding a default_shutdown function, which is only > | installed, when the irqchip implementation does provide neither a > | shutdown nor a disable function. > | > | [@stable: affected versions: .21 - .24 ] > > for MSI, default_shutdown will call mask_bit for msi device. so all mask bits > will left disabled after free_irq. then if kexec next kernel that only can > use msi_enable bit. all device's MSI can not be used. > > want to try to restore MSI mask bits that is saved before using msi in first > kernel. > > Eric said: > This is over complicated and for hardware that erroneously triggers > a msi irq after free_irq may have potential problems. > > So lets do the much simpler, much safer, and more general method of > restoring the mask bit to it's pci reset defined value (enabled) when > we disable the kernels use of msi. > > it will work, because pci_diable_msi is called after free_irq is called. > > v3: extend msi_set_mask_bit to msi_set_mask_bits to take mask, so we can fully > restore that to 0x00 instead of 0xfe. > > Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
andrew,
this one should replace
[PATCH] x86_64: restore mask_bits in msi shutdown
in -mm
YH
| |