From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yosuke Iwamatsu Subject: Re: [PATCH 0/3][RFC] PV Passthrough PCI Device Hotplug Support Date: Fri, 22 Feb 2008 11:03:30 +0900 Message-ID: <47BE2D72.7040000@ab.jp.nec.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Keir Fraser Cc: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org Keir Fraser wrote: > On 21/2/08 13:25, "Yosuke Iwamatsu" wrote: >> dev-#, vdev-# and state-# are all backend nodes. >> Xend writes physical names on dev-# to let pciback know which device >> should be exported (This is the original behaviour). >> Then pciback publishes the corresponding virtul name on vdev-#. >> At the time of detachment, pcifront scans backend nodes and finds >> which device should be removed by seeing vdev-#. >> pcifront doesn't need to know the physical name indeed. > > This seems a bit different from how initial probe happens (by reading the > root-%d xenstore nodes). Could we not just watch those in pcifront and > re-parse them for changes? > > Your state machine was also quite complicated, perhaps primarily so that > pcifront could handshake when devices are removed. Is this handshake > necessary? (e.g., in particular, is there any equivalent notion for real PCI > hot-unplug?). If not, we can get equivalent hotplug functionality between > HVM and PV without needing a complicated xend->frontend->backend->xend > handshaking ring: > * xend updates dev-% nodes > * pciback sees this and updates root-%d nodes > * pcifront sees this and re-parses root-%d nodes When hot add, this method (xend->pciback->pcifront) works. And I did that way in my patch. When hot remove, however, I'm afraid it's not safe. xend->pciback->pcifront means that we first disable io/mmio port access, destroy backend config space emulation and then notify the guest OS of the removal. The guest OS would see something like a virtual surprise-style removal, that is, a device suddenly disappears while it is in use. I confess that I have never done a real PCI hot-unplug myself, but several specs (acpi spec 3.0b 6.3, pcihp spec 1.1) say that a recommended hot removal sequence is like: 1. the user notifys the OS of the desire to remove a slot 2. the OS logicaly removes the device (unload driver, poweroff, etc) and report the user it's ready 3. the user removes the slot So the reason I added vdev-# and I chose xend->frontend->backend->xend cicle is the same; let the guest OS cleanly shutdown the device first and then actually remove it. I think it's quite essential. Thanks, Yosuke > > -- Keir >