From 154ef9e3cc7bb902df177d4942f5af53da7af67b Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Tue, 19 Aug 2008 10:51:41 +0100 Subject: [PATCH] vtd: Don't do FLR when we create domain or hotplug device into guest. VT-d hot-plug is done in such a way: 1) xend sends 'pci-ins' command to ioemu via xenstore; 2) ioemu creates pass-through device and raises SCI to guest OS; guest OS loads device driver, and device driver initializes the hot-plugged device; 3) xend does FLR. There is a race condition about 2) and 3). If 3) runs slow, we have troubles. Thanks for Yuji Shimada's locating the issues. We can work around the issues by not doing FLR when we create domain or hotplug device into guest, namely, we only do FLR when we destroy domain or hotplug device from guest. Signed-off-by: Dexuan Cui Signed-off-by: Dongxiao Xu --- tools/python/xen/xend/server/pciif.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tools/python/xen/xend/server/pciif.py b/tools/python/xen/xend/server/pciif.py index 4c3a2a3108..416dba2205 100644 --- a/tools/python/xen/xend/server/pciif.py +++ b/tools/python/xen/xend/server/pciif.py @@ -290,8 +290,12 @@ class PciController(DevController): self.CheckSiblingDevices(fe_domid, dev) - if arch.type != "ia64": - dev.do_FLR() + # We don't do FLR when we create domain and hotplug device into guest, + # namely, we only do FLR when we destroy domain or hotplug device from + # guest. This is mainly to work around the race condition in hotplug code + # paths. See the changeset's description for details. + # if arch.type != "ia64": + # dev.do_FLR() PCIQuirk(dev.vendor, dev.device, dev.subvendor, dev.subdevice, domain, bus, slot, func) -- 2.30.2