On Tue, 22 Jan 2019 14:20:27 +0100 David Hildenbrand <da...@redhat.com> wrote:
> On 22.01.19 14:13, Cornelia Huck wrote: > > On Tue, 22 Jan 2019 11:06:46 +0100 > > David Hildenbrand <da...@redhat.com> wrote: > > > >> On 22.01.19 10:50, Thomas Huth wrote: > >>> On 2019-01-22 10:41, David Hildenbrand wrote: > >>>> We decided to always create the PCI host bridge, even if 'zpci' is not > >>>> enabled (due to migration compatibility). > >>> > >>> Couldn't we disable the host bridge for newer machine types, and just > >>> create it on the old ones for migration compatibility? > > > > I very dimly remember some problems with that approach. > > > >> > >> I think we can with a compat property. However I somewhat dislike that > >> the error/warning will then be "no bus" vs. "zpci CPU feature not > >> enabled". Somebody who has no idea about that will think he somehow has > >> to create a PCI bus on the QEMU comandline. > > > > Agreed, "zpci cpu feature not enabled" gives a much better clue. > > > >> > >> ... however > >> > >>> > >>>> This however right now allows > >>>> to add zPCI/PCI devices to a VM although the guest will never actually > >>>> see > >>>> them, confusing people that are using a simple CPU model that has no > >>>> 'zpci' enabled - "Why isn't this working" (David Hildenbrand) > >>>> > >>>> Let's check for 'zpci' and at least print a warning that this will not > >>>> work as expected. We could also bail out, however that might break > >>>> existing QEMU commandlines. > >>>> > >>>> Signed-off-by: David Hildenbrand <da...@redhat.com> > >>>> --- > >>>> hw/s390x/s390-pci-bus.c | 5 +++++ > >>>> 1 file changed, 5 insertions(+) > >>>> > >>>> diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c > >>>> index b86a8bdcd4..e7d4f49611 100644 > >>>> --- a/hw/s390x/s390-pci-bus.c > >>>> +++ b/hw/s390x/s390-pci-bus.c > >>>> @@ -863,6 +863,11 @@ static void s390_pcihost_pre_plug(HotplugHandler > >>>> *hotplug_dev, DeviceState *dev, > >>>> { > >>>> S390pciState *s = S390_PCI_HOST_BRIDGE(hotplug_dev); > >>>> > >>>> + if (!s390_has_feat(S390_FEAT_ZPCI)) { > >>>> + warn_report("Adding PCI or zPCI devices without the 'zpci' CPU > >>>> feature." > >>>> + " The guest will not be able to see/use these > >>>> devices."); > >>>> + } > >>> > >>> I think it would be better to bail out. The hotplug clearly can not work > >>> in this case, and the warn report might go unnoticed, so blocking the > >>> hotplug process is likely better to get the attention of the user. > >> > >> ... we could also create the bus but bail out here in case the compat > >> property strikes (a.k.a. new QEMO machine type). > > > > Now you confused me... why should failing be based on a compat property? > > > > Otherwise, a QEMU comandline that used to work (which could be created > by libvirt) would now fail. Are we ok with that? > I think we should not fail at all in that case, then. Or only for hotplug, not for coldplug.