xemu/hw/intc
Cédric Le Goater 3f777abc71 spapr/irq: add KVM support to the 'dual' machine
The interrupt mode is chosen by the CAS negotiation process and
activated after a reset to take into account the required changes in
the machine. This brings new constraints on how the associated KVM IRQ
device is initialized.

Currently, each model takes care of the initialization of the KVM
device in their realize method but this is not possible anymore as the
initialization needs to be done globaly when the interrupt mode is
known, i.e. when machine is reseted. It also means that we need a way
to delete a KVM device when another mode is chosen.

Also, to support migration, the QEMU objects holding the state to
transfer should always be available but not necessarily activated.

The overall approach of this proposal is to initialize both interrupt
mode at the QEMU level to keep the IRQ number space in sync and to
allow switching from one mode to another. For the KVM side of things,
the whole initialization of the KVM device, sources and presenters, is
grouped in a single routine. The XICS and XIVE sPAPR IRQ reset
handlers are modified accordingly to handle the init and the delete
sequences of the KVM device.

Signed-off-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Message-Id: <20190513084245.25755-15-clg@kaod.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2019-05-29 11:39:46 +10:00
..
allwinner-a10-pic.c hw: Remove unused 'hw/devices.h' include 2019-03-07 22:16:11 +01:00
apic_common.c migration: pre_save return int 2017-09-27 11:35:59 +01:00
apic.c avoid TABs in files that only contain a few 2019-01-11 15:46:56 +01:00
arm_gic_common.c hw/intc/arm_gic: Drop GIC_BASE_IRQ macro 2018-09-25 15:13:24 +01:00
arm_gic_kvm.c intc/arm_gic: Add the virtualization extensions to the GIC state 2018-08-14 17:17:20 +01:00
arm_gic.c hw/intc/arm_gic: Drop GIC_BASE_IRQ macro 2018-09-25 15:13:24 +01:00
arm_gicv2m.c hw: explicitly include qemu/log.h 2016-05-19 16:42:29 +02:00
arm_gicv3_common.c hw/intc/arm_gicv3_common: Move gicd shift bug handling to gicv3_post_load 2018-08-06 16:19:33 +01:00
arm_gicv3_cpuif.c hw/intc/arm_gicv3: Fix writes to ICC_CTLR_EL3 2019-05-23 14:47:44 +01:00
arm_gicv3_dist.c hw/intc/arm_gicv3: fix an extra left-shift when reading IPRIORITYR 2018-06-22 13:28:34 +01:00
arm_gicv3_its_common.c hw/intc/arm_gicv3: Make reserved register addresses RAZ/WI 2018-01-11 13:25:40 +00:00
arm_gicv3_its_kvm.c hw/intc/arm_gicv3_its: downgrade error_report to warn_report in kvm_arm_its_reset 2018-08-20 11:24:31 +01:00
arm_gicv3_kvm.c hw/intc/arm_gicv3_kvm: Get prepared to handle multiple redist regions 2018-06-22 13:28:36 +01:00
arm_gicv3_redist.c hw/intc/arm_gicv3: fix an extra left-shift when reading IPRIORITYR 2018-06-22 13:28:34 +01:00
arm_gicv3.c hw/intc/arm_gicv3: Introduce redist-region-count array property 2018-06-22 13:28:36 +01:00
armv7m_nvic.c hw/intc/nvic: Use object_initialize_child for correct reference counting 2019-05-24 15:29:02 -03:00
aspeed_vic.c hw: Clean up includes 2016-06-07 18:19:23 +03:00
bcm2835_ic.c hw: explicitly include qemu/log.h 2016-05-19 16:42:29 +02:00
bcm2836_control.c hw/intc/bcm2836_control: Implement local timer 2019-03-15 11:12:28 +00:00
etraxfs_pic.c qdev: Replace cannot_instantiate_with_device_add_yet with !user_creatable 2017-05-17 10:37:00 -03:00
exynos4210_combiner.c hw/intc: QOM'ify exynos4210_combiner.c 2016-05-12 13:22:24 +01:00
exynos4210_gic.c hw/intc/exynos4210_gic: Turn instance_init into realize function 2018-07-23 15:21:27 +01:00
gic_internal.h hw/intc/arm_gic: Drop GIC_BASE_IRQ macro 2018-09-25 15:13:24 +01:00
gicv3_internal.h target-arm: Add GICv3CPUState in CPUARMState struct 2017-02-28 17:10:00 +00:00
grlib_irqmp.c grlib, irqmp: get rid of the old-style create function 2019-05-17 09:17:11 +01:00
heathrow_pic.c heathrow: remove obsolete heathow_init() function 2018-04-27 18:05:22 +10:00
i8259_common.c i8259: move TYPE_INTERRUPT_STATS_PROVIDER upper 2017-12-21 09:30:32 +01:00
i8259.c qdev: use device_class_set_parent_realize/unrealize/reset() 2018-02-05 13:54:38 +01:00
imx_avic.c hw: explicitly include qemu/log.h 2016-05-19 16:42:29 +02:00
imx_gpcv2.c i.MX: Add code to emulate GPCv2 IP block 2018-02-09 10:40:30 +00:00
intc.c intc: add an interface to gather statistics/informations on interrupt controllers 2016-10-04 10:00:25 +02:00
ioapic_common.c ioapic: support "info irq" 2018-06-28 19:05:37 +02:00
ioapic.c ioapic: allow buggy guests mishandling level-triggered interrupts to make progress 2019-05-17 15:19:39 +02:00
Kconfig kconfig: add CONFIG_MSI_NONBROKEN 2019-03-18 09:39:57 +01:00
lm32_pic.c misc: drop old i386 dependency 2017-12-18 17:07:03 +03:00
Makefile.objs spapr/xive: add KVM support 2019-05-29 11:39:45 +10:00
mips_gic.c hw/mips_gic: Update pin state on mask changes 2017-02-21 22:24:58 +00:00
nios2_iic.c qdev: Replace cannot_instantiate_with_device_add_yet with !user_creatable 2017-05-17 10:37:00 -03:00
omap_intc.c Replace all occurances of __FUNCTION__ with __func__ 2018-01-22 09:46:18 +01:00
ompic.c openrisc/ompic: Add OpenRISC Multicore PIC (OMPIC) 2017-10-21 06:35:47 +09:00
openpic_kvm.c openpic_kvm: drop address_space_to_flatview call 2018-03-06 14:01:27 +01:00
openpic.c openpic: move OpenPIC state and related definitions to openpic.h 2018-03-06 13:16:29 +11:00
pl190.c hw: explicitly include qemu/log.h 2016-05-19 16:42:29 +02:00
pnv_xive_regs.h ppc/pnv: add a XIVE interrupt controller model for POWER9 2019-03-12 14:33:04 +11:00
pnv_xive.c ppc/pnv: add a XIVE interrupt controller model for POWER9 2019-03-12 14:33:04 +11:00
puv3_intc.c intc/puv3_intc: Convert sysbus init function to realize function 2018-12-13 13:47:59 +00:00
realview_gic.c hw/*/realview: Fix introspection problem with 'realview_mpcore' & 'realview_gic' 2018-07-17 13:12:49 +01:00
s390_flic_kvm.c vmstate: constify VMStateField 2018-11-27 15:35:15 +01:00
s390_flic.c qmp: expose s390-specific CPU info 2018-02-26 12:55:26 +01:00
sh_intc.c hw: explicitly include qemu-common.h and cpu.h 2016-03-22 22:20:17 +01:00
slavio_intctl.c sun4m: remove include/hw/sparc/sun4m.h and all references to it 2018-01-09 21:48:20 +00:00
spapr_xive_kvm.c spapr/irq: add KVM support to the 'dual' machine 2019-05-29 11:39:46 +10:00
spapr_xive.c spapr/irq: initialize the IRQ device only once 2019-05-29 11:39:46 +10:00
trace-events ioapic: allow buggy guests mishandling level-triggered interrupts to make progress 2019-05-17 15:19:39 +02:00
vgic_common.h intc/gic: Extract some reusable vGIC code 2015-09-24 01:29:36 +01:00
xics_kvm.c spapr/irq: add KVM support to the 'dual' machine 2019-05-29 11:39:46 +10:00
xics_pnv.c ppc/xics: introduce ICP DeviceRealize and DeviceReset handlers 2018-07-03 09:56:51 +10:00
xics_spapr.c spapr/irq: initialize the IRQ device only once 2019-05-29 11:39:46 +10:00
xics.c ppc/xics: fix irq priority in ics_set_irq_type() 2019-05-29 11:39:46 +10:00
xilinx_intc.c hw/intc: Clean up includes 2016-01-29 15:07:24 +00:00
xive.c spapr/irq: add KVM support to the 'dual' machine 2019-05-29 11:39:46 +10:00
xlnx-pmu-iomod-intc.c xlnx-pmu-iomod-intc: Add the PMU Interrupt controller 2018-01-26 11:09:09 +01:00
xlnx-zynqmp-ipi.c xlnx-zynqmp-ipi: Initial version of the Xilinx IPI device 2018-01-26 11:09:09 +01:00