Hello, As requested I''ve created a remote branch that contains the latest version of my hotplug series. Changes are available in the git repository at: git://xenbits.xen.org/people/royger/xen.git hotplug.v10 Roger Pau Monne (19): *libxl: check backend state before setting it to "closing" libxl: change ao_device_remove to ao_device *libxl: move device model creation prototypes *libxl: convert libxl_domain_destroy to an async op *libxl: move bootloader data strucutres and prototypes libxl: refactor disk addition to take a helper libxl: convert libxl__device_disk_local_attach to an async op *libxl: rename vifs to nics *libxl: convert libxl_device_disk_add to an async op *libxl: convert libxl_device_nic_add to an async operation *libxl: add option to choose who executes hotplug scripts *libxl: rename _IOEMU nic type to VIF_IOEMU libxl: set correct nic type depending on the guest *libxl: use libxl__xs_path_cleanup on device_destroy *libxl: call hotplug scripts for disk devices from libxl *libxl: call hotplug scripts for nic devices from libxl libxl: convert libxl_device_vkb_add to an async operation libxl: convert libxl_device_vfb_add to an async operation xl: main_blockdetach don''t call destroy if remove succeeds * Acked
With this version I get a timeout when destroying an HVM guest which uses stub domains. The timeout seems to be waiting for the stub domain''s non-primary consoles to move to state 6. I know that console 0 of a PV domain is special (and doesn''t follow the usual state machine) but this is console 1,2 & 3 which I thought did. Perhaps Stefano can shed some light? I''m pretty certain this wasn''t happening with the latest version of this series I was using, which was either v8 or v9 IIRC. Ian. quartz:~# xl -vvv dest dHVM-1 libxl: debug: libxl.c:1262:libxl_domain_destroy: ao 0x8069688: create: how=(nil) callback=(nil) poller=0x80696c8 libxl: debug: libxl_dm.c:1228:libxl__destroy_device_model: Device Model signaled libxl: debug: libxl_event.c:512:libxl__ev_xswatch_register: watch w=0x806b02c wpath=/local/domain/0/backend/vbd/69/768/state token=3/0: register slotnum=3 libxl: debug: libxl_event.c:512:libxl__ev_xswatch_register: watch w=0x806b24c wpath=/local/domain/0/backend/console/69/1/state token=2/1: register slotnum=2 libxl: debug: libxl_event.c:512:libxl__ev_xswatch_register: watch w=0x806b2d4 wpath=/local/domain/0/backend/console/69/2/state token=1/2: register slotnum=1 libxl: debug: libxl_event.c:512:libxl__ev_xswatch_register: watch w=0x806b35c wpath=/local/domain/0/backend/console/69/3/state token=0/3: register slotnum=0 libxl: debug: libxl_event.c:512:libxl__ev_xswatch_register: watch w=0x806b3e4 wpath=/local/domain/0/backend/vif/69/0/state token=19/4: register slotnum=19 libxl: debug: libxl_event.c:512:libxl__ev_xswatch_register: watch w=0x806ba34 wpath=/local/domain/0/backend/vbd/68/768/state token=18/5: register slotnum=18 libxl: debug: libxl_event.c:512:libxl__ev_xswatch_register: watch w=0x806bbcc wpath=/local/domain/0/backend/vif/68/0/state token=17/6: register slotnum=17 libxl: debug: libxl.c:1271:libxl_domain_destroy: ao 0x8069688: inprogress: poller=0x80696c8, flags=i libxl: debug: libxl_event.c:457:watchfd_callback: watch w=0x806b02c wpath=/local/domain/0/backend/vbd/69/768/state token=3/0: event epath=/local/domain/0/backend/vbd/69/768/state libxl: debug: libxl_event.c:596:devstate_watch_callback: backend /local/domain/0/backend/vbd/69/768/state wanted state 6 ok libxl: debug: libxl_event.c:549:libxl__ev_xswatch_deregister: watch w=0x806b02c wpath=/local/domain/0/backend/vbd/69/768/state token=3/0: deregister slotnum=3 libxl: debug: libxl_event.c:561:libxl__ev_xswatch_deregister: watch w=0x806b02c: deregister unregistered libxl: debug: libxl_device.c:901:device_hotplug: calling hotplug script: /etc/xen/scripts/block remove libxl: debug: libxl_event.c:426:watchfd_callback: watch epath=/local/domain/0/backend/vbd/69/768/state token=3/0: empty slot libxl: debug: libxl_event.c:457:watchfd_callback: watch w=0x806b24c wpath=/local/domain/0/backend/console/69/1/state token=2/1: event epath=/local/domain/0/backend/console/69/1/state libxl: debug: libxl_event.c:600:devstate_watch_callback: backend /local/domain/0/backend/console/69/1/state wanted state 6 still waiting state 5 libxl: debug: libxl_event.c:457:watchfd_callback: watch w=0x806b2d4 wpath=/local/domain/0/backend/console/69/2/state token=1/2: event epath=/local/domain/0/backend/console/69/2/state libxl: debug: libxl_event.c:600:devstate_watch_callback: backend /local/domain/0/backend/console/69/2/state wanted state 6 still waiting state 5 libxl: debug: libxl_event.c:457:watchfd_callback: watch w=0x806b35c wpath=/local/domain/0/backend/console/69/3/state token=0/3: event epath=/local/domain/0/backend/console/69/3/state libxl: debug: libxl_event.c:600:devstate_watch_callback: backend /local/domain/0/backend/console/69/3/state wanted state 6 still waiting state 5 libxl: debug: libxl_event.c:457:watchfd_callback: watch w=0x806b3e4 wpath=/local/domain/0/backend/vif/69/0/state token=19/4: event epath=/local/domain/0/backend/vif/69/0/state libxl: debug: libxl_event.c:600:devstate_watch_callback: backend /local/domain/0/backend/vif/69/0/state wanted state 6 still waiting state 5 libxl: debug: libxl_event.c:457:watchfd_callback: watch w=0x806ba34 wpath=/local/domain/0/backend/vbd/68/768/state token=18/5: event epath=/local/domain/0/backend/vbd/68/768/state libxl: debug: libxl_event.c:600:devstate_watch_callback: backend /local/domain/0/backend/vbd/68/768/state wanted state 6 still waiting state 5 libxl: debug: libxl_event.c:457:watchfd_callback: watch w=0x806bbcc wpath=/local/domain/0/backend/vif/68/0/state token=17/6: event epath=/local/domain/0/backend/vif/68/0/state libxl: debug: libxl_event.c:600:devstate_watch_callback: backend /local/domain/0/backend/vif/68/0/state wanted state 6 still waiting state 5 libxl: debug: libxl_event.c:457:watchfd_callback: watch w=0x806b3e4 wpath=/local/domain/0/backend/vif/69/0/state token=19/4: event epath=/local/domain/0/backend/vif/69/0/state libxl: debug: libxl_event.c:596:devstate_watch_callback: backend /local/domain/0/backend/vif/69/0/state wanted state 6 ok libxl: debug: libxl_event.c:549:libxl__ev_xswatch_deregister: watch w=0x806b3e4 wpath=/local/domain/0/backend/vif/69/0/state token=19/4: deregister slotnum=19 libxl: debug: libxl_event.c:561:libxl__ev_xswatch_deregister: watch w=0x806b3e4: deregister unregistered libxl: debug: libxl_device.c:901:device_hotplug: calling hotplug script: /etc/xen/scripts/vif-bridge offline libxl: debug: libxl_event.c:457:watchfd_callback: watch w=0x806ba34 wpath=/local/domain/0/backend/vbd/68/768/state token=18/5: event epath=/local/domain/0/backend/vbd/68/768/state libxl: debug: libxl_event.c:596:devstate_watch_callback: backend /local/domain/0/backend/vbd/68/768/state wanted state 6 ok libxl: debug: libxl_event.c:549:libxl__ev_xswatch_deregister: watch w=0x806ba34 wpath=/local/domain/0/backend/vbd/68/768/state token=18/5: deregister slotnum=18 libxl: debug: libxl_event.c:561:libxl__ev_xswatch_deregister: watch w=0x806ba34: deregister unregistered libxl: debug: libxl_device.c:901:device_hotplug: calling hotplug script: /etc/xen/scripts/block remove libxl: debug: libxl_event.c:457:watchfd_callback: watch w=0x806bbcc wpath=/local/domain/0/backend/vif/68/0/state token=17/6: event epath=/local/domain/0/backend/vif/68/0/state libxl: debug: libxl_event.c:596:devstate_watch_callback: backend /local/domain/0/backend/vif/68/0/state wanted state 6 ok libxl: debug: libxl_event.c:549:libxl__ev_xswatch_deregister: watch w=0x806bbcc wpath=/local/domain/0/backend/vif/68/0/state token=17/6: deregister slotnum=17 libxl: debug: libxl_event.c:561:libxl__ev_xswatch_deregister: watch w=0x806bbcc: deregister unregistered libxl: debug: libxl_device.c:901:device_hotplug: calling hotplug script: /etc/xen/scripts/vif-bridge offline libxl: debug: libxl_xshelp.c:222:libxl__xs_path_cleanup: unable to remove path /local/domain/69/device/vif/0: No such file or directory libxl: debug: libxl_xshelp.c:222:libxl__xs_path_cleanup: unable to remove path /local/domain/68/device/vif/0: No such file or directory libxl: debug: libxl_event.c:614:devstate_timeout: backend /local/domain/0/backend/console/69/1/state wanted state 6 timed out libxl: debug: libxl_event.c:549:libxl__ev_xswatch_deregister: watch w=0x806b24c wpath=/local/domain/0/backend/console/69/1/state token=2/1: deregister slotnum=2 libxl: debug: libxl_event.c:561:libxl__ev_xswatch_deregister: watch w=0x806b24c: deregister unregistered libxl: error: libxl_device.c:843:device_backend_callback: unable to disconnect device with path /local/domain/0/backend/console/69/1 libxl: debug: libxl_xshelp.c:222:libxl__xs_path_cleanup: unable to remove path /local/domain/69/device/console/1: No such file or directory libxl: debug: libxl_event.c:614:devstate_timeout: backend /local/domain/0/backend/console/69/2/state wanted state 6 timed out libxl: debug: libxl_event.c:549:libxl__ev_xswatch_deregister: watch w=0x806b2d4 wpath=/local/domain/0/backend/console/69/2/state token=1/2: deregister slotnum=1 libxl: debug: libxl_event.c:561:libxl__ev_xswatch_deregister: watch w=0x806b2d4: deregister unregistered libxl: error: libxl_device.c:843:device_backend_callback: unable to disconnect device with path /local/domain/0/backend/console/69/2 libxl: debug: libxl_xshelp.c:222:libxl__xs_path_cleanup: unable to remove path /local/domain/69/device/console/2: No such file or directory libxl: debug: libxl_event.c:614:devstate_timeout: backend /local/domain/0/backend/console/69/3/state wanted state 6 timed out libxl: debug: libxl_event.c:549:libxl__ev_xswatch_deregister: watch w=0x806b35c wpath=/local/domain/0/backend/console/69/3/state token=0/3: deregister slotnum=0 libxl: debug: libxl_event.c:561:libxl__ev_xswatch_deregister: watch w=0x806b35c: deregister unregistered libxl: error: libxl_device.c:843:device_backend_callback: unable to disconnect device with path /local/domain/0/backend/console/69/3 libxl: debug: libxl_xshelp.c:222:libxl__xs_path_cleanup: unable to remove path /local/domain/69/device/console/3: No such file or directory libxl: error: libxl.c:1462:devices_destroy_cb: libxl__devices_destroy failed for 69 libxl: debug: libxl_event.c:1434:libxl__ao_complete: ao 0x8069688: complete, rc=0 libxl: debug: libxl_event.c:1406:libxl__ao__destroy: ao 0x8069688: destroy xc: debug: hypercall buffer: total allocations:67 total releases:67 xc: debug: hypercall buffer: current allocations:0 maximum allocations:2 xc: debug: hypercall buffer: cache current size:2 xc: debug: hypercall buffer: cache hits:64 misses:2 toobig:1
On Fri, 20 Jul 2012, Ian Campbell wrote:> With this version I get a timeout when destroying an HVM guest which > uses stub domains. The timeout seems to be waiting for the stub domain''s > non-primary consoles to move to state 6. I know that console 0 of a PV > domain is special (and doesn''t follow the usual state machine) but this > is console 1,2 & 3 which I thought did. Perhaps Stefano can shed some > light? > > I''m pretty certain this wasn''t happening with the latest version of this > series I was using, which was either v8 or v9 IIRC.Reading the state machine handler in QEMU (hw/xen_backend.c:xen_be_check_state), it looks like that QEMU is going to set the backend state to Closing or Closed in response to the frontend state going to Closing or Closed. What is libxl doing exactly?