lkml.org 
[lkml]   [2008]   [Nov]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: Regression: Bisected, IRQ and MSI allocations screwed without sparse irq
    On Fri, 21 Nov 2008, Thomas Gleixner wrote:

    > On Fri, 21 Nov 2008, Jesper Dangaard Brouer wrote:
    >>> Can you please try the attached patch ?
    >>
    >> I have tried the patch and it solved the problem! :-)
    >>
    >> I'll gladly test other patches from your. Guess this patch needs to be
    >> brushed up before a mainline patch is ready.
    >
    > Ok, I queue it for mainline. This solves just the number of irqs
    > limitation, the rmmod problem still persists, right ?

    It solves both the irq limit and the NIU driver unload bug.

    We should give it a good description.
    I have cooked up a patch with a description below, will you accept that?

    Who's tree do you want it to go upsteam via?
    (You are listed as one of the X86 maintainers, but Ingo's tree seems more
    up-to-date. My patch below is agains DaveM's tree)

    Cheers,
    Jesper Brouer

    --
    -------------------------------------------------------------------
    MSc. Master of Computer Science
    Dept. of Computer Science, University of Copenhagen
    Author of http://www.adsl-optimizer.dk
    -------------------------------------------------------------------

    Fixing irq limit and NIU driver unload bug.

    Removing the config option HAVE_SPARSE_IRQ (commit
    3235e936c0cc3589309280b6f59e5096779adae3) revealed a regression that
    limited the number of irqs on the system.

    Besides limiting the number of IRQ, this also caused unloading of the
    NIU driver to fail during msi_free_irqs(). The reduced number of IRQs
    caused the NIU driver to use "IO-APIC" based IRQs instead of
    "PCI-MSI-edge".

    This patch changes probe_nr_irqs() to return NR_IRQS, which is
    basically the same as the NOT CONFIG_X86_IO_APIC case. Thus being
    fairly safe.

    Thus, solving both the irq limit and the NIU driver unload bug.

    Tested-by: Jesper Dangaard Brouer <hawk@comx.dk>
    Signed-off-by: Jesper Dangaard Brouer <hawk@comx.dk>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    ---
    arch/x86/kernel/io_apic.c | 22 +---------------------
    1 files changed, 1 insertions(+), 21 deletions(-)

    diff --git a/arch/x86/kernel/io_apic.c b/arch/x86/kernel/io_apic.c
    index c9513e1..1fec0f9 100644
    --- a/arch/x86/kernel/io_apic.c
    +++ b/arch/x86/kernel/io_apic.c
    @@ -3608,27 +3608,7 @@ int __init io_apic_get_redir_entries (int ioapic)

    int __init probe_nr_irqs(void)
    {
    - int idx;
    - int nr = 0;
    -#ifndef CONFIG_XEN
    - int nr_min = 32;
    -#else
    - int nr_min = NR_IRQS;
    -#endif
    -
    - for (idx = 0; idx < nr_ioapics; idx++)
    - nr += io_apic_get_redir_entries(idx) + 1;
    -
    - /* double it for hotplug and msi and nmi */
    - nr <<= 1;
    -
    - /* something wrong ? */
    - if (nr < nr_min)
    - nr = nr_min;
    - if (WARN_ON(nr > NR_IRQS))
    - nr = NR_IRQS;
    -
    - return nr;
    + return NR_IRQS;
    }

    /* --------------------------------------------------------------------------
    --
    1.5.4.2


    \
     
     \ /
      Last update: 2008-11-21 20:39    [W:0.049 / U:0.116 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site