* Denis V. Lunev (d...@openvz.org) wrote: > This is a long story. RedHat has relicensed Windows KVM device drivers > in 2018 and there was an agreement that to avoid WHQL driver conflict > software manufacturers should set proper PCI subsystem vendor ID in > their distributions. Thus PCI subsystem vendor id becomes actively used. > > The problem is that this field is applied by us via hardware compats. > Thus technically it could be lost. > > This patch adds PCI susbsystem id and vendor id to exportable parameters > for validation. > > Signed-off-by: Denis V. Lunev <d...@openvz.org> > CC: "Dr. David Alan Gilbert" <dgilb...@redhat.com> > CC: Eric Blake <ebl...@redhat.com> > CC: Markus Armbruster <arm...@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilb...@redhat.com> I'll take it via HMP. Dave > --- > hmp.c | 2 ++ > hw/pci/pci.c | 3 +++ > qapi-schema.json | 7 ++++++- > 3 files changed, 11 insertions(+), 1 deletion(-) > > diff --git a/hmp.c b/hmp.c > index 2874bcd789..8fb0957cfd 100644 > --- a/hmp.c > +++ b/hmp.c > @@ -803,6 +803,8 @@ static void hmp_info_pci_device(Monitor *mon, const > PciDeviceInfo *dev) > > monitor_printf(mon, ": PCI device %04" PRIx64 ":%04" PRIx64 "\n", > dev->id->vendor, dev->id->device); > + monitor_printf(mon, " PCI subsystem %04" PRIx64 ":%04" PRIx64 "\n", > + dev->id->subsystem_vendor, dev->id->subsystem); > > if (dev->has_irq) { > monitor_printf(mon, " IRQ %" PRId64 ".\n", dev->irq); > diff --git a/hw/pci/pci.c b/hw/pci/pci.c > index f0c98cd0ae..be70dd425c 100644 > --- a/hw/pci/pci.c > +++ b/hw/pci/pci.c > @@ -1724,6 +1724,9 @@ static PciDeviceInfo *qmp_query_pci_device(PCIDevice > *dev, PCIBus *bus, > info->id = g_new0(PciDeviceId, 1); > info->id->vendor = pci_get_word(dev->config + PCI_VENDOR_ID); > info->id->device = pci_get_word(dev->config + PCI_DEVICE_ID); > + info->id->subsystem = pci_get_word(dev->config + PCI_SUBSYSTEM_ID); > + info->id->subsystem_vendor = > + pci_get_word(dev->config + PCI_SUBSYSTEM_VENDOR_ID); > info->regions = qmp_query_pci_regions(dev); > info->qdev_id = g_strdup(dev->qdev.id ? dev->qdev.id : ""); > > diff --git a/qapi/misc.json b/qapi/misc.json > index dfef6faf81..1704a8d437 100644 > --- a/qapi/misc.json > +++ b/qapi/misc.json > @@ -2162,10 +2162,15 @@ > # > # @vendor: the PCI vendor id > # > +# @subsystem: the PCI subsystem id (since 3.1) > +# > +# @subsystem-vendor: the PCI subsystem vendor id (since 3.1) > +# > # Since: 2.4 > ## > { 'struct': 'PciDeviceId', > - 'data': {'device': 'int', 'vendor': 'int'} } > + 'data': {'device': 'int', 'vendor': 'int', 'subsystem': 'int', > + 'subsystem-vendor': 'int'} } > > ## > # @PciDeviceInfo: > -- > 2.17.1 > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK