Skip to contentSkip to conversation

Support guest reboots when in Xen HVM mode

PATCH In review John Baboval 2 participants 3 messages Oct 28, 2011 – Nov 7, 2011

lore
Share & tools
lore
#0 lore raw

PATCH 1/3 Support guest reboots when in Xen HVM mode

Call xc_domain_shutdown with the reboot flag when the guest requests a reboot.

---
 xen-all.c |   22 ++++++++++++++++++++++
 1 files changed, 22 insertions(+), 0 deletions(-)
xen-all.c +1 -0
index b5e28ab..cd71b24 100644
@@ -742,6 +742,7 @@ static void cpu_handle_ioreq(void *opaque)
             }
             if (qemu_reset_requested_get()) {
                 qemu_system_reset(VMRESET_REPORT);
+                reboot_hvm_domain();
             }
         }
 @@ -979,3 +980,24 @@ void destroy_hvm_domain(void)
         xc_interface_close(xc_handle);
     }

}
+
+void reboot_hvm_domain(void)
+{
+ XenXC xc_handle;
+ int sts;
+
+ xc_handle = xen_xc_interface_open(0, 0, 0);
+ if (xc_handle == XC_HANDLER_INITIAL_VALUE) {
+ fprintf(stderr, "Cannot acquire xenctrl handle\n");
+ } else {
+ sts = xc_domain_shutdown(xc_handle, xen_domid, SHUTDOWN_reboot);
+ if (sts != 0) {
+ fprintf(stderr, "? xc_domain_shutdown failed to issue reboot, "
+ "sts %d, %s\n", sts, strerror(errno));
+ } else {
+ fprintf(stderr, "Issued domain %d reboot\n", xen_domid);
+ }
+ xc_interface_close(xc_handle);
+ }
+}
+

Signature · 1 line
1.7.4.1
#1 lore raw
Quoted 2 lines · John Baboval

Call xc_domain_shutdown with the reboot flag when the guest requests a reboot.

Thanks for the patch!
Sorry for the delay in replaying but away for XenSummit Asia.

Quoted 31 lines
---
  xen-all.c |   22 ++++++++++++++++++++++
  1 files changed, 22 insertions(+), 0 deletions(-)
xen-all.c +1 -0
index b5e28ab..cd71b24 100644
@@ -742,6 +742,7 @@ static void cpu_handle_ioreq(void *opaque)
              }
              if (qemu_reset_requested_get()) {
                  qemu_system_reset(VMRESET_REPORT);
+                reboot_hvm_domain();
              }
          }
  @@ -979,3 +980,24 @@ void destroy_hvm_domain(void)
          xc_interface_close(xc_handle);
      }

}

xen-all.c +10 -0
+
+void reboot_hvm_domain(void)
+{
+    XenXC xc_handle;
+    int sts;
+
+    xc_handle = xen_xc_interface_open(0, 0, 0);
+    if (xc_handle == XC_HANDLER_INITIAL_VALUE) {
+        fprintf(stderr, "Cannot acquire xenctrl handle\n");
+    } else {

xen-all.c

Quoted 10 lines
xen-all.c +10 -0
+        sts = xc_domain_shutdown(xc_handle, xen_domid, SHUTDOWN_reboot);
+        if (sts != 0) {
+            fprintf(stderr, "? xc_domain_shutdown failed to issue reboot, "
+                    "sts %d, %s\n", sts, strerror(errno));
+        } else {
+            fprintf(stderr, "Issued domain %d reboot\n", xen_domid);
+        }
+        xc_interface_close(xc_handle);
+    }
+}

I think that what you are doing is correct but I couldn't help but notice that reboot_hvm_domain is very similar to destroy_hvm_domain. I would rather unify the two functions and have a single shutdown_domain function with two arguments: a reboot/destroy argument and xc_handle (we don't need to open a new one, we can reuse state->xce_handle). Are you OK with submitting a new version of this patch with these changes?

#2 lore raw
Quoted 46 lines · Stefano Stabellini
Quoted 2 lines · John Baboval

Call xc_domain_shutdown with the reboot flag when the guest requests a reboot.

Thanks for the patch!
Sorry for the delay in replaying but away for XenSummit Asia.

Quoted 40 lines
---
   xen-all.c |   22 ++++++++++++++++++++++
   1 files changed, 22 insertions(+), 0 deletions(-)
xen-all.c +1 -0
index b5e28ab..cd71b24 100644
@@ -742,6 +742,7 @@ static void cpu_handle_ioreq(void *opaque)
               }
               if (qemu_reset_requested_get()) {
                   qemu_system_reset(VMRESET_REPORT);
+                reboot_hvm_domain();
               }
           }
   @@ -979,3 +980,24 @@ void destroy_hvm_domain(void)
           xc_interface_close(xc_handle);
       }

}

xen-all.c +19 -0
+
+void reboot_hvm_domain(void)
+{
+    XenXC xc_handle;
+    int sts;
+
+    xc_handle = xen_xc_interface_open(0, 0, 0);
+    if (xc_handle == XC_HANDLER_INITIAL_VALUE) {
+        fprintf(stderr, "Cannot acquire xenctrl handle\n");
+    } else {
+        sts = xc_domain_shutdown(xc_handle, xen_domid, SHUTDOWN_reboot);
+        if (sts != 0) {
+            fprintf(stderr, "? xc_domain_shutdown failed to issue reboot, "
+                    "sts %d, %s\n", sts, strerror(errno));
+        } else {
+            fprintf(stderr, "Issued domain %d reboot\n", xen_domid);
+        }
+        xc_interface_close(xc_handle);
+    }
Quoted 8 lines
Quoted 1 line

+}

I think that what you are doing is correct but I couldn't help but notice that reboot_hvm_domain is very similar to destroy_hvm_domain. I would rather unify the two functions and have a single shutdown_domain function with two arguments: a reboot/destroy argument and xc_handle (we don't need to open a new one, we can reuse state->xce_handle). Are you OK with submitting a new version of this patch with these changes?

Sounds good to me. I have a huge backlog of stuff to debug and test though, so it'll be a few days before I get to this.