03 Jun, 2011

1 commit

  • The detection of spurios interrupts is currently limited to first level
    handler. In force-threaded mode we never notice if the threaded irq does
    not feel responsible.
    This patch catches the return value of the threaded handler and forwards
    it to the spurious detector. If the primary handler returns only
    IRQ_WAKE_THREAD then the spourious detector ignores it because it gets
    called again from the threaded handler.

    [ tglx: Report the erroneous return value early and bail out ]

    Signed-off-by: Sebastian Andrzej Siewior
    Link: http://lkml.kernel.org/r/1306824972-27067-2-git-send-email-sebastian@breakpoint.cc
    Signed-off-by: Thomas Gleixner

    Sebastian Andrzej Siewior
     

29 Mar, 2011

1 commit


28 Mar, 2011

2 commits


26 Feb, 2011

2 commits

  • For level type interrupts we need to track how many threads are on
    flight to avoid useless interrupt storms when not all thread handlers
    have finished yet. Keep track of the woken threads and only unmask
    when there are no more threads in flight.

    Yes, I'm lazy and using a bitfield. But not only because I'm lazy, the
    main reason is that it's way simpler than using a refcount. A refcount
    based solution would need to keep track of various things like
    crashing the irq thread, spurious interrupts coming in,
    disables/enables, free_irq() and some more. The bitfield keeps the
    tracking simple and makes things just work. It's also nicely confined
    to the thread code pathes and does not require additional checks all
    over the place.

    Signed-off-by: Thomas Gleixner
    Cc: Peter Zijlstra
    LKML-Reference:

    Thomas Gleixner
     
  • The WARN_ON_ONCE in handle_percpu_event() which emits a warning when
    an action handler returns with interrupts enabled is not really
    useful. It does not reveal the interrupt number and handler function
    which caused it. Make it WARN_ONCE() and add the information.

    Reported-by: Tony Luck
    Signed-off-by: Thomas Gleixner

    Thomas Gleixner
     

22 Feb, 2011

1 commit

  • note_interrupt wants to be called with the combined result of all
    handlers called, not with the last one. If it's a shared interrupt
    then the last handler might return IRQ_NONE often enough to trigger
    the spurious dectector which turns off a perfectly fine working
    interrupt line. Bug was introduced in commit 1277a532(genirq: Simplify
    handle_irq_event()).

    Yes, I really messed up there. First the variable ret should not have
    been named differently to avoid similarity with retval. Second it
    should have been declared in the do {} loop.

    Rename it to res and move it into the do {} loop and vanish under a
    huge brown paperbag.

    Reported-bisected-tested-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Thomas Gleixner
     

19 Feb, 2011

6 commits


21 Jan, 2011

1 commit

  • All architectures are finally converted. Remove the cruft.

    Signed-off-by: Thomas Gleixner
    Cc: Richard Henderson
    Cc: Mike Frysinger
    Cc: David Howells
    Cc: Tony Luck
    Cc: Greg Ungerer
    Cc: Michal Simek
    Acked-by: David Howells
    Cc: Kyle McMartin
    Acked-by: Benjamin Herrenschmidt
    Cc: Chen Liqin
    Cc: "David S. Miller"
    Cc: Chris Metcalf
    Cc: Jeff Dike

    Thomas Gleixner
     

12 Oct, 2010

1 commit

  • kernel/irq/handle.c has become a dumpground for random code in random
    order. Split out the irq descriptor management and the dummy irq_chip
    implementation into separate files. Cleanup the include maze while at
    it.

    No code change.

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Ingo Molnar

    Thomas Gleixner
     

04 Oct, 2010

10 commits


13 Apr, 2010

1 commit

  • Running interrupt handlers with interrupts enabled can cause stack
    overflows. That has been observed with multiqueue NICs delivering all
    their interrupts to a single core. We might band aid that somehow by
    checking the interrupt stacks, but the real safe fix is to run the irq
    handlers with interrupts disabled.

    Drivers for whacky hardware still can reenable them in the handler
    itself, if the need arises. (They do already due to lockdep)

    The risk of doing this is rather low:

    - lockdep already enforces this
    - CONFIG_NOHZ has shaken out the drivers which relied on jiffies updates
    - time keeping is not longer sensitive to the timer interrupt being delayed

    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner
    Cc: Peter Zijlstra
    Cc: Alan Cox
    Cc: Andi Kleen
    Cc: David Miller
    Cc: Greg Kroah-Hartman
    Cc: Arnaldo Carvalho de Melo
    Cc: Linus Torvalds
    LKML-Reference:

    Ingo Molnar
     

18 Feb, 2010

3 commits


15 Dec, 2009

1 commit


12 Oct, 2009

1 commit


29 Aug, 2009

1 commit


12 Jun, 2009

3 commits

  • Ingo had

    [ 0.000000] ------------[ cut here ]------------
    [ 0.000000] WARNING: at mm/bootmem.c:537 alloc_arch_preferred_bootmem+0x2b/0x71()
    [ 0.000000] Hardware name: System Product Name
    [ 0.000000] Modules linked in:
    [ 0.000000] Pid: 0, comm: swapper Tainted: G W 2.6.30-tip-03087-g0bb2618-dirty #52506
    [ 0.000000] Call Trace:
    [ 0.000000] [] warn_slowpath_common+0x60/0x90
    [ 0.000000] [] warn_slowpath_null+0xd/0x10
    [ 0.000000] [] alloc_arch_preferred_bootmem+0x2b/0x71
    [ 0.000000] [] ___alloc_bootmem_nopanic+0x2b/0x9a
    [ 0.000000] [] ? lock_release+0xac/0xb2
    [ 0.000000] [] ___alloc_bootmem+0xe/0x2d
    [ 0.000000] [] __alloc_bootmem+0xa/0xc
    [ 0.000000] [] alloc_bootmem_cpumask_var+0x21/0x26
    [ 0.000000] [] early_irq_init+0x15/0x10d
    [ 0.000000] [] start_kernel+0x167/0x326
    [ 0.000000] [] __init_begin+0x6b/0x70
    [ 0.000000] ---[ end trace 4eaa2a86a8e2da23 ]---
    [ 0.000000] NR_IRQS:2304 nr_irqs:424
    [ 0.000000] CPU 0 irqstacks, hard=821e6000 soft=821e7000

    we need to update init_irq_default_affinity

    Signed-off-by: Yinghai Lu
    Signed-off-by: Pekka Enberg

    Yinghai Lu
     
  • Fixes the following problem:

    [ 0.000000] Experimental hierarchical RCU init done.
    [ 0.000000] NR_IRQS:4352 nr_irqs:256
    [ 0.000000] ------------[ cut here ]------------
    [ 0.000000] WARNING: at mm/bootmem.c:537 alloc_arch_preferred_bootmem+0x40/0x7e()
    [ 0.000000] Hardware name: To Be Filled By O.E.M.
    [ 0.000000] Pid: 0, comm: swapper Not tainted 2.6.30-tip-02161-g7a74539-dirty #59709
    [ 0.000000] Call Trace:
    [ 0.000000] [] ? alloc_arch_preferred_bootmem+0x40/0x7e
    [ 0.000000] [] warn_slowpath_common+0x88/0xcb
    [ 0.000000] [] warn_slowpath_null+0x27/0x3d
    [ 0.000000] [] alloc_arch_preferred_bootmem+0x40/0x7e
    [ 0.000000] [] ___alloc_bootmem_nopanic+0x4e/0xec
    [ 0.000000] [] ___alloc_bootmem+0x20/0x61
    [ 0.000000] [] __alloc_bootmem+0x1e/0x34
    [ 0.000000] [] early_irq_init+0x6d/0x118
    [ 0.000000] [] ? early_idt_handler+0x0/0x71
    [ 0.000000] [] start_kernel+0x192/0x394
    [ 0.000000] [] ? early_idt_handler+0x0/0x71
    [ 0.000000] [] x86_64_start_reservations+0xb4/0xcf
    [ 0.000000] [] ? __init_begin+0x0/0x140
    [ 0.000000] [] x86_64_start_kernel+0x158/0x17b
    [ 0.000000] ---[ end trace a7919e7f17c0a725 ]---
    [ 0.000000] Fast TSC calibration using PIT
    [ 0.000000] Detected 2002.510 MHz processor.
    [ 0.004000] Console: colour VGA+ 80x25

    Reported-by: Ingo Molnar
    Signed-off-by: Pekka Enberg

    Pekka Enberg
     
  • Don't hardcode to node zero for early boot IRQ setup memory allocations.

    [ penberg@cs.helsinki.fi: minor cleanups ]
    Cc: Ingo Molnar
    Cc: Johannes Weiner
    Cc: Linus Torvalds
    Signed-off-by: Yinghai Lu
    Signed-off-by: Pekka Enberg

    Yinghai Lu
     

11 Jun, 2009

1 commit

  • * 'tracing-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (244 commits)
    Revert "x86, bts: reenable ptrace branch trace support"
    tracing: do not translate event helper macros in print format
    ftrace/documentation: fix typo in function grapher name
    tracing/events: convert block trace points to TRACE_EVENT(), fix !CONFIG_BLOCK
    tracing: add protection around module events unload
    tracing: add trace_seq_vprint interface
    tracing: fix the block trace points print size
    tracing/events: convert block trace points to TRACE_EVENT()
    ring-buffer: fix ret in rb_add_time_stamp
    ring-buffer: pass in lockdep class key for reader_lock
    tracing: add annotation to what type of stack trace is recorded
    tracing: fix multiple use of __print_flags and __print_symbolic
    tracing/events: fix output format of user stack
    tracing/events: fix output format of kernel stack
    tracing/trace_stack: fix the number of entries in the header
    ring-buffer: discard timestamps that are at the start of the buffer
    ring-buffer: try to discard unneeded timestamps
    ring-buffer: fix bug in ring_buffer_discard_commit
    ftrace: do not profile functions when disabled
    tracing: make trace pipe recognize latency format flag
    ...

    Linus Torvalds
     

23 May, 2009

1 commit

  • Presently non-legacy IRQs have their irq_desc allocated with
    kzalloc_node(). This assumes that all callers of irq_to_desc_node_alloc()
    will be sufficiently late in the boot process that kmalloc is available.

    While porting sparseirq support to sh this blew up immediately, as at the
    time that we register the CPU's interrupt vector map only bootmem is
    available. Check slab_is_available() to work out which path to use.

    [ Impact: fix SH early boot crash with sparseirq enabled ]

    Signed-off-by: Paul Mundt
    Acked-by: Yinghai Lu
    Cc: Andrew Morton
    Cc: Mel Gorman
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Paul Mundt
     

12 May, 2009

1 commit


07 May, 2009

1 commit


01 May, 2009

1 commit