Jiang Liu
9df872faa7
genirq: Move field 'affinity' from irq_data into irq_common_data
...
Irq affinity mask is per-irq instead of per irqchip, so move it into
struct irq_common_data.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Yinghai Lu <yinghai@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Jason Cooper <jason@lakedaemon.net >
Cc: Kevin Cernekee <cernekee@gmail.com >
Cc: Arnd Bergmann <arnd@arndb.de >
Link: http://lkml.kernel.org/r/1433303281-27688-1-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-09-16 15:46:49 +02:00
Linus Torvalds
43af9872f5
Merge branch 'x86-apic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
...
Pull x86 apic updates from Thomas Gleixner:
"This udpate contains:
- rework the irq vector array to store a pointer to the irq
descriptor instead of the irq number to avoid a lookup of the irq
descriptor in the irq entry path
- lguest interrupt handling cleanups
- conversion of the local apic timer to the new clockevent callbacks
- preparatory changes for the irq argument removal of interrupt flow
handlers"
* 'x86-apic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86/irq: Do not dereference irq descriptor before checking it
tools/lguest: Clean up include dir
tools/lguest: Fix redefinition of struct virtio_pci_cfg_cap
x86/irq: Store irq descriptor in vector array
genirq: Provide irq_desc_has_action
x86/irq: Get rid of an indentation level
x86/irq: Rename VECTOR_UNDEFINED to VECTOR_UNUSED
x86/irq: Replace numeric constant
x86/irq: Protect smp_cleanup_move
x86/lguest: Do not setup unused irq vectors
x86/lguest: Clean up lguest_setup_irq
x86/apic: Drop local_irq_save/restore in timer callbacks
x86/apic: Migrate apic timer to new set_state interface
x86/irq: Use access helper irq_data_get_affinity_mask()
x86/irq: Use accessor irq_data_get_irq_handler_data()
x86/irq: Use accessor irq_data_get_node()
2015-09-01 15:20:51 -07:00
Jiang Liu
527f0a91e9
x86/irq: Build correct vector mapping for multiple MSI interrupts
...
Alex Deucher, Mark Rustad and Alexander Holler reported a regression
with the latest v4.2-rc4 kernel, which breaks some SATA controllers.
With multi-MSI capable SATA controllers, only the first port works,
all other ports time out when executing SATA commands.
This happens because the first argument to assign_irq_vector_policy()
is always the base linux irq number of the multi MSI interrupt block,
so all subsequent vector assignments operate on the base linux irq
number, so all MSI irqs are handled as the first irq number. Therefor
the other MSI irqs of a device are never set up correctly and never
fire.
Add the loop iterator to the base irq number so all vectors are
assigned correctly.
Fixes: b5dc8e6c21
"x86/irq: Use hierarchical irqdomain to manage CPU interrupt vectors"
Reported-and-tested-by: Alex Deucher <alexdeucher@gmail.com >
Reported-and-tested-by: Mark Rustad <mrustad@gmail.com >
Reported-and-tested-by: Alexander Holler <holler@ahsoftware.de >
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Cc: Tony Luck <tony.luck@intel.com >
Link: http://lkml.kernel.org/r/1439911228-9880-1-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-08-18 18:18:55 +02:00
Thomas Gleixner
a782a7e46b
x86/irq: Store irq descriptor in vector array
...
We can spare the irq_desc lookup in the interrupt entry code if we
store the descriptor pointer in the vector array instead the interrupt
number.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jiang Liu <jiang.liu@linux.intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Rusty Russell <rusty@rustcorp.com.au >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Link: http://lkml.kernel.org/r/20150802203609.717724106@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-08-06 00:14:59 +02:00
Thomas Gleixner
7276c6a2cb
x86/irq: Rename VECTOR_UNDEFINED to VECTOR_UNUSED
...
VECTOR_UNDEFINED is a misnomer. The vector is defined, but unused.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jiang Liu <jiang.liu@linux.intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Rusty Russell <rusty@rustcorp.com.au >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Link: http://lkml.kernel.org/r/20150802203609.477282494@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-08-06 00:14:58 +02:00
Thomas Gleixner
df54c4934e
x86/irq: Protect smp_cleanup_move
...
smp_cleanup_move fiddles without protection in the interrupt
descriptors and the vector array. A concurrent irq setup/teardown or
affinity setting can pull the rug under that operation.
Add proper locking.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Jiang Liu <jiang.liu@linux.intel.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Rusty Russell <rusty@rustcorp.com.au >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Link: http://lkml.kernel.org/r/20150802203609.222975294@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-08-06 00:14:58 +02:00
Thomas Gleixner
b7edaca4e8
Merge branch 'linus' into x86/apic
...
Pull in upstream changes to avoid conflicts
2015-08-06 00:00:32 +02:00
Jiang Liu
c149e4cd08
x86/irq: Use access helper irq_data_get_affinity_mask()
...
This is a preparatory patch for moving irq_data struct members.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-07-13 21:22:47 +02:00
Jiang Liu
5f2dbbc517
x86/irq: Use accessor irq_data_get_node()
...
Use accessor irq_data_get_node() to hide struct irq_data
implementation detail, so we can move node to irq_data_common later.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Cc: Borislav Petkov <bp@alien8.de >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-07-13 21:22:46 +02:00
Thomas Gleixner
5a3f75e3f0
x86/irq: Plug irq vector hotplug race
...
Jin debugged a nasty cpu hotplug race which results in leaking a irq
vector on the newly hotplugged cpu.
cpu N cpu M
native_cpu_up device_shutdown
do_boot_cpu free_msi_irqs
start_secondary arch_teardown_msi_irqs
smp_callin default_teardown_msi_irqs
setup_vector_irq arch_teardown_msi_irq
__setup_vector_irq native_teardown_msi_irq
lock(vector_lock) destroy_irq
install vectors
unlock(vector_lock)
lock(vector_lock)
---> __clear_irq_vector
unlock(vector_lock)
lock(vector_lock)
set_cpu_online
unlock(vector_lock)
This leaves the irq vector(s) which are torn down on CPU M stale in
the vector array of CPU N, because CPU M does not see CPU N online
yet. There is a similar issue with concurrent newly setup interrupts.
The alloc/free protection of irq descriptors does not prevent the
above race, because it merily prevents interrupt descriptors from
going away or changing concurrently.
Prevent this by moving the call to setup_vector_irq() into the
vector_lock held region which protects set_cpu_online():
cpu N cpu M
native_cpu_up device_shutdown
do_boot_cpu free_msi_irqs
start_secondary arch_teardown_msi_irqs
smp_callin default_teardown_msi_irqs
lock(vector_lock) arch_teardown_msi_irq
setup_vector_irq()
__setup_vector_irq native_teardown_msi_irq
install vectors destroy_irq
set_cpu_online
unlock(vector_lock)
lock(vector_lock)
__clear_irq_vector
unlock(vector_lock)
So cpu M either sees the cpu N online before clearing the vector or
cpu N installs the vectors after cpu M has cleared it.
Reported-by: xiao jin <jin.xiao@intel.com >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Joerg Roedel <jroedel@suse.de >
Cc: Borislav Petkov <bp@suse.de >
Cc: Yanmin Zhang <yanmin_zhang@linux.intel.com >
Link: http://lkml.kernel.org/r/20150705171102.141898931@linutronix.de
2015-07-07 11:54:04 +02:00
Thomas Gleixner
6af7faf607
x86: Use entering[_ack]_irq() instead of open coding it
...
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-05-15 16:03:18 +02:00
Jiang Liu
486ca539ca
x86, irq: Allocate CPU vectors from device local CPUs if possible
...
On NUMA systems, an IO device may be associated with a NUMA node.
It may improve IO performance to allocate resources, such as memory
and interrupts, from device local node.
This patch introduces a mechanism to support CPU vector allocation
policies. It tries to allocate CPU vectors from CPUs on device local
node first, and then fallback to all online(global) CPUs.
This mechanism may be used to support NumaConnect systems to allocate
CPU vectors from device local node.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Tested-by: Daniel J Blueman <daniel@numascale.com >
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Rafael J. Wysocki <rjw@rjwysocki.net >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Yinghai Lu <yinghai@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Link: http://lkml.kernel.org/r/1430967244-28905-1-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-05-13 09:50:24 +02:00
Ingo Molnar
191a66353b
Merge branch 'x86/asm' into x86/apic, to resolve a conflict
...
Conflicts:
arch/x86/kernel/apic/io_apic.c
arch/x86/kernel/apic/vector.c
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2015-05-11 16:05:09 +02:00
Brian Gerst
8b455e6577
x86/asm/entry/irq: Clean up IRQn_VECTOR macros
...
Since the ISA irqs are in a single block, use
ISA_IRQ_VECTOR(irq) instead of individual macros.
Signed-off-by: Brian Gerst <brgerst@gmail.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Andy Lutomirski <luto@amacapital.net >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Denys Vlasenko <dvlasenk@redhat.com >
Cc: H. Peter Anvin <hpa@zytor.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/1431185813-15413-5-git-send-email-brgerst@gmail.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2015-05-10 12:34:28 +02:00
Thomas Gleixner
eb18cf55c2
x86: Constify irqdomain ops
...
Nothing changes those ops. Make the initializers readable while at it.
Reported-by: Krzysztof Kozlowski <k.kozlowski.k@gmail.com >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-05-05 11:14:48 +02:00
Jiang Liu
f7fa7aeeec
x86/irq: Avoid memory allocation in __assign_irq_vector()
...
Function __assign_irq_vector() is protected by vector_lock, so use
a global temporary cpu_mask to avoid allocating/freeing cpu_mask.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com >
Cc: David Cohen <david.a.cohen@linux.intel.com >
Cc: Sander Eikelenboom <linux@eikelenboom.it >
Cc: David Vrabel <david.vrabel@citrix.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Joerg Roedel <joro@8bytes.org >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Rafael J. Wysocki <rjw@rjwysocki.net >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Yinghai Lu <yinghai@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Dimitri Sivanich <sivanich@sgi.com >
Link: http://lkml.kernel.org/r/1428978610-28986-34-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-04-24 15:36:55 +02:00
Jiang Liu
d746d1ebd3
x86/irq: Move irqdomain specific code into asm/irqdomain.h
...
Now we have dedicated asm/irqdomain.h, so move irqdomain specific
code into it.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com >
Cc: David Cohen <david.a.cohen@linux.intel.com >
Cc: Sander Eikelenboom <linux@eikelenboom.it >
Cc: David Vrabel <david.vrabel@citrix.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Joerg Roedel <joro@8bytes.org >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Rafael J. Wysocki <rjw@rjwysocki.net >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Yinghai Lu <yinghai@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Dimitri Sivanich <sivanich@sgi.com >
Cc: Joerg Roedel <jroedel@suse.de >
Cc: Andy Lutomirski <luto@amacapital.net >
Link: http://lkml.kernel.org/r/1428978610-28986-33-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-04-24 15:36:55 +02:00
Jiang Liu
7f3262edcd
x86/irq: Move private data in struct irq_cfg into dedicated data structure
...
Several fields in struct irq_cfg are private to vector.c, so move it
into dedicated data structure. This helps to hide implementation
details.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com >
Cc: David Cohen <david.a.cohen@linux.intel.com >
Cc: Sander Eikelenboom <linux@eikelenboom.it >
Cc: David Vrabel <david.vrabel@citrix.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Joerg Roedel <joro@8bytes.org >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Rafael J. Wysocki <rjw@rjwysocki.net >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Yinghai Lu <yinghai@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Dimitri Sivanich <sivanich@sgi.com >
Link: http://lkml.kernel.org/r/1428978610-28986-27-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Joerg Roedel <joro@8bytes.org >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Rafael J. Wysocki <rjw@rjwysocki.net >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Yinghai Lu <yinghai@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Link: http://lkml.kernel.org/r/1416901802-24211-35-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Tested-by: Joerg Roedel <jroedel@suse.de >
2015-04-24 15:36:55 +02:00
Jiang Liu
c6c2002b74
x86/irq: Move check of cfg->move_in_progress into send_cleanup_vector()
...
Move check of cfg->move_in_progress into send_cleanup_vector() to
prepare for simplifying struct irq_cfg.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Tested-by: Joerg Roedel <jroedel@suse.de >
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com >
Cc: David Cohen <david.a.cohen@linux.intel.com >
Cc: Sander Eikelenboom <linux@eikelenboom.it >
Cc: David Vrabel <david.vrabel@citrix.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: iommu@lists.linux-foundation.org
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Rafael J. Wysocki <rjw@rjwysocki.net >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Yinghai Lu <yinghai@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Dimitri Sivanich <sivanich@sgi.com >
Cc: Joerg Roedel <joro@8bytes.org >
Link: http://lkml.kernel.org/r/1428978610-28986-26-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-04-24 15:36:54 +02:00
Jiang Liu
68f9f4404d
x86/irq: Remove function apic_set_affinity()
...
Now there's no user of apic_set_affinity(), so remove it. Also rename
vector_set_affinity() to apic_set_affinity() for consistency.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Tested-by: Joerg Roedel <jroedel@suse.de >
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com >
Cc: David Cohen <david.a.cohen@linux.intel.com >
Cc: Sander Eikelenboom <linux@eikelenboom.it >
Cc: David Vrabel <david.vrabel@citrix.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Joerg Roedel <joro@8bytes.org >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Rafael J. Wysocki <rjw@rjwysocki.net >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Yinghai Lu <yinghai@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Dimitri Sivanich <sivanich@sgi.com >
Link: http://lkml.kernel.org/r/1428978610-28986-25-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-04-24 15:36:54 +02:00
Jiang Liu
f970510cc5
x86/irq: Make functions only used in vector.c static
...
Function {assign|clear}_irq_vector() and apic_retrigger_irq() are only
used in vector.c, so make them static.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Tested-by: Joerg Roedel <jroedel@suse.de >
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com >
Cc: David Cohen <david.a.cohen@linux.intel.com >
Cc: Sander Eikelenboom <linux@eikelenboom.it >
Cc: David Vrabel <david.vrabel@citrix.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Joerg Roedel <joro@8bytes.org >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Rafael J. Wysocki <rjw@rjwysocki.net >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Yinghai Lu <yinghai@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Dimitri Sivanich <sivanich@sgi.com >
Link: http://lkml.kernel.org/r/1428978610-28986-24-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-04-24 15:36:54 +02:00
Jiang Liu
a2cbbb47fd
x86/irq: Remove unused alloc_irq_and_cfg_at()
...
There's no caller of alloc_irq_and_cfg_at() anymore, so remove it.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Tested-by: Joerg Roedel <jroedel@suse.de >
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com >
Cc: David Cohen <david.a.cohen@linux.intel.com >
Cc: Sander Eikelenboom <linux@eikelenboom.it >
Cc: David Vrabel <david.vrabel@citrix.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Joerg Roedel <joro@8bytes.org >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Rafael J. Wysocki <rjw@rjwysocki.net >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Yinghai Lu <yinghai@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Dimitri Sivanich <sivanich@sgi.com >
Link: http://lkml.kernel.org/r/1428978610-28986-23-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-04-24 15:36:54 +02:00
Jiang Liu
4467715a44
x86/irq: Move irq_cfg.irq_2_pin into io_apic.c
...
Now only io_apic.c accesses struct irq_cfg.irq_2_pin, so move irq_2_pin
into struct mp_chip_data in io_apic.c to clean up struct irq_cfg further.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Tested-by: Joerg Roedel <jroedel@suse.de >
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com >
Cc: David Cohen <david.a.cohen@linux.intel.com >
Cc: Sander Eikelenboom <linux@eikelenboom.it >
Cc: David Vrabel <david.vrabel@citrix.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Joerg Roedel <joro@8bytes.org >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Rafael J. Wysocki <rjw@rjwysocki.net >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Yinghai Lu <yinghai@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Dimitri Sivanich <sivanich@sgi.com >
Cc: Grant Likely <grant.likely@linaro.org >
Link: http://lkml.kernel.org/r/1428978610-28986-17-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-04-24 15:36:53 +02:00
Jiang Liu
9880534989
irq_remapping: Clean up unsued code to support IOAPIC
...
Now we have converted to hierarchical irqdomains, so clean up unused code.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Tested-by: Joerg Roedel <jroedel@suse.de >
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com >
Cc: David Cohen <david.a.cohen@linux.intel.com >
Cc: Sander Eikelenboom <linux@eikelenboom.it >
Cc: David Vrabel <david.vrabel@citrix.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: iommu@lists.linux-foundation.org
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Rafael J. Wysocki <rjw@rjwysocki.net >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Yinghai Lu <yinghai@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Dimitri Sivanich <sivanich@sgi.com >
Cc: Joerg Roedel <joro@8bytes.org >
Link: http://lkml.kernel.org/r/1428978610-28986-10-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-04-24 15:36:52 +02:00
Jiang Liu
baac169526
x86/irq: Remove GENERIC_IRQ_LEGACY_ALLOC_HWIRQ
...
There's no user of irq_alloc_hwirqs(), irq_alloc_hwirq(),
irq_free_hwirqs() and irq_free_hwirq() in x86 anymore, so remove
GENERIC_IRQ_LEGACY_ALLOC_HWIRQ and related code.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com >
Cc: David Cohen <david.a.cohen@linux.intel.com >
Cc: Sander Eikelenboom <linux@eikelenboom.it >
Cc: David Vrabel <david.vrabel@citrix.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Joerg Roedel <joro@8bytes.org >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Rafael J. Wysocki <rjw@rjwysocki.net >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Yinghai Lu <yinghai@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Dimitri Sivanich <sivanich@sgi.com >
Link: http://lkml.kernel.org/r/1428978610-28986-8-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-04-24 15:36:52 +02:00
Jiang Liu
133153205b
x86/irq: Refine the way to allocate irq_cfg for legacy IRQs
...
To support legacy ISA IRQs, we need to preallocate irq_cfg structures
for legacy ISA IRQs. Refine the way to allocate irq_cfg for legacy ISA
IRQs, so it's more friendly for the hierarchical irqdomain
implementation.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Tested-by: Joerg Roedel <jroedel@suse.de >
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com >
Cc: David Cohen <david.a.cohen@linux.intel.com >
Cc: Sander Eikelenboom <linux@eikelenboom.it >
Cc: David Vrabel <david.vrabel@citrix.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Joerg Roedel <joro@8bytes.org >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Rafael J. Wysocki <rjw@rjwysocki.net >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Yinghai Lu <yinghai@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Dimitri Sivanich <sivanich@sgi.com >
Cc: Grant Likely <grant.likely@linaro.org >
Link: http://lkml.kernel.org/r/1428905519-23704-35-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-04-24 15:36:51 +02:00
Jiang Liu
49e07d8f28
x86/htirq: Use hierarchical irqdomain to manage Hypertransport interrupts
...
We have slightly changed the architecture interfaces to support htirq
PCI driver. It's safe because currently Hypertransport interrupt is
only enabled on x86 platforms.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com >
Cc: David Cohen <david.a.cohen@linux.intel.com >
Cc: Sander Eikelenboom <linux@eikelenboom.it >
Cc: David Vrabel <david.vrabel@citrix.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Joerg Roedel <joro@8bytes.org >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Rafael J. Wysocki <rjw@rjwysocki.net >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Yinghai Lu <yinghai@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Dimitri Sivanich <sivanich@sgi.com >
Link: http://lkml.kernel.org/r/1428905519-23704-22-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-04-24 15:36:50 +02:00
Jiang Liu
52f518a3a7
x86/MSI: Use hierarchical irqdomains to manage MSI interrupts
...
Enhance MSI code to support hierarchical irqdomains, it helps to make
the architecture more clear.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com >
Cc: David Cohen <david.a.cohen@linux.intel.com >
Cc: Sander Eikelenboom <linux@eikelenboom.it >
Cc: David Vrabel <david.vrabel@citrix.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: iommu@lists.linux-foundation.org
Cc: Joerg Roedel <jroedel@suse.de >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Rafael J. Wysocki <rjw@rjwysocki.net >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Yinghai Lu <yinghai@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Dimitri Sivanich <sivanich@sgi.com >
Cc: Joerg Roedel <joro@8bytes.org >
Link: http://lkml.kernel.org/r/1428905519-23704-14-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-04-24 15:36:49 +02:00
Jiang Liu
b5dc8e6c21
x86/irq: Use hierarchical irqdomain to manage CPU interrupt vectors
...
Abstract CPU local APIC as an interrupt controller and create an
irqdomain for it to manage CPU interrupt vectors. It's the base to
enable hierarchical irqdomains on x86 systems.
The final irqdomain hierarchy will look like this:
IOAPIC domain ----|
MSI/MSI-x domain ----> [Interrupt Remapping domain] -> CPU vector domain
HPET_IRQ domain ----| ^
|
DMAR domain ----------------------------------------------|
HT_IRQ domain ----------------------------------------------|
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com >
Cc: David Cohen <david.a.cohen@linux.intel.com >
Cc: Sander Eikelenboom <linux@eikelenboom.it >
Cc: David Vrabel <david.vrabel@citrix.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Joerg Roedel <joro@8bytes.org >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Prarit Bhargava <prarit@redhat.com >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Rafael J. Wysocki <rjw@rjwysocki.net >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Yinghai Lu <yinghai@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Dimitri Sivanich <sivanich@sgi.com >
Cc: Grant Likely <grant.likely@linaro.org >
Link: http://lkml.kernel.org/r/1428905519-23704-3-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-04-24 15:36:47 +02:00
Jiang Liu
5f0052f952
x86/irq: Save destination CPU ID in irq_cfg
...
Cache destination CPU APIC ID into struct irq_cfg when assigning vector
for interrupt. Upper layer just needs to read the cached APIC ID instead
of calling apic->cpu_mask_to_apicid_and(), it helps to hide APIC driver
details from IOAPIC/HPET/MSI drivers..
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com >
Cc: David Cohen <david.a.cohen@linux.intel.com >
Cc: Sander Eikelenboom <linux@eikelenboom.it >
Cc: David Vrabel <david.vrabel@citrix.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Joerg Roedel <joro@8bytes.org >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Rafael J. Wysocki <rjw@rjwysocki.net >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Yinghai Lu <yinghai@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Dimitri Sivanich <sivanich@sgi.com >
Link: http://lkml.kernel.org/r/1428905519-23704-2-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2015-04-24 15:36:47 +02:00
Jiang Liu
a978609112
x86, irq: Use helpers to access irq_cfg data structure associated with IRQ
...
Use helpers to access irq_cfg data structure associated with IRQ,
instead of accessing irq_data->chip_data directly. Later we can
rewrite those helpers to support hierarchy irqdomain.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Joerg Roedel <joro@8bytes.org >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Rafael J. Wysocki <rjw@rjwysocki.net >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Yinghai Lu <yinghai@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Grant Likely <grant.likely@linaro.org >
Cc: Prarit Bhargava <prarit@redhat.com >
Link: http://lkml.kernel.org/r/1414397531-28254-17-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2014-12-16 14:08:17 +01:00
Jiang Liu
11d686e956
x86, irq: Move IRQ initialization routines from io_apic.c into vector.c
...
Move IRQ initialization routines from io_apic.c into vector.c,
preparing for enabling hierarchy irqdomain.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Joerg Roedel <joro@8bytes.org >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Rafael J. Wysocki <rjw@rjwysocki.net >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Yinghai Lu <yinghai@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Grant Likely <grant.likely@linaro.org >
Cc: Prarit Bhargava <prarit@redhat.com >
Link: http://lkml.kernel.org/r/1414397531-28254-15-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2014-12-16 14:08:17 +01:00
Jiang Liu
849d3569bb
x86, irq: Replace printk(KERN_LVL) with pr_lvl() utilities
...
Replace printk(KENR_LVL) with pr_lvl() to keep checkpatch script silent.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Joerg Roedel <joro@8bytes.org >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Rafael J. Wysocki <rjw@rjwysocki.net >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Yinghai Lu <yinghai@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Link: http://lkml.kernel.org/r/1414397531-28254-11-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2014-12-16 14:08:17 +01:00
Thomas Gleixner
f0e5bf7583
x86, irq: Make UP version of irq_complete_move() an inline stub
...
No point for having an empty real function.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2014-12-16 14:08:16 +01:00
Jiang Liu
74afab7af7
x86, irq: Move local APIC related code from io_apic.c into vector.c
...
Create arch/x86/kernel/apic/vector.c to host local APIC related code,
prepare for making MSI/HT_IRQ independent of IOAPIC.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com >
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Joerg Roedel <joro@8bytes.org >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org >
Cc: Rafael J. Wysocki <rjw@rjwysocki.net >
Cc: Bjorn Helgaas <bhelgaas@google.com >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Yinghai Lu <yinghai@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Prarit Bhargava <prarit@redhat.com >
Cc: Grant Likely <grant.likely@linaro.org >
Link: http://lkml.kernel.org/r/1414397531-28254-10-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2014-12-16 14:08:16 +01:00