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
> 

Reply via email to