From 18613dc6d9f2f33c333440fecab4c584281305ee Mon Sep 17 00:00:00 2001 From: "Denis V. Lunev" Date: Tue, 2 Oct 2018 16:55:38 +0300 Subject: qmp, hmp: make subsystem/system-vendor identities optional According to PCI specification, subsystem id and subsystem vendor id are present only in type 0 and type 2 headers (at different offsets), but not in type 1 headers. Thus we should make this data optional in struct PciDeviceId and skip reporting them via HMP if the information is not available. Additional (wrong information) about PCI bridges (Type1 devices) has been added in 5383a705 and fortunately not released. This patch fixes that problem. The problem was spotted by Markus. Signed-off-by: Denis V. Lunev CC: "Dr. David Alan Gilbert" CC: Eric Blake CC: Markus Armbruster Message-Id: <20181002135538.12113-1-den@openvz.org> Reported-by: Markus Armbruster Reviewed-by: Eric Blake Reviewed-by: Dr. David Alan Gilbert Reviewed-by: Markus Armbruster Signed-off-by: Dr. David Alan Gilbert --- hmp.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'hmp.c') diff --git a/hmp.c b/hmp.c index 61ef120423..7828f93a39 100644 --- a/hmp.c +++ b/hmp.c @@ -837,8 +837,10 @@ 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->id->has_subsystem_vendor && dev->id->has_subsystem) { + 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); -- cgit 1.4.1