Patchwork [1/3] Support guest reboots when in Xen HVM mode

login
register
mail settings
Submitter John Baboval
Date Oct. 28, 2011, 7:38 p.m.
Message ID <4EAB04A9.9080509@virtualcomputer.com>
Download mbox | patch
Permalink /patch/122489/
State New
Headers show

Comments

John Baboval - Oct. 28, 2011, 7:38 p.m.
Call xc_domain_shutdown with the reboot flag when the guest requests a 
reboot.

Signed-off-by: John V. Baboval <john.baboval@virtualcomputer.com>
Signed-off-by: Tom Goetz <tom.goetz@virtualcomputer.com>
---
  xen-all.c |   22 ++++++++++++++++++++++
  1 files changed, 22 insertions(+), 0 deletions(-)

          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);
+    }
+}
+
Stefano Stabellini - Nov. 7, 2011, 4:43 p.m.
On Fri, 28 Oct 2011, John Baboval wrote:
> 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.

> Signed-off-by: John V. Baboval <john.baboval@virtualcomputer.com>
> Signed-off-by: Tom Goetz <tom.goetz@virtualcomputer.com>
> ---
>   xen-all.c |   22 ++++++++++++++++++++++
>   1 files changed, 22 insertions(+), 0 deletions(-)
> 
> diff --git a/xen-all.c b/xen-all.c
> index b5e28ab..cd71b24 100644
> --- a/xen-all.c
> +++ b/xen-all.c
> @@ -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);
> +    }
> +}

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?
John Baboval - Nov. 7, 2011, 4:44 p.m.
On 11/07/2011 11:43 AM, Stefano Stabellini wrote:
> On Fri, 28 Oct 2011, John Baboval wrote:
>> 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.
>
>> Signed-off-by: John V. Baboval<john.baboval@virtualcomputer.com>
>> Signed-off-by: Tom Goetz<tom.goetz@virtualcomputer.com>
>> ---
>>    xen-all.c |   22 ++++++++++++++++++++++
>>    1 files changed, 22 insertions(+), 0 deletions(-)
>>
>> diff --git a/xen-all.c b/xen-all.c
>> index b5e28ab..cd71b24 100644
>> --- a/xen-all.c
>> +++ b/xen-all.c
>> @@ -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);
>> +    }
>> +}
> 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.

Patch

diff --git a/xen-all.c b/xen-all.c
index b5e28ab..cd71b24 100644
--- a/xen-all.c
+++ b/xen-all.c
@@ -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)