11 Jan, 2009

1 commit

  • Impact: build fix

    Ingo Molnar wrote:

    > tip/arch/blackfin/kernel/irqchip.c: In function 'show_interrupts':
    > tip/arch/blackfin/kernel/irqchip.c:85: error: 'struct kernel_stat' has no member named 'irqs'
    > make[2]: *** [arch/blackfin/kernel/irqchip.o] Error 1
    > make[2]: *** Waiting for unfinished jobs....
    >

    So could move kstat_irqs array to irq_desc struct.

    (s390, m68k, sparc) are not touched yet, because they don't support genirq

    Signed-off-by: Yinghai Lu
    Signed-off-by: Ingo Molnar

    Yinghai Lu
     

25 Jul, 2008

1 commit


06 Feb, 2008

1 commit

  • Code tidying -
    the pid field of struct irq_fd isn't used, so it is removed
    os_set_fd_async needed to read flags before changing them, it
    doesn't need a pid passed in because it can call getpid itself, and a
    block of unused code needed deleting
    os_get_exec_close was unused, so it is removed
    ptrace_child called _exit for historical reasons which are no
    longer valid, so just calls exit instead

    Signed-off-by: Jeff Dike
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     

15 Nov, 2007

1 commit

  • The spurious IRQ testing in request_irq is mishandled in um_request_irq, which
    sets the incoming file descriptors non-blocking only after request_irq
    succeeds. This results in the spurious irq calling read on a blocking
    descriptor, and a hang.

    Fixed by reversing the O_NONBLOCK setting and the request_irq call.

    Signed-off-by: Jeff Dike
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     

20 Oct, 2007

1 commit


17 Oct, 2007

3 commits

  • Formatting changes in the files which have been changed in the course
    of folding foo_skas functions into their callers. These include:
    copyright updates
    header file trimming
    style fixes
    adding severity to printks

    These changes should be entirely non-functional.

    Signed-off-by: Jeff Dike
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     
  • This patch makes a number of simplifications enabled by the removal of
    CHOOSE_MODE. There were lots of functions that looked like

    int foo(args){
    foo_skas(args);
    }

    The bodies of foo_skas are now folded into foo, and their declarations (and
    sometimes entire header files) are deleted.

    In addition, the union uml_pt_regs, which was a union between the tt and skas
    register formats, is now a struct, with the tt-mode arm of the union being
    removed.

    It turns out that usr2_handler was unused, so it is gone.

    Signed-off-by: Jeff Dike
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     
  • This patchset throws out tt mode, which has been non-functional for a while.

    This is done in phases, interspersed with code cleanups on the affected files.

    The removal is done as follows:
    remove all code, config options, and files which depend on
    CONFIG_MODE_TT
    get rid of the CHOOSE_MODE macro, which decided whether to
    call tt-mode or skas-mode code, and replace invocations with their
    skas portions
    replace all now-trivial procedures with their skas equivalents

    There are now a bunch of now-redundant pieces of data structures, including
    mode-specific pieces of the thread structure, pt_regs, and mm_context. These
    are all replaced with their skas-specific contents.

    As part of the ongoing style compliance project, I made a style pass over all
    files that were changed. There are three such patches, one for each phase,
    covering the files affected by that phase but no later ones.

    I noticed that we weren't freeing the LDT state associated with a process when
    it exited, so that's fixed in one of the later patches.

    The last patch is a tidying patch which I've had for a while, but which caused
    inexplicable crashes under tt mode. Since that is no longer a problem, this
    can now go in.

    This patch:

    Start getting rid of tt mode support.

    This patch throws out CONFIG_MODE_TT and all config options, code, and files
    which depend on it.

    CONFIG_MODE_SKAS is gone and everything that depends on it is included
    unconditionally.

    The few changed lines are in re-written Kconfig help, lines which needed
    something skas-related removed from them, and a few more which weren't
    strictly deletions.

    Signed-off-by: Jeff Dike
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     

20 Sep, 2007

1 commit

  • This patch fixes a crash caused by an interrupt coming in when an IRQ stack
    is being torn down. When this happens, handle_signal will loop, setting up
    the IRQ stack again because the tearing down had finished, and handling
    whatever signals had come in.

    However, to_irq_stack returns a mask of pending signals to be handled, plus
    bit zero is set if the IRQ stack was already active, and thus shouldn't be
    torn down. This causes a problem because when handle_signal goes around
    the loop, sig will be zero, and to_irq_stack will duly set bit zero in the
    returned mask, faking handle_signal into believing that it shouldn't tear
    down the IRQ stack and return thread_info pointers back to their original
    values.

    This will eventually cause a crash, as the IRQ stack thread_info will
    continue pointing to the original task_struct and an interrupt will look
    into it after it has been freed.

    The fix is to stop passing a signal number into to_irq_stack. Rather, the
    pending signals mask is initialized beforehand with the bit for sig already
    set. References to sig in to_irq_stack can be replaced with references to
    the mask.

    [akpm@linux-foundation.org: use UL]
    Signed-off-by: Jeff Dike
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     

17 Jul, 2007

1 commit

  • UML had two wrapper procedures for kmalloc, um_kmalloc and um_kmalloc_atomic
    because the flag constants weren't available in userspace code.
    kern_constants.h had made kernel constants available for a long time, so there
    is no need for these wrappers any more. Rather, userspace code calls kmalloc
    directly with the userspace versions of the gfp flags.

    kmalloc isn't a real procedure, so I had to essentially copy the inline
    wrapper around __kmalloc.

    vmalloc also had its own wrapper for no good reason. This is now gone.

    Signed-off-by: Jeff Dike
    Cc: Paolo 'Blaisorblade' Giarrusso
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     

11 May, 2007

2 commits

  • Add a separate IRQ stack. This differs from i386 in having the entire
    interrupt run on a separate stack rather than starting on the normal kernel
    stack and switching over once some preparation has been done. The underlying
    mechanism, is of course, sigaltstack.

    Another difference is that interrupts that happen in userspace are handled on
    the normal kernel stack. These cause a wait wakeup instead of a signal
    delivery so there is no point in trying to switch stacks for these. There's
    no other stuff on the stack, so there is no extra stack consumption.

    This quirk makes it possible to have the entire interrupt run on a separate
    stack - process preemption (and calls to schedule()) happens on a normal
    kernel stack. If we enable CONFIG_PREEMPT, this will need to be rethought.

    The IRQ stack for CPU 0 is declared in the same way as the initial kernel
    stack. IRQ stacks for other CPUs will be allocated dynamically.

    An extra field was added to the thread_info structure. When the active
    thread_info is copied to the IRQ stack, the real_thread field points back to
    the original stack. This makes it easy to tell where to copy the thread_info
    struct back to when the interrupt is finished. It also serves as a marker of
    a nested interrupt. It is NULL for the first interrupt on the stack, and
    non-NULL for any nested interrupts.

    Care is taken to behave correctly if a second interrupt comes in when the
    thread_info structure is being set up or taken down. I could just disable
    interrupts here, but I don't feel like giving up any of the performance gained
    by not flipping signals on and off.

    If an interrupt comes in during these critical periods, the handler can't run
    because it has no idea what shape the stack is in. So, it sets a bit for its
    signal in a global mask and returns. The outer handler will deal with this
    signal itself.

    Atomicity is had with xchg. A nested interrupt that needs to bail out will
    xchg its signal mask into pending_mask and repeat in case yet another
    interrupt hit at the same time, until the mask stabilizes.

    The outermost interrupt will set up the thread_info and xchg a zero into
    pending_mask when it is done. At this point, nested interrupts will look at
    ->real_thread and see that no setup needs to be done. They can just continue
    normally.

    Similar care needs to be taken when exiting the outer handler. If another
    interrupt comes in while it is copying the thread_info, it will drop a bit
    into pending_mask. The outer handler will check this and if it is non-zero,
    will loop, set up the stack again, and handle the interrupt.

    Signed-off-by: Jeff Dike
    Cc: Paolo 'Blaisorblade' Giarrusso
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     
  • Some tidying of the irq code before introducing irq stacks. Mostly
    style fixes, but the timer handler calls the timer code directly
    rather than going through the generic sig_handler_common_skas.

    Signed-off-by: Jeff Dike
    Cc: Paolo 'Blaisorblade' Giarrusso
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     

08 May, 2007

2 commits


08 Mar, 2007

1 commit


12 Feb, 2007

1 commit

  • Tidying the irq code -
    make a variable static
    activate_fd can call kmalloc directly since it's now kernel code
    added a no-locking comment
    fixed a style violation

    Signed-off-by: Jeff Dike
    Cc: Paolo 'Blaisorblade' Giarrusso
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     

21 Oct, 2006

1 commit


09 Oct, 2006

2 commits

  • Use the new typedef for interrupt handler function pointers rather than
    actually spelling out the full thing each time. This was scripted with the
    following small shell script:

    #!/bin/sh
    egrep -nHrl -e 'irqreturn_t[ ]*[(][*]' $* |
    while read i
    do
    echo $i
    perl -pi -e 's/irqreturn_t\s*[(]\s*[*]\s*([_a-zA-Z0-9]*)\s*[)]\s*[(]\s*int\s*,\s*void\s*[*]\s*[)]/irq_handler_t \1/g' $i || exit $?
    done

    Signed-Off-By: David Howells

    David Howells
     
  • Real fix for UML pt_regs stuff. Note set_irq_regs() logics in there...

    Signed-off-by: Al Viro
    Signed-off-by: Linus Torvalds

    Al Viro
     

06 Oct, 2006

1 commit

  • Fixup broken UML build due to 7d12e780e003f93433d49ce78cfedf4b4c52adc5
    "IRQ: Maintain regs pointer globally rather than passing to IRQ handlers".

    Cc: David Howells
    Cc: Jeff Dike
    Cc: Paolo "Blaisorblade" Giarrusso
    Signed-off-by: Pekka Enberg
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Pekka Enberg
     

04 Oct, 2006

1 commit


26 Sep, 2006

1 commit

  • - Various cleanups in the sigio code.

    - Removed explicit zero-initializations of a few structures.

    - Improved some error messages.

    - An API change - there was an asymmetry between reactivate_fd calling
    maybe_sigio_broken, which goes through all the machinery of figuring out if
    a file descriptor supports SIGIO and applying the workaround to it if not,
    and deactivate_fd, which just turns off the descriptor.

    This is changed so that only activate_fd calls maybe_sigio_broken, when
    the descriptor is first seen. reactivate_fd now calls add_sigio_fd, which
    is symmetric with ignore_sigio_fd.

    This removes a recursion which makes a critical section look more critical
    than it really was, obsoleting a big comment to that effect. This requires
    keeping track of all descriptors which are getting the SIGIO treatment, not
    just the ones being polled at any given moment, so that reactivate_fd,
    through add_sigio_fd, doesn't try to tell the SIGIO thread about descriptors
    it doesn't care about.

    Signed-off-by: Jeff Dike
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     

11 Jul, 2006

3 commits


03 Jul, 2006

1 commit


30 Jun, 2006

1 commit

  • This patch-queue improves the generic IRQ layer to be truly generic, by adding
    various abstractions and features to it, without impacting existing
    functionality.

    While the queue can be best described as "fix and improve everything in the
    generic IRQ layer that we could think of", and thus it consists of many
    smaller features and lots of cleanups, the one feature that stands out most is
    the new 'irq chip' abstraction.

    The irq-chip abstraction is about describing and coding and IRQ controller
    driver by mapping its raw hardware capabilities [and quirks, if needed] in a
    straightforward way, without having to think about "IRQ flow"
    (level/edge/etc.) type of details.

    This stands in contrast with the current 'irq-type' model of genirq
    architectures, which 'mixes' raw hardware capabilities with 'flow' details.
    The patchset supports both types of irq controller designs at once, and
    converts i386 and x86_64 to the new irq-chip design.

    As a bonus side-effect of the irq-chip approach, chained interrupt controllers
    (master/slave PIC constructs, etc.) are now supported by design as well.

    The end result of this patchset intends to be simpler architecture-level code
    and more consolidation between architectures.

    We reused many bits of code and many concepts from Russell King's ARM IRQ
    layer, the merging of which was one of the motivations for this patchset.

    This patch:

    rename desc->handler to desc->chip.

    Originally i did not want to do this, because it's a big patch. But having
    both "desc->handler", "desc->handle_irq" and "action->handler" caused a
    large degree of confusion and made the code appear alot less clean than it
    truly is.

    I have also attempted a dual approach as well by introducing a
    desc->chip alias - but that just wasnt robust enough and broke
    frequently.

    So lets get over with this quickly. The conversion was done automatically
    via scripts and converts all the code in the kernel.

    This renaming patch is the first one amongst the patches, so that the
    remaining patches can stay flexible and can be merged and split up
    without having some big monolithic patch act as a merge barrier.

    [akpm@osdl.org: build fix]
    [akpm@osdl.org: another build fix]
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ingo Molnar
     

02 May, 2006

1 commit


28 Mar, 2006

1 commit

  • The serial UML OS-abstraction layer patch (um/kernel dir).

    This joins irq_user.c and irq.c files.

    Signed-off-by: Gennady Sharapov
    Signed-off-by: Jeff Dike
    Cc: Paolo 'Blaisorblade' Giarrusso
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     

30 Sep, 2005

1 commit


05 Sep, 2005

1 commit

  • This patch makes UML use host AIO support when it (and
    /usr/include/linux/aio_abi.h) are present. This is only the support, with no
    consumers - a consumer is coming in the next patch.

    Signed-off-by: Jeff Dike
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     

22 Jun, 2005

1 commit

  • With Chris Wedgwood

    Currently UML must explicitly call the UML-specific
    free_irq_by_irq_and_dev() for each free_irq call it's done.

    This is needed because ->shutdown and/or ->disable are only called when the
    last "action" for that irq is removed.

    Instead, for UML shared IRQs (UML IRQs are very often, if not always,
    shared), for each dev_id some setup is done, which must be cleared on the
    release of that fd. For instance, for each open console a new instance
    (i.e. new dev_id) of the same IRQ is requested().

    Exactly, a fd is stored in an array (pollfds), which is after read by a
    host thread and passed to poll(). Each event registered by poll() triggers
    an interrupt. So, for each free_irq() we must remove the corresponding
    host fd from the table, which we do via this -release() method.

    In this patch we add an appropriate hook for this, and remove all uses of
    it by pointing the hook to the said procedure; this is safe to do since the
    said procedure.

    Also some cosmetic improvements are included.

    This is heavily based on some work by Chris Wedgwood, which however didn't
    get the patch merged for something I'd call a "misunderstanding" (the need
    for this patch wasn't cleanly explained, thus adding the generic hook was
    felt as undesirable).

    Signed-off-by: Paolo 'Blaisorblade' Giarrusso
    CC: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Paolo 'Blaisorblade' Giarrusso
     

06 May, 2005

1 commit

  • This makes SIGWINCH work again, and fixes a couple of SIGWINCH-associated
    crashes. First, the sigio thread disables SIGWINCH because all hell breaks
    loose if it ever gets one and tries to call the signal handling code. Second,
    there was a problem with deferencing tty structs after they were freed. The
    SIGWINCH support for a tty wasn't being turned off or freed after the tty went
    away.

    Signed-off-by: Jeff Dike
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     

17 Apr, 2005

1 commit

  • Initial git repository build. I'm not bothering with the full history,
    even though we have it. We can create a separate "historical" git
    archive of that later if we want to, and in the meantime it's about
    3.2GB when imported into git - space that would just make the early
    git days unnecessarily complicated, when we don't have a lot of good
    infrastructure for it.

    Let it rip!

    Linus Torvalds