On Tue, 22 Jan 2019 14:25:07 +0100 David Hildenbrand <da...@redhat.com> wrote:
> On 22.01.19 14:23, Cornelia Huck wrote: > > 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. > > > > We could fail on hotplug and warn on coldplug. This would keep existing > setups running. > Ok with me.