lkml.org 
[lkml]   [2012]   [Jan]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[20/90] PCI: msi: Disable msi interrupts when we initialize a pci device
    3.0-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: "Eric W. Biederman" <ebiederm@xmission.com>

    commit a776c491ca5e38c26d9f66923ff574d041e747f4 upstream.

    I traced a nasty kexec on panic boot failure to the fact that we had
    screaming msi interrupts and we were not disabling the msi messages at
    kernel startup. The booting kernel had not enabled those interupts so
    was not prepared to handle them.

    I can see no reason why we would ever want to leave the msi interrupts
    enabled at boot if something else has enabled those interrupts. The pci
    spec specifies that msi interrupts should be off by default. Drivers
    are expected to enable the msi interrupts if they want to use them. Our
    interrupt handling code reprograms the interrupt handlers at boot and
    will not be be able to do anything useful with an unexpected interrupt.

    This patch applies cleanly all of the way back to 2.6.32 where I noticed
    the problem.

    Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
    Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    drivers/pci/msi.c | 10 ++++++++++
    1 file changed, 10 insertions(+)

    --- a/drivers/pci/msi.c
    +++ b/drivers/pci/msi.c
    @@ -869,5 +869,15 @@ EXPORT_SYMBOL(pci_msi_enabled);

    void pci_msi_init_pci_dev(struct pci_dev *dev)
    {
    + int pos;
    INIT_LIST_HEAD(&dev->msi_list);
    +
    + /* Disable the msi hardware to avoid screaming interrupts
    + * during boot. This is the power on reset default so
    + * usually this should be a noop.
    + */
    + pos = pci_find_capability(dev, PCI_CAP_ID_MSI);
    + if (pos)
    + msi_set_enable(dev, pos, 0);
    + msix_set_enable(dev, 0);
    }



    \
     
     \ /
      Last update: 2012-01-24 01:11    [W:4.061 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site