03 Oct, 2011
1 commit
-
The ARM GIC interrupt controller offers per CPU interrupts (PPIs),
which are usually used to connect local timers to each core. Each CPU
has its own private interface to the GIC, and only sees the PPIs that
are directly connect to it.While these timers are separate devices and have a separate interrupt
line to a core, they all use the same IRQ number.For these devices, request_irq() is not the right API as it assumes
that an IRQ number is visible by a number of CPUs (through the
affinity setting), but makes it very awkward to express that an IRQ
number can be handled by all CPUs, and yet be a different interrupt
line on each CPU, requiring a different dev_id cookie to be passed
back to the handler.The *_percpu_irq() functions is designed to overcome these
limitations, by providing a per-cpu dev_id vector:int request_percpu_irq(unsigned int irq, irq_handler_t handler,
const char *devname, void __percpu *percpu_dev_id);
void free_percpu_irq(unsigned int, void __percpu *);
int setup_percpu_irq(unsigned int irq, struct irqaction *new);
void remove_percpu_irq(unsigned int irq, struct irqaction *act);
void enable_percpu_irq(unsigned int irq);
void disable_percpu_irq(unsigned int irq);The API has a number of limitations:
- no interrupt sharing
- no threading
- common handler across all the CPUsOnce the interrupt is requested using setup_percpu_irq() or
request_percpu_irq(), it must be enabled by each core that wishes its
local interrupt to be delivered.Based on an initial patch by Thomas Gleixner.
Signed-off-by: Marc Zyngier
Cc: linux-arm-kernel@lists.infradead.org
Link: http://lkml.kernel.org/r/1316793788-14500-2-git-send-email-marc.zyngier@arm.com
Signed-off-by: Thomas Gleixner
12 Sep, 2011
1 commit
-
If an irq_chip provides .irq_shutdown(), but neither of .irq_disable() or
.irq_mask(), free_irq() crashes when jumping to NULL.
Fix this by only trying .irq_disable() and .irq_mask() if there's no
.irq_shutdown() provided.This revives the symmetry with irq_startup(), which tries .irq_startup(),
.irq_enable(), and irq_unmask(), and makes it consistent with the comment for
irq_chip.irq_shutdown() in , which says:* @irq_shutdown: shut down the interrupt (defaults to ->disable if NULL)
This is also how __free_irq() behaved before the big overhaul, cfr. e.g.
3b56f0585fd4c02d047dc406668cb40159b2d340 ("genirq: Remove bogus conditional"),
where the core interrupt code always overrode .irq_shutdown() to
.irq_disable() if .irq_shutdown() was NULL.Signed-off-by: Geert Uytterhoeven
Cc: linux-m68k@lists.linux-m68k.org
Link: http://lkml.kernel.org/r/1315742394-16036-2-git-send-email-geert@linux-m68k.org
Cc: stable@kernel.org
Signed-off-by: Thomas Gleixner
18 May, 2011
1 commit
-
Export handle_simple_irq, irq_modify_status, irq_alloc_descs,
irq_free_descs and generic_handle_irq to allow their usage in
modules. First user is IIO, which wants to be built modular, but needs
to be able to create irq chips, allocate and configure interrupt
descriptors and handle demultiplexing interrupts.[ tglx: Moved the uninlinig of generic_handle_irq to a separate patch ]
Signed-off-by: Jonathan Cameron
Link: http://lkml.kernel.org/r/%3C1305711544-505-1-git-send-email-jic23%40cam.ac.uk%3E
Signed-off-by: Thomas Gleixner
23 Apr, 2011
1 commit
-
This adds support for disabling threading on a per-IRQ basis via the IRQ
status instead of the IRQ flow, which is necessary for interrupts that
don't follow the natural IRQ flow channels, such as those that are
virtually created.The new APIs added are simply:
irq_set_thread()
irq_set_nothread()which follow the rest of the IRQ status routines.
Chained handlers also have IRQ_NOTHREAD set on them automatically, making
the lack of threading explicit rather than implicit. Subsequently, the
nothread flag can be viewed through the standard genirq debugging
facilities.[ tglx: Fixed cleanup fallout ]
Signed-off-by: Paul Mundt
Link: http://lkml.kernel.org/r/%3C20110406210135.GF18426%40linux-sh.org%3E
Signed-off-by: Thomas Gleixner
31 Mar, 2011
1 commit
-
Fixes generated by 'codespell' and manually reviewed.
Signed-off-by: Lucas De Marchi
30 Mar, 2011
1 commit
-
Fixes these errors:
kernel/irq/chip.c: In function 'handle_edge_eoi_irq':
kernel/irq/chip.c:517: warning: label 'out_unlock' defined but not used
kernel/irq/chip.c:503: error: label 'out_eoi' used but not definedSigned-off-by: Stephen Rothwell
Signed-off-by: Linus Torvalds
29 Mar, 2011
2 commits
-
Signed-off-by: Thomas Gleixner
-
I missed the CONFIG_GENERIC_PENDING_IRQ dependency in the affinity
related functions and the IRQ_LEVEL propagation into irq_data
state. Did not pop up on my main test platforms. :(Signed-off-by: Thomas Gleixner
Tested-by: David Daney
28 Mar, 2011
2 commits
-
This is a replacment for the cell flow handler which is in the way of
cleanups. Must be selected to avoid general bloat.Signed-off-by: Thomas Gleixner
-
We really need these flags for some of the interrupt chips. Move it
from internal state to irq_data and provide proper accessors.Signed-off-by: Thomas Gleixner
Cc: David Daney
27 Mar, 2011
4 commits
-
Add a flag which indicates that the on/offline callback should only be
called on enabled interrupts.Signed-off-by: Thomas Gleixner
-
[ tglx: Removed the enabled argument as this is now available in
irq_data ]Signed-off-by: David Daney
Cc: linux-mips@linux-mips.org
Cc: ralf@linux-mips.org
LKML-Reference:
Signed-off-by: Thomas Gleixner -
Some irq_chip implementation require to know the disabled state of the
interrupt in certain callbacks. Add a state flag and accessor to
irq_data.Signed-off-by: Thomas Gleixner
-
The helper macros and functions like for_each_active_irq() don't work
unless the irq is in the allocated_irqs set.In the case of !CONFIG_SPARSE_IRQ, instead of forcing all users of the
irq infrastructure to explicitly call irq_reserve_irq(), do it for
them.Signed-off-by: David Daney
Cc: linux-mips@linux-mips.org
Cc: ralf@linux-mips.org
LKML-Reference:
Signed-off-by: Thomas Gleixner
02 Mar, 2011
1 commit
-
The fasteoi handler must mask the interrupt line in oneshot mode
otherwise we end up with an irq storm.Signed-off-by: Thomas Gleixner
22 Feb, 2011
1 commit
-
We lazy disable interrupt lines, so only mark the line masked, when
the chip provides an irq_disable callback.Signed-off-by: Thomas Gleixner
19 Feb, 2011
24 commits
-
Some chips want irq_eoi() only called when an interrupt is actually
handled. So they have checks for INPROGRESS and DISABLED in their
irq_eoi callbacks. Add a chip flag, which allows to handle that in the
generic code. No impact on the fastpath.Signed-off-by: Thomas Gleixner
-
sparc64 needs to call a preflow handler on certain interrupts befor
calling the action chain. Integrate it into handle_fasteoi_irq. Must
be enabled via CONFIG_IRQ_FASTEOI_PREFLOW. No impact when disabled.Signed-off-by: Thomas Gleixner
Cc: David S. Miller -
No need to have separate functions if we have one plus inline wrappers.
Signed-off-by: Thomas Gleixner
-
Convert the management functions to use the common irq_get/put
function.Signed-off-by: Thomas Gleixner
-
These transition helpers are stale for years now. Remove them.
Signed-off-by: Thomas Gleixner
-
Required by x86.
Signed-off-by: Thomas Gleixner
-
irq_chips, which require to mask the chip before changing the trigger
type should set this flag. So the core takes care of it and the
requirement for looking into desc->status in the chip goes away.Signed-off-by: Thomas Gleixner
Cc: Linus Walleij
Cc: Lars-Peter Clausen -
Use wrappers to keep them away from the core code.
Signed-off-by: Thomas Gleixner
-
That's the data structure chip functions get provided. Also allow them
to signal the core code that they updated the flags in irq_data.state
by returning IRQ_SET_MASK_OK_NOCOPY. The default is unchanged.The type bits should be accessed via:
val = irqd_get_trigger_type(irqdata);
and
irqd_set_trigger_type(irqdata, val);Coders who access them directly will be tracked down and slapped with
stinking trouts.Signed-off-by: Thomas Gleixner
-
That's the right data structure to look at for arch code.
Accessor functions are provided.
irqd_is_per_cpu(irqdata);
irqd_can_balance(irqdata);Coders who access them directly will be tracked down and slapped with
stinking trouts.Signed-off-by: Thomas Gleixner
-
Keep status in sync until all users are fixed.
Signed-off-by: Thomas Gleixner
-
Keep status in sync until all users are fixed.
Signed-off-by: Thomas Gleixner
-
Keep status in sync until all abusers are fixed.
Signed-off-by: Thomas Gleixner
-
No users outside of core.
Signed-off-by: Thomas Gleixner
-
No users outside of core.
Signed-off-by: Thomas Gleixner
-
We need to maintain the flag for now in both fields status and istate.
Add a CONFIG_GENERIC_HARDIRQS_NO_COMPAT switch to allow testing w/o
the status one. Wrap the access to status IRQ_INPROGRESS in a inline
which can be turned of with CONFIG_GENERIC_HARDIRQS_NO_COMPAT along
with the define.There is no reason that anything outside of core looks at this. That
needs some modifications, but we'll get there.Signed-off-by: Thomas Gleixner
-
No users outside of core.
Signed-off-by: Thomas Gleixner
-
No need for a separate function in the core code.
Signed-off-by: Thomas Gleixner
-
Signed-off-by: Thomas Gleixner
-
Signed-off-by: Thomas Gleixner
-
It's safe to drop the IRQ_INPROGRESS flag between action chain walks
as we are protected by desc->lock.Signed-off-by: Thomas Gleixner
-
Signed-off-by: Thomas Gleixner
-
Signed-off-by: Thomas Gleixner
-
Signed-off-by: Thomas Gleixner