On Tue, 13 Jan 2015, Liang Li wrote: > Use the 'xl pci-attach $DomU $BDF' command to attach more than > one PCI devices to the guest, then detach the devices with > 'xl pci-detach $DomU $BDF', after that, re-attach these PCI > devices again, an error message will be reported like following: > > libxl: error: libxl_qmp.c:287:qmp_handle_error_response: receive > an error message from QMP server: Duplicate ID 'pci-pt-03_10.1' > for device. > > If using the 'address_space_memory' as the parameter of > 'memory_listener_register', 'xen_pt_region_del' will not be called > if the memory region's name is not 'xen-pci-pt-*' when the devices > is detached. This will cause the device's related QemuOpts object > not be released properly. > > Using the device's address space can avoid such issue, because the > calling count of 'xen_pt_region_add' when attaching and the calling > count of 'xen_pt_region_del' when detaching is the same, so all the > memory region ref and unref by the 'xen_pt_region_add' and > 'xen_pt_region_del' can be released properly. > > Signed-off-by: Liang Li <liang.z...@intel.com> > Reviewed-by: Paolo Bonzini <pbonz...@redhat.com> > Reported-by: Longtao Pang <longtaox.p...@intel.com>
Added to my queue > hw/xen/xen_pt.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c > index c1bf357..f2893b2 100644 > --- a/hw/xen/xen_pt.c > +++ b/hw/xen/xen_pt.c > @@ -736,7 +736,7 @@ static int xen_pt_initfn(PCIDevice *d) > } > > out: > - memory_listener_register(&s->memory_listener, &address_space_memory); > + memory_listener_register(&s->memory_listener, &s->dev.bus_master_as); > memory_listener_register(&s->io_listener, &address_space_io); > XEN_PT_LOG(d, > "Real physical device %02x:%02x.%d registered > successfully!\n", > -- > 1.9.1 >