qemu-e2k/hw/ppc
Greg Kurz 72fdd4de8e spapr: register dummy ICPs later
Some older machine types create more ICPs than needed. We hence
need to register up to xics_max_server_number() dummy ICPs to
accomodate the migration of these machine types.

Recent VSMT rework changed xics_max_server_number() to return

    DIV_ROUND_UP(max_cpus * spapr->vsmt, smp_threads)

instead of

    DIV_ROUND_UP(max_cpus * kvmppc_smt_threads(), smp_threads);

The change is okay but it requires spapr->vsmt to be set, which
isn't the case with the current code. This causes the formula to
return zero and we don't create dummy ICPs. This breaks migration
of older guests as reported here:

    https://bugzilla.redhat.com/show_bug.cgi?id=1549087

The dummy ICP workaround doesn't really have a dependency on XICS
itself. But it does depend on proper VCPU id numbering and it must
be applied before creating vCPUs (ie, creating real ICPs). So this
patch moves the workaround to spapr_init_cpus(), which already
assumes VSMT to be set.

Fixes: 72194664c8 ("spapr: use spapr->vsmt to compute VCPU ids")
Reported-by: Lukas Doktor <ldoktor@redhat.com>
Signed-off-by: Greg Kurz <groug@kaod.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2018-03-06 13:16:29 +11:00
..
e500-ccsr.h
e500.c Move include qemu/option.h from qemu-common.h to actual users 2018-02-09 13:52:16 +01:00
e500.h target-ppc: Eliminate redundant and incorrect function booke206_page_size_to_tlb 2016-07-01 09:57:01 +10:00
e500plat.c
fdt.c Include qapi/error.h exactly where needed 2018-02-09 13:50:17 +01:00
mac_newworld.c hw/char: remove legacy interface escc_init() 2018-02-16 12:14:26 +11:00
mac_oldworld.c hw/char: remove legacy interface escc_init() 2018-02-16 12:14:26 +11:00
mac.h ppc: move CUDAState and other CUDA-related definitions into separate cuda.h file 2018-02-16 12:14:26 +11:00
Makefile.objs ppc: Add aCube Sam460ex board 2018-03-06 13:16:29 +11:00
mpc8544_guts.c
mpc8544ds.c
pnv_bmc.c Include qapi/error.h exactly where needed 2018-02-09 13:50:17 +01:00
pnv_core.c
pnv_lpc.c
pnv_occ.c
pnv_psi.c
pnv_xscom.c Include qapi/error.h exactly where needed 2018-02-09 13:50:17 +01:00
pnv.c
ppc4xx_devs.c
ppc4xx_pci.c
ppc405_boards.c
ppc405_uc.c
ppc405.h
ppc440_bamboo.c
ppc440_pcix.c ppc440: Add emulation of plb-pcix controller found in some 440 SoCs 2018-03-06 13:16:29 +11:00
ppc440_uc.c ppc440_uc: Fix unintialized variable warning with older gcc 2018-03-06 13:16:29 +11:00
ppc440.h ppc4xx: Add device models found in PPC440 core SoCs 2018-02-16 14:06:07 +11:00
ppc_booke.c
ppc.c Include qapi/error.h exactly where needed 2018-02-09 13:50:17 +01:00
ppce500_spin.c
prep_systemio.c
prep.c
rs6000_mc.c
sam460ex.c ppc: Add aCube Sam460ex board 2018-03-06 13:16:29 +11:00
spapr_caps.c ppc/spapr-caps: Disallow setting workaround for spapr-cap-ibs 2018-02-16 13:40:51 +11:00
spapr_cpu_core.c spapr: move VCPU calculation to core machine code 2018-02-16 12:14:26 +11:00
spapr_drc.c qdict qlist: Make most helper macros functions 2018-02-09 13:52:15 +01:00
spapr_events.c
spapr_hcall.c hw/ppc/spapr_hcall: set htab_shift after kvmppc_resize_hpt_commit 2018-02-16 12:14:26 +11:00
spapr_iommu.c
spapr_ovec.c
spapr_pci_vfio.c Include qapi/error.h exactly where needed 2018-02-09 13:50:17 +01:00
spapr_pci.c
spapr_rng.c
spapr_rtas_ddw.c
spapr_rtas.c Include less of the generated modular QAPI headers 2018-03-02 13:45:50 -06:00
spapr_rtc.c qapi: Empty out qapi-schema.json 2018-03-02 13:45:50 -06:00
spapr_vio.c
spapr.c spapr: register dummy ICPs later 2018-03-06 13:16:29 +11:00
trace-events ppc440: Add emulation of plb-pcix controller found in some 440 SoCs 2018-03-06 13:16:29 +11:00
virtex_ml507.c Move include qemu/option.h from qemu-common.h to actual users 2018-02-09 13:52:16 +01:00