From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50442) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1axWJc-0003Ec-1o for qemu-devel@nongnu.org; Tue, 03 May 2016 05:08:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1axWJH-0006SK-7G for qemu-devel@nongnu.org; Tue, 03 May 2016 05:08:18 -0400 Received: from mail-pf0-x232.google.com ([2607:f8b0:400e:c00::232]:36481) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1axWJF-0006E5-Ud for qemu-devel@nongnu.org; Tue, 03 May 2016 05:08:03 -0400 Received: by mail-pf0-x232.google.com with SMTP id c189so7732889pfb.3 for ; Tue, 03 May 2016 02:07:47 -0700 (PDT) From: Alexey Kardashevskiy Message-ID: <65fbea72-f65f-fda9-775c-f9044f1e144d@ozlabs.ru> Date: Tue, 3 May 2016 19:07:39 +1000 MIME-Version: 1.0 Content-Type: text/plain; charset=koi8-r; format=flowed Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] memory_listener_unregister does not call region_del() - why? List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "qemu-devel@nongnu.org" Cc: David Gibson , Paolo Bonzini , Alex Williamson Hi! Noticed a thing - when we do vfio-pci hotplug, we register a memory listener on PCI address space: memory_listener_register(&container->listener, container->space->as); Then on the "pseries" machine, I add IOMMU subregions and this ends up in vfio_listener_region_add() where I can create hardware window and hook it to KVM, etc, some stuff. So far so good. Now I am trying hot unplug. So vfio_instance_finalize() is called, and from it - vfio_put_group -> vfio_disconnect_container -> vfio_listener_release -> memory_listener_unregister(&container->listener), as expected. Hoewever, unlike memory_listener_register() (which calls region_add() callbacks), memory_listener_unregister() is as simple as this: void memory_listener_unregister(MemoryListener *listener) { QTAILQ_REMOVE(&memory_listeners, listener, link); } No region_del() calls => no proper cleanup. Hm. Is there any particular reason for it to be that simple and there is another way to be notified about some memory listener being unregistered? Thanks. -- Alexey