Thomas Gleixner
ef1c2cc885
xen/events: Add support for effective affinity mask
...
Update the effective affinity mask when an interrupt was successfully
targeted to a CPU.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235446.799944725@linutronix.de
2017-06-22 18:21:23 +02:00
Thomas Gleixner
0e24f7c9f6
x86/apic: Add irq_data argument to apic->cpu_mask_to_apicid()
...
The decision to which CPUs an interrupt is effectively routed happens in
the various apic->cpu_mask_to_apicid() implementations
To support effective affinity masks this information needs to be updated in
irq_data. Add a pointer to irq_data to the callbacks and feed it through
the call chain.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235446.720739075@linutronix.de
2017-06-22 18:21:22 +02:00
Thomas Gleixner
91cd9cb7ee
x86/apic: Move cpumask and to core code
...
All implementations of apic->cpu_mask_to_apicid_and() and the two incoming
cpumasks to search for the target.
Move that operation to the call site and rename it to cpu_mask_to_apicid()
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235446.641575516@linutronix.de
2017-06-22 18:21:22 +02:00
Thomas Gleixner
52b166af40
x86/apic: Move online masking to core code
...
All implementations of apic->cpu_mask_to_apicid_and() mask out the offline
cpus. The callsite already has a mask available, which has the offline CPUs
removed. Use that and remove the extra bits.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235446.560868224@linutronix.de
2017-06-22 18:21:21 +02:00
Thomas Gleixner
bbcf9574bc
x86/uv: Use default_cpu_mask_to_apicid_and()
...
Same functionality except the extra bits ored on the apicid.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235446.482841015@linutronix.de
2017-06-22 18:21:21 +02:00
Thomas Gleixner
ad95212ee6
x86/apic: Move flat_cpu_mask_to_apicid_and() into C source
...
No point in having inlines assigned to function pointers at multiple
places. Just bloats the text.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235446.405975721@linutronix.de
2017-06-22 18:21:21 +02:00
Thomas Gleixner
415fcf1a22
genirq/cpuhotplug: Use effective affinity mask
...
If the architecture supports the effective affinity mask, migrating
interrupts away which are not targeted by the effective mask is
pointless.
They can stay in the user or system supplied affinity mask, but won't be
targetted at any given point as the affinity setter functions need to
validate against the online cpu mask anyway.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235446.328488490@linutronix.de
2017-06-22 18:21:21 +02:00
Thomas Gleixner
0d3f54257d
genirq: Introduce effective affinity mask
...
There is currently no way to evaluate the effective affinity mask of a
given interrupt. Many irq chips allow only a single target CPU or a subset
of CPUs in the affinity mask.
Updating the mask at the time of setting the affinity to the subset would
be counterproductive because information for cpu hotplug about assigned
interrupt affinities gets lost. On CPU hotplug it's also pointless to force
migrate an interrupt, which is not targeted at the CPU effectively. But
currently the information is not available.
Provide a seperate mask to be updated by the irq_chip->irq_set_affinity()
implementations. Implement the read only proc files so the user can see the
effective mask as well w/o trying to deduce it from /proc/interrupts.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235446.247834245@linutronix.de
2017-06-22 18:21:20 +02:00
Thomas Gleixner
c1a8038696
genirq/proc: Replace ever repeating type cast
...
The proc file setup repeats the same ugly type cast for the irq number over
and over. Do it once and hand in the local void pointer.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235446.160866358@linutronix.de
2017-06-22 18:21:20 +02:00
Thomas Gleixner
4ab764c336
genirq: Remove pointless gfp argument
...
All callers hand in GPF_KERNEL. No point to have an extra argument for
that.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235446.082544752@linutronix.de
2017-06-22 18:21:19 +02:00
Thomas Gleixner
047dc6331d
genirq: Remove pointless arg from show_irq_affinity
...
The third argument of the internal helper function is unused. Remove it.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235446.004958600@linutronix.de
2017-06-22 18:21:19 +02:00
Thomas Gleixner
36d84fb451
genirq: Move irq_fixup_move_pending() to core
...
Now that x86 uses the generic code, the function declaration and inline
stub can move to the core internal header.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235445.928156166@linutronix.de
2017-06-22 18:21:19 +02:00
Thomas Gleixner
ad7a929fa4
x86/irq: Use irq_migrate_all_off_this_cpu()
...
The generic migration code supports all the required features
already. Remove the x86 specific implementation and use the generic one.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235445.851311033@linutronix.de
2017-06-22 18:21:18 +02:00
Thomas Gleixner
654abd0a7b
x86/irq: Restructure fixup_irqs()
...
Reorder fixup_irqs() so it matches the flow in the generic migration code.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235445.774272454@linutronix.de
2017-06-22 18:21:18 +02:00
Thomas Gleixner
77f85e66aa
genirq/cpuhotplug: Set force affinity flag on hotplug migration
...
Set the force migration flag when migrating interrupts away from an
outgoing CPU.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235445.681874648@linutronix.de
2017-06-22 18:21:18 +02:00
Thomas Gleixner
47a06d3a78
genirq/cpuhotplug: Add support for conditional masking
...
Interrupts which cannot be migrated in process context, need to be masked
before the affinity is changed forcefully.
Add support for that. Will be compiled out for architectures which do not
have this x86 specific issue.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235445.604565591@linutronix.de
2017-06-22 18:21:17 +02:00
Thomas Gleixner
f0383c24b4
genirq/cpuhotplug: Add support for cleaning up move in progress
...
In order to move x86 to the generic hotplug migration code, add support for
cleaning up move in progress bits.
On architectures which have this x86 specific (mis)feature not enabled,
this is optimized out by the compiler.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235445.525817311@linutronix.de
2017-06-22 18:21:17 +02:00
Thomas Gleixner
91f26cb4cd
genirq/cpuhotplug: Do not migrated shutdown irqs
...
Interrupts, which are shut down are tried to be migrated as well. That's
pointless because the interrupt cannot fire and the next startup will move
it to the proper place anyway.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235445.447550992@linutronix.de
2017-06-22 18:21:17 +02:00
Thomas Gleixner
e8a7035039
genirq/cpuhotplug: Reorder check logic
...
Move the checks for a valid irq chip and the irq_set_affinity() callback
right in front of the whole migration logic. No point in doing a gazillion
of other things when the interrupt cannot be migrated at all.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235445.354181630@linutronix.de
2017-06-22 18:21:16 +02:00
Thomas Gleixner
735c09524d
genirq/cpuhotplug: Dont claim success on error
...
In case the affinity of an interrupt was broken, a printk is emitted.
But if the affinity cannot be set at all due to a missing
irq_set_affinity() callback or due to a failing callback, the message is
still printed preceeded by a warning/error.
That makes no sense whatsoever.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235445.274852976@linutronix.de
2017-06-22 18:21:16 +02:00
Thomas Gleixner
0dd945ff46
genirq/cpuhotplug: Remove irq disabling logic
...
This is called from stop_machine() with interrupts disabled. No point in
disabling them some more.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235445.198042748@linutronix.de
2017-06-22 18:21:16 +02:00
Christoph Hellwig
137221df69
genirq: Move pending helpers to internal.h
...
So that the affinity code can reuse them.
Signed-off-by: Christoph Hellwig <hch@lst.de >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Link: http://lkml.kernel.org/r/20170619235445.109426284@linutronix.de
2017-06-22 18:21:15 +02:00
Thomas Gleixner
2e051552df
genirq: Move initial affinity setup to irq_startup()
...
The startup vs. setaffinity ordering of interrupts depends on the
IRQF_NOAUTOEN flag. Chained interrupts are not getting any affinity
assignment at all.
A regular interrupt is started up and then the affinity is set. A
IRQF_NOAUTOEN marked interrupt is not started up, but the affinity is set
nevertheless.
Move the affinity setup to startup_irq() so the ordering is always the same
and chained interrupts get the proper default affinity assigned as well.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235445.020534783@linutronix.de
2017-06-22 18:21:15 +02:00
Thomas Gleixner
43564bd97d
genirq: Rename setup_affinity() to irq_setup_affinity()
...
Rename it with a proper irq_ prefix and make it available for other files
in the core code. Preparatory patch for moving the irq affinity setup
around.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235444.928501004@linutronix.de
2017-06-22 18:21:14 +02:00
Thomas Gleixner
cba4235e60
genirq: Remove mask argument from setup_affinity()
...
No point to have this alloc/free dance of cpumasks. Provide a static mask
for setup_affinity() and protect it proper.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235444.851571573@linutronix.de
2017-06-22 18:21:14 +02:00
Thomas Gleixner
8e7b632237
x86/irq: Cleanup pending irq move in fixup_irqs()
...
If an CPU goes offline, the interrupts are migrated away, but a eventually
pending interrupt move, which has not yet been made effective is kept
pending even if the outgoing CPU is the sole target of the pending affinity
mask. What's worse is, that the pending affinity mask is discarded even if
it would contain a valid subset of the online CPUs.
Use the newly introduced helper to:
- Discard a pending move when the outgoing CPU is the only target in the
pending mask.
- Use the pending mask instead of the affinity mask to find a valid target
for the CPU if the pending mask intersects with the online CPUs.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235444.774068557@linutronix.de
2017-06-22 18:21:13 +02:00
Thomas Gleixner
cdd16365b0
genirq: Provide irq_fixup_move_pending()
...
If an CPU goes offline, the interrupts are migrated away, but a eventually
pending interrupt move, which has not yet been made effective is kept
pending even if the outgoing CPU is the sole target of the pending affinity
mask. What's worse is, that the pending affinity mask is discarded even if
it would contain a valid subset of the online CPUs.
Implement a helper function which allows to avoid these issues.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235444.691345468@linutronix.de
2017-06-22 18:21:13 +02:00
Thomas Gleixner
1bb0401680
genirq: Add missing comment for IRQD_STARTED
...
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235444.614913014@linutronix.de
2017-06-22 18:21:13 +02:00
Thomas Gleixner
087cdfb662
genirq/debugfs: Add proper debugfs interface
...
Debugging (hierarchical) interupt domains is tedious as there is no
information about the hierarchy and no information about states of
interrupts in the various domain levels.
Add a debugfs directory 'irq' and subdirectories 'domains' and 'irqs'.
The domains directory contains the domain files. The content is information
about the domain. If the domain is part of a hierarchy then the parent
domains are printed as well.
# ls /sys/kernel/debug/irq/domains/
default INTEL-IR-2 INTEL-IR-MSI-2 IO-APIC-IR-2 PCI-MSI
DMAR-MSI INTEL-IR-3 INTEL-IR-MSI-3 IO-APIC-IR-3 unknown-1
INTEL-IR-0 INTEL-IR-MSI-0 IO-APIC-IR-0 IO-APIC-IR-4 VECTOR
INTEL-IR-1 INTEL-IR-MSI-1 IO-APIC-IR-1 PCI-HT
# cat /sys/kernel/debug/irq/domains/VECTOR
name: VECTOR
size: 0
mapped: 216
flags: 0x00000041
# cat /sys/kernel/debug/irq/domains/IO-APIC-IR-0
name: IO-APIC-IR-0
size: 24
mapped: 19
flags: 0x00000041
parent: INTEL-IR-3
name: INTEL-IR-3
size: 65536
mapped: 167
flags: 0x00000041
parent: VECTOR
name: VECTOR
size: 0
mapped: 216
flags: 0x00000041
Unfortunately there is no per cpu information about the VECTOR domain (yet).
The irqs directory contains detailed information about mapped interrupts.
# cat /sys/kernel/debug/irq/irqs/3
handler: handle_edge_irq
status: 0x00004000
istate: 0x00000000
ddepth: 1
wdepth: 0
dstate: 0x01018000
IRQD_IRQ_DISABLED
IRQD_SINGLE_TARGET
IRQD_MOVE_PCNTXT
node: 0
affinity: 0-143
effectiv: 0
pending:
domain: IO-APIC-IR-0
hwirq: 0x3
chip: IR-IO-APIC
flags: 0x10
IRQCHIP_SKIP_SET_WAKE
parent:
domain: INTEL-IR-3
hwirq: 0x20000
chip: INTEL-IR
flags: 0x0
parent:
domain: VECTOR
hwirq: 0x3
chip: APIC
flags: 0x0
This was developed to simplify the debugging of the managed affinity
changes.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Acked-by: Marc Zyngier <marc.zyngier@arm.com >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235444.537566163@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2017-06-22 18:21:13 +02:00
Thomas Gleixner
9dc6be3d41
genirq/irqdomain: Add map counter
...
Add a map counter instead of counting radix tree entries for
diagnosis. That also gives correct information for linear domains.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Acked-by: Marc Zyngier <marc.zyngier@arm.com >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235444.459397746@linutronix.de
2017-06-22 18:21:12 +02:00
Thomas Gleixner
ae904cafd5
PCI/vmd: Create named irq domain
...
Use the fwnode to create a named domain so diagnosis works.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: linux-pci@vger.kernel.org
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235444.379861978@linutronix.de
2017-06-22 18:21:12 +02:00
Thomas Gleixner
f8f37ca789
x86/msi: Create named irq domains
...
Use the fwnode to create named irq domains so diagnosis works.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235444.299024560@linutronix.de
2017-06-22 18:21:11 +02:00
Thomas Gleixner
0323b96904
x86/msi: Remove unused remap irq domain interface
...
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235444.221049665@linutronix.de
2017-06-22 18:21:11 +02:00
Thomas Gleixner
3e49a81822
iommu/amd: Use named irq domain interface
...
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Acked-by: Joerg Roedel <joro@8bytes.org >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: iommu@lists.linux-foundation.org
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235444.142270582@linutronix.de
2017-06-22 18:21:11 +02:00
Thomas Gleixner
cea29b656a
iommu/vt-d: Use named irq domain interface
...
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Acked-by: Joerg Roedel <joro@8bytes.org >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: iommu@lists.linux-foundation.org
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235444.063083997@linutronix.de
2017-06-22 18:21:10 +02:00
Thomas Gleixner
667724c5a3
x86/msi: Provide new iommu irqdomain interface
...
Provide a new interface for creating the iommu remapping domains, so that
the caller can supply a name and a id in order to create named irqdomains.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Joerg Roedel <joro@8bytes.org >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: iommu@lists.linux-foundation.org
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235443.986661206@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2017-06-22 18:21:10 +02:00
Thomas Gleixner
f8409a6a4b
x86/uv: Create named irq domain
...
Use the fwnode to create a named domain so diagnosis works.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235443.907511074@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2017-06-22 18:21:10 +02:00
Thomas Gleixner
5f432711ba
x86/htirq: Create named domain
...
Use the fwnode to create a named domain so diagnosis works.
Mark the init function __init while at it.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235443.829047007@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2017-06-22 18:21:09 +02:00
Thomas Gleixner
1b604745c8
x86/ioapic: Create named irq domain
...
Use the fwnode to create a named domain so diagnosis works, but only when
the the ioapic is not device tree based.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235443.752782603@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2017-06-22 18:21:09 +02:00
Thomas Gleixner
9d35f85959
x86/vector: Create named irq domain
...
Use the fwnode to create a named domain so diagnosis works.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235443.673635238@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2017-06-22 18:21:08 +02:00
Thomas Gleixner
d59f6617ee
genirq: Allow fwnode to carry name information only
...
In order to provide proper debug interface it's required to have domain
names available when the domain is added. Non fwnode based architectures
like x86 have no way to do so.
It's not possible to use domain ops or host data for this as domain ops
might be the same for several instances, but the names have to be unique.
Extend the irqchip fwnode to allow transporting the domain name. If no node
is supplied, create a 'unknown-N' placeholder.
Warn if an invalid node is supplied and treat it like no node. This happens
e.g. with i2 devices on x86 which hand in an ACPI type node which has no
interface for retrieving the name.
[ Folded a fix from Marc to make DT name parsing work ]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Acked-by: Marc Zyngier <marc.zyngier@arm.com >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235443.588784933@linutronix.de
2017-06-22 18:21:08 +02:00
Thomas Gleixner
0165308a2f
genirq/msi: Prevent overwriting domain name
...
Prevent overwriting an already assigned domain name. Remove the extra check
for chip->name, because if domain->name is NULL overwriting it with NULL is
not a problem.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Acked-by: Marc Zyngier <marc.zyngier@arm.com >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235443.510684976@linutronix.de
2017-06-22 18:21:08 +02:00
Thomas Gleixner
1bb3a5a763
iommu/vt-d: Add name to irq chip
...
Add the missing name, so debugging will work proper.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Acked-by: Joerg Roedel <joro@8bytes.org >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: iommu@lists.linux-foundation.org
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235443.431939968@linutronix.de
2017-06-22 18:21:07 +02:00
Thomas Gleixner
290be194ba
iommu/amd: Add name to irq chip
...
Add the missing name, so debugging will work proper.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Acked-by: Joerg Roedel <joro@8bytes.org >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: iommu@lists.linux-foundation.org
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235443.343236995@linutronix.de
2017-06-22 18:21:07 +02:00
Thomas Gleixner
8947dfb257
x86/apic: Add name to irq chip
...
Add the missing name, so debugging will work proper.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jens Axboe <axboe@kernel.dk >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Keith Busch <keith.busch@intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Christoph Hellwig <hch@lst.de >
Link: http://lkml.kernel.org/r/20170619235443.266561988@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2017-06-22 18:21:06 +02:00
Bartosz Golaszewski
30fd8fc5c9
irq/generic-chip: Provide devm_irq_setup_generic_chip()
...
Provide a resource managed variant of irq_setup_generic_chip().
Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Acked-by: Marc Zyngier <marc.zyngier@arm.com >
Cc: linux-doc@vger.kernel.org
Cc: Jonathan Corbet <corbet@lwn.net >
Link: http://lkml.kernel.org/r/1496246820-13250-6-git-send-email-brgl@bgdev.pl
2017-06-21 15:53:11 +02:00
Bartosz Golaszewski
1c3e36309f
irq/generic-chip: Provide devm_irq_alloc_generic_chip()
...
Provide a resource managed variant of irq_alloc_generic_chip().
Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Acked-by: Marc Zyngier <marc.zyngier@arm.com >
Cc: linux-doc@vger.kernel.org
Cc: Jonathan Corbet <corbet@lwn.net >
Link: http://lkml.kernel.org/r/1496246820-13250-5-git-send-email-brgl@bgdev.pl
2017-06-21 15:53:11 +02:00
Bartosz Golaszewski
f160203986
irq/generic-chip: Export irq_init_generic_chip() locally
...
This function will be used in the devres variant of
irq_alloc_generic_chip().
Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Acked-by: Marc Zyngier <marc.zyngier@arm.com >
Cc: linux-doc@vger.kernel.org
Cc: Jonathan Corbet <corbet@lwn.net >
Link: http://lkml.kernel.org/r/1496246820-13250-4-git-send-email-brgl@bgdev.pl
2017-06-21 15:53:11 +02:00
Bartosz Golaszewski
32bb6cbb3b
irq/generic-chip: Provide irq_destroy_generic_chip()
...
Most users of irq_alloc_generic_chip() call irq_setup_generic_chip()
too. To simplify the cleanup provide a function that both removes a
generic chip and frees its memory.
Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Acked-by: Marc Zyngier <marc.zyngier@arm.com >
Cc: linux-doc@vger.kernel.org
Cc: Jonathan Corbet <corbet@lwn.net >
Link: http://lkml.kernel.org/r/1496246820-13250-3-git-send-email-brgl@bgdev.pl
2017-06-21 15:53:10 +02:00
Bartosz Golaszewski
707188f5f2
irq/generic-chip: Provide irq_free_generic_chip()
...
Currently there's no way for users of irq_alloc_generic_chip() to free
the allocated memory other than calling kfree() manually on the
returned pointer. This may lead to errors if the internals of
irq_alloc_generic_chip() ever change. Provide a routine to free the
generic chip.
Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Acked-by: Marc Zyngier <marc.zyngier@arm.com >
Cc: linux-doc@vger.kernel.org
Cc: Jonathan Corbet <corbet@lwn.net >
Link: http://lkml.kernel.org/r/1496246820-13250-2-git-send-email-brgl@bgdev.pl
2017-06-21 15:53:10 +02:00