09 Oct, 2006

1 commit

  • Which vector an irq is assigned to now varies dynamically and is
    not needed outside of io_apic.c. So remove the possibility
    of accessing the information outside of io_apic.c and remove
    the silly macro that makes looking for users of irq_vector
    difficult.

    The fact this compiles ensures there aren't any more pieces
    of the old CONFIG_PCI_MSI weirdness that I failed to remove.

    Signed-off-by: Eric W. Biederman
    Signed-off-by: Linus Torvalds

    Eric W. Biederman
     

05 Oct, 2006

1 commit

  • Maintain a per-CPU global "struct pt_regs *" variable which can be used instead
    of passing regs around manually through all ~1800 interrupt handlers in the
    Linux kernel.

    The regs pointer is used in few places, but it potentially costs both stack
    space and code to pass it around. On the FRV arch, removing the regs parameter
    from all the genirq function results in a 20% speed up of the IRQ exit path
    (ie: from leaving timer_interrupt() to leaving do_IRQ()).

    Where appropriate, an arch may override the generic storage facility and do
    something different with the variable. On FRV, for instance, the address is
    maintained in GR28 at all times inside the kernel as part of general exception
    handling.

    Having looked over the code, it appears that the parameter may be handed down
    through up to twenty or so layers of functions. Consider a USB character
    device attached to a USB hub, attached to a USB controller that posts its
    interrupts through a cascaded auxiliary interrupt controller. A character
    device driver may want to pass regs to the sysrq handler through the input
    layer which adds another few layers of parameter passing.

    I've build this code with allyesconfig for x86_64 and i386. I've runtested the
    main part of the code on FRV and i386, though I can't test most of the drivers.
    I've also done partial conversion for powerpc and MIPS - these at least compile
    with minimal configurations.

    This will affect all archs. Mostly the changes should be relatively easy.
    Take do_IRQ(), store the regs pointer at the beginning, saving the old one:

    struct pt_regs *old_regs = set_irq_regs(regs);

    And put the old one back at the end:

    set_irq_regs(old_regs);

    Don't pass regs through to generic_handle_irq() or __do_IRQ().

    In timer_interrupt(), this sort of change will be necessary:

    - update_process_times(user_mode(regs));
    - profile_tick(CPU_PROFILING, regs);
    + update_process_times(user_mode(get_irq_regs()));
    + profile_tick(CPU_PROFILING);

    I'd like to move update_process_times()'s use of get_irq_regs() into itself,
    except that i386, alone of the archs, uses something other than user_mode().

    Some notes on the interrupt handling in the drivers:

    (*) input_dev() is now gone entirely. The regs pointer is no longer stored in
    the input_dev struct.

    (*) finish_unlinks() in drivers/usb/host/ohci-q.c needs checking. It does
    something different depending on whether it's been supplied with a regs
    pointer or not.

    (*) Various IRQ handler function pointers have been moved to type
    irq_handler_t.

    Signed-Off-By: David Howells
    (cherry picked from 1b16e7ac850969f38b375e511e3fa2f474a33867 commit)

    David Howells
     

04 Oct, 2006

2 commits

  • This patch removes the change in behavior of the irq allocation code when
    CONFIG_PCI_MSI is defined. Removing all instances of the assumption that irq
    == vector.

    create_irq is rewritten to first allocate a free irq and then to assign that
    irq a vector.

    assign_irq_vector is made static and the AUTO_ASSIGN case which allocates an
    vector not bound to an irq is removed.

    The ioapic vector methods are removed, and everything now works with irqs.

    The definition of NR_IRQS no longer depends on CONFIG_PCI_MSI

    [akpm@osdl.org: cleanup]
    Signed-off-by: Eric W. Biederman
    Cc: Ingo Molnar
    Cc: Thomas Gleixner
    Cc: Benjamin Herrenschmidt
    Cc: Rajesh Shah
    Cc: Andi Kleen
    Cc: "Protasevich, Natalie"
    Cc: "Luck, Tony"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Eric W. Biederman
     
  • This patch converts all the i386 PIC controllers (except VisWS and Voyager,
    which I could not test - but which should still work as old-style IRQ layers)
    to the new and simpler irq-chip interrupt handling layer.

    [akpm@osdl.org: build fix]
    [mingo@elte.hu: enable fasteoi handler for i386 level-triggered IO-APIC irqs]
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner
    Cc: Benjamin Herrenschmidt
    Cc: Roland Dreier
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ingo Molnar
     

30 Jun, 2006

1 commit


27 Jun, 2006

1 commit

  • x86_64 and i386 behave inconsistently when sending an IPI on vector 2
    (NMI_VECTOR). Make both behave the same, so IPI 2 is sent as NMI.

    The crash code was abusing send_IPI_allbutself() by passing a code
    instead of a vector, it only worked because crash knew about the
    internal code of send_IPI_allbutself(). Change crash to use NMI_VECTOR
    instead, and remove the comment about how crash was abusing the function.

    This patch is a pre-requisite for fixing the problem where sending an
    IPI as NMI would reboot some Dell Xeon systems. I cannot fix that
    problem while crash continus to abuse send_IPI_allbutself().

    It also removes the inconsistency between i386 and x86_64 for
    NMI_VECTOR. That will simplify all the RAS code that needs to bring
    all the cpus to a clean stop, even when one or more cpus are spinning
    disabled.

    Signed-off-by: Keith Owens
    Signed-off-by: Andi Kleen
    Signed-off-by: Linus Torvalds

    Keith Owens
     

26 Apr, 2006

1 commit


01 Oct, 2005

1 commit

  • include/asm/hw_irq.h:70: warning: `struct hw_interrupt_type' declared inside parameter list
    include/asm/hw_irq.h:70: warning: its scope is only this definition or declaration, which is probably not what you want

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

    Andrew Morton
     

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