From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36120) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bgqKx-0000IW-Ji for qemu-devel@nongnu.org; Mon, 05 Sep 2016 05:37:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bgqKq-0000iO-Ct for qemu-devel@nongnu.org; Mon, 05 Sep 2016 05:37:06 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42420) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bgqKq-0000iB-7g for qemu-devel@nongnu.org; Mon, 05 Sep 2016 05:37:00 -0400 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id AEA65C056792 for ; Mon, 5 Sep 2016 09:36:59 +0000 (UTC) References: <20160901171148.697e696b@t450s.home> <5abeb25c-a8a9-9144-cb6f-724647c5f35a@redhat.com> <87d1ki3djk.fsf@dusky.pond.sub.org> From: Paolo Bonzini Message-ID: <4b642f96-9fd6-844b-8d1f-395ad4b7bf79@redhat.com> Date: Mon, 5 Sep 2016 11:36:55 +0200 MIME-Version: 1.0 In-Reply-To: <87d1ki3djk.fsf@dusky.pond.sub.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [libvirt] qapi DEVICE_DELETED event issued *before* instance_finalize?! List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Markus Armbruster , Michal Privoznik Cc: Alex Williamson , qemu-devel , libvir-list@redhat.com On 05/09/2016 11:23, Markus Armbruster wrote: >> > >> > On the other hand, it is clearly documented that the DEVICE_DELETED >> > event is sent as soon as guest acknowledges completion of device >> > removal. So libvirt's buggy if we'd follow documentation strictly. B= ut >> > then again, I don't see much information value in "guest has detache= d >> > device but qemu hasn't yet" event. Libvirt would ignore such event. > Unless I'm missing something, libvirt needs an event that signals "Gues= t > and QEMU are done with this device". Current DEVICE_DELETED isn't. >=20 > Can we imagine a use for current DEVICE_DELETED, i.e. "Guest is done, > but QEMU isn't"? >=20 > Would anything break if we changed semantics of DEVICE_DELETED to what > libvirt actually needs? >=20 > If the answers are "no" and "no", let's do it. There is a subtle aspect of this. After the current DEVICE_DELETED, the device id is not used any more. So technically you could have device_add bar,id=3Dfoo device_del foo // something in QEMU prevents the device from going away? // for example there is a storage issue that blocks completion // of a read(), and bar is a storage device device_add bar,id=3Dfoo device_del foo // which foo is being deleted? The old one or the new one? event DEVICE_DELETED DEVICE_DELETED does have a meaning: management cannot talk to the device anymore in QMP once it is raised. Technically what libvirt wants to know for VFIO is not whether the device is gone; it's whether the device's _backend_ (the VFIO file descriptor) is gone. The device backend could have been a separate QOM object, but it isn't. So perhaps we need a new event that is specific to VFIO? Thanks, Paolo