More about this bugs, in the libvirt/libxl logs, there is this:
(starting at 2015-11-17 23:16:44 UTC)
xc: detail: xc_domain_save: starting save of domid 42
libxl: debug: libxl_dom.c:1074:libxl__domain_suspend_common_callback: issuing PV suspend request via XenBus control node
libxl: debug: libxl_dom.c:1078:libxl__domain_suspend_common_callback: wait for the guest to acknowledge suspend request
libxl: debug: libxl_dom.c:1125:libxl__domain_suspend_common_callback: guest acknowledged suspend request
libxl: debug: libxl_dom.c:1129:libxl__domain_suspend_common_callback: wait for the guest to suspend
libxl: error: libxl_dom.c:1151:libxl__domain_suspend_common_callback: guest did not suspend
xc: error: Suspend request failed: Internal error
xc: error: Domain appears not to have suspended: Internal error
xc: detail: Save exit of domid 42 with rc=1
libxl-save-helper: debug: complete r=1: Success
libxl: error: libxl_dom.c:1406:libxl__xc_domain_save_done: saving domain: domain responded to suspend request: Success
And I think it is Linux itself that fail to suspend. I been trying to debug that for sometime, but so far, the main thing I've done is update the CirrOS image to include a newer kernel, and have the CI print the guest console when suspend fail. It appear that Linux fail to suspend if a suspend request arrive before it is fully booted.
More about this bugs, in the libvirt/libxl logs, there is this: c:1074: libxl__ domain_ suspend_ common_ callback: issuing PV suspend request via XenBus control node c:1078: libxl__ domain_ suspend_ common_ callback: wait for the guest to acknowledge suspend request c:1125: libxl__ domain_ suspend_ common_ callback: guest acknowledged suspend request c:1129: libxl__ domain_ suspend_ common_ callback: wait for the guest to suspend c:1151: libxl__ domain_ suspend_ common_ callback: guest did not suspend c:1406: libxl__ xc_domain_ save_done: saving domain: domain responded to suspend request: Success
(starting at 2015-11-17 23:16:44 UTC)
xc: detail: xc_domain_save: starting save of domid 42
libxl: debug: libxl_dom.
libxl: debug: libxl_dom.
libxl: debug: libxl_dom.
libxl: debug: libxl_dom.
libxl: error: libxl_dom.
xc: error: Suspend request failed: Internal error
xc: error: Domain appears not to have suspended: Internal error
xc: detail: Save exit of domid 42 with rc=1
libxl-save-helper: debug: complete r=1: Success
libxl: error: libxl_dom.
And I think it is Linux itself that fail to suspend. I been trying to debug that for sometime, but so far, the main thing I've done is update the CirrOS image to include a newer kernel, and have the CI print the guest console when suspend fail. It appear that Linux fail to suspend if a suspend request arrive before it is fully booted.