# HG changeset patch
# User Keir Fraser <keir@xxxxxxxxxxxxx>
# Date 1193047864 -3600
# Node ID 183a2d6eaadf5a24e231de4b473d0ff683ebd2c2
# Parent c44d82f36665f0ac74e5591ffcdc548494c0ecb2
Allow a guest to send NMIs to its VCPUs.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
xen/common/compat/domain.c | 1 +
xen/common/domain.c | 16 +++++++++++-----
xen/include/public/vcpu.h | 3 +++
3 files changed, 15 insertions(+), 5 deletions(-)
diff -r c44d82f36665 -r 183a2d6eaadf xen/common/compat/domain.c
--- a/xen/common/compat/domain.c Mon Oct 22 09:42:49 2007 +0100
+++ b/xen/common/compat/domain.c Mon Oct 22 11:11:04 2007 +0100
@@ -59,6 +59,7 @@ int compat_vcpu_op(int cmd, int vcpuid,
case VCPUOP_stop_periodic_timer:
case VCPUOP_set_singleshot_timer:
case VCPUOP_stop_singleshot_timer:
+ case VCPUOP_send_nmi:
rc = do_vcpu_op(cmd, vcpuid, arg);
break;
diff -r c44d82f36665 -r 183a2d6eaadf xen/common/domain.c
--- a/xen/common/domain.c Mon Oct 22 09:42:49 2007 +0100
+++ b/xen/common/domain.c Mon Oct 22 11:11:04 2007 +0100
@@ -708,11 +708,9 @@ long do_vcpu_op(int cmd, int vcpuid, XEN
}
case VCPUOP_stop_periodic_timer:
- {
v->periodic_period = 0;
vcpu_force_reschedule(v);
break;
- }
case VCPUOP_set_singleshot_timer:
{
@@ -740,13 +738,21 @@ long do_vcpu_op(int cmd, int vcpuid, XEN
}
case VCPUOP_stop_singleshot_timer:
- {
if ( v != current )
return -EINVAL;
stop_timer(&v->singleshot_timer);
- break;
- }
+
+ break;
+
+ case VCPUOP_send_nmi:
+ if ( !guest_handle_is_null(arg) )
+ return -EINVAL;
+
+ if ( !test_and_set_bool(v->nmi_pending) )
+ vcpu_kick(v);
+
+ break;
default:
rc = arch_do_vcpu_op(cmd, v, arg);
diff -r c44d82f36665 -r 183a2d6eaadf xen/include/public/vcpu.h
--- a/xen/include/public/vcpu.h Mon Oct 22 09:42:49 2007 +0100
+++ b/xen/include/public/vcpu.h Mon Oct 22 11:11:04 2007 +0100
@@ -179,6 +179,9 @@ typedef struct vcpu_register_vcpu_info v
typedef struct vcpu_register_vcpu_info vcpu_register_vcpu_info_t;
DEFINE_XEN_GUEST_HANDLE(vcpu_register_vcpu_info_t);
+/* Send an NMI to the specified VCPU. @extra_arg == NULL. */
+#define VCPUOP_send_nmi 11
+
#endif /* __XEN_PUBLIC_VCPU_H__ */
/*
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|