Next try of the zPCI detangling, taking cpu models into account. The goal of this is twofold: - Being able to disable PCI support in a build completely, as for v1. - Properly fencing off PCI if the relevant facility bit is not provided.
The second one leads to an interesting usability problem: -device help still shows the various pci devices, but you cannot add them if the cpu model does not include zpci, due to the phb not being instantiated. The user is presented with qemu-system-s390x: -device virtio-rng-pci: No 'PCI' bus found for device 'virtio-rng-pci' ...which is not very helpful, as it does not point to the root cause (no zpci in the cpu model, and therefore no pci at all). Not sure how one can communicate this root cause, ideas welcome. A cross-check with the zpci documentation would also be good, as it is not public. Changes v1->v2: - add hw/s390x/s390-pci-stub.c to get rid of the ifdeffery - use the cpumodel to decide whether the guest can use pci instructions or not; also use this in the sclp and ioinst code Branch in git: git://github.com/cohuck/qemu no-zpci-cpumodel Cornelia Huck (9): kvm: remove hard dependency on pci s390x/pci: add stubs s390x: chsc nt2 events are pci-only s390x/pci: do not advertise pci on non-pci builds s390x/ccw: create s390 phb conditionally s390x/sclp: properly guard pci-specific functions s390x/pci: fence off instructions for non-pci s390x/kvm: msi route fixup for non-pci s390x: refine pci dependencies default-configs/s390x-softmmu.mak | 2 +- hw/pci/pci-stub.c | 12 ++++++ hw/s390x/Makefile.objs | 3 +- hw/s390x/s390-pci-bus.c | 4 +- hw/s390x/s390-pci-bus.h | 4 +- hw/s390x/s390-pci-stub.c | 74 ++++++++++++++++++++++++++++++++ hw/s390x/s390-virtio-ccw.c | 12 +++--- hw/s390x/sclp.c | 19 +++++++-- target/s390x/ioinst.c | 16 +++++++ target/s390x/kvm.c | 89 +++++++++++++++++++++++++++------------ 10 files changed, 193 insertions(+), 42 deletions(-) create mode 100644 hw/s390x/s390-pci-stub.c -- 2.13.3