@@ -629,6 +629,15 @@ static int dm_op(const struct dmop_args *op_args)
break;
}
+ case XEN_DMOP_remote_shutdown:
+ {
+ const struct xen_dm_op_remote_shutdown *data =
+ &op.u.remote_shutdown;
+
+ domain_shutdown(d, data->reason);
+ break;
+ }
+
default:
rc = -EOPNOTSUPP;
break;
@@ -657,6 +666,7 @@ CHECK_dm_op_modified_memory;
CHECK_dm_op_set_mem_type;
CHECK_dm_op_inject_event;
CHECK_dm_op_inject_msi;
+CHECK_dm_op_remote_shutdown;
int compat_dm_op(domid_t domid,
unsigned int nr_bufs,
@@ -357,6 +357,17 @@ struct xen_dm_op_map_mem_type_to_ioreq_server {
has to be set to zero by the caller */
};
+/*
+ * XEN_DMOP_remote_shutdown : Declare a shutdown for another domain
+ * Identical to SCHEDOP_remote_shutdown
+ */
+#define XEN_DMOP_remote_shutdown 16
+
+struct xen_dm_op_remote_shutdown {
+ uint32_t reason; /* SHUTDOWN_* => enum sched_shutdown_reason */
+ /* (Other reason values are not blocked) */
+};
+
struct xen_dm_op {
uint32_t op;
uint32_t pad;
@@ -377,6 +388,7 @@ struct xen_dm_op {
struct xen_dm_op_inject_msi inject_msi;
struct xen_dm_op_map_mem_type_to_ioreq_server
map_mem_type_to_ioreq_server;
+ struct xen_dm_op_remote_shutdown remote_shutdown;
} u;
};
@@ -64,6 +64,7 @@
? dm_op_inject_msi hvm/dm_op.h
? dm_op_ioreq_server_range hvm/dm_op.h
? dm_op_modified_memory hvm/dm_op.h
+? dm_op_remote_shutdown hvm/dm_op.h
? dm_op_set_ioreq_server_state hvm/dm_op.h
? dm_op_set_isa_irq_level hvm/dm_op.h
? dm_op_set_mem_type hvm/dm_op.h