diff --git a/lib/hypervisor/hv_kvm.py b/lib/hypervisor/hv_kvm.py
index ba5b39d2d3d25eb0f79d79dcd921dca25ce5d45f..028e6754c4f5feb173e46cc96ef8128d53a2adaa 100644
--- a/lib/hypervisor/hv_kvm.py
+++ b/lib/hypervisor/hv_kvm.py
@@ -506,6 +506,11 @@ class KVMHypervisor(hv_base.BaseHypervisor):
           done = True
         elif status == 'active':
           time.sleep(2)
+        elif status == 'failed' or status == 'cancelled':
+          if not live:
+            self._CallMonitorCommand(instance_name, 'cont')
+          raise errors.HypervisorError("Migration %s at the kvm level" %
+                                       status)
         else:
           logging.info("KVM: unknown migration status '%s'" % status)
           time.sleep(2)