On Tue, 2011-01-18 at 17:17 +0000, Stefano Stabellini wrote:
> Add two "special" PV consoles to stubdoms that are going to be used
> to send and receive the qemu-xen save files on save/restore.
>
> Rename the save file on resume so that it doesn't collide with the name
> of the next save file.
>
> Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
>
>
> diff -r 59396addc940 tools/libxl/libxl.c
> --- a/tools/libxl/libxl.c Fri Jan 14 14:26:11 2011 +0000
> +++ b/tools/libxl/libxl.c Tue Jan 18 17:09:56 2011 +0000
> @@ -750,7 +750,7 @@ int libxl_primary_console_exec(libxl_ctx
> {
> uint32_t stubdomid = libxl_get_stubdom_id(ctx, domid_vm);
> if (stubdomid)
> - return libxl_console_exec(ctx, stubdomid, 1, LIBXL_CONSTYPE_PV);
> + return libxl_console_exec(ctx, stubdomid, 3, LIBXL_CONSTYPE_PV);
#define STUBDOM_CONSOLE_xxx or an enum to give a symbolic name to each
of the 3-4 console numbers.
> else {
> if (libxl__domain_is_hvm(ctx, domid_vm))
> return libxl_console_exec(ctx, domid_vm, 0,
> LIBXL_CONSTYPE_SERIAL);
> diff -r 59396addc940 tools/libxl/libxl_create.c
> --- a/tools/libxl/libxl_create.c Fri Jan 14 14:26:11 2011 +0000
> +++ b/tools/libxl/libxl_create.c Tue Jan 18 17:09:56 2011 +0000
> @@ -250,8 +250,12 @@ static int domain_restore(libxl_ctx *ctx
>
> dm_info->saved_state = NULL;
> if (info->hvm) {
> + char buf[100];
> + snprintf(buf, sizeof(buf), "/var/lib/xen/qemu-save.%d", domid);
> ret = asprintf(&dm_info->saved_state,
> - "/var/lib/xen/qemu-save.%d", domid);
> + "/var/lib/xen/qemu-restore.%d", domid);
These two strings end up in a couple of places, probably worth either a
#define or libxl__domain_dm_{save,restore}_path(...).
char buf[100] is pretty ugly too. Either use the relevant libxl_Xprintf
or a number much smaller than 100 since domid is bounded -- i.e.
strlen("/var/lib/xen/qemu-save.") + strlen("65536") (+ 1?). 32 seems to
be more than sufficient.
[...]
> + case 1:
> + console[i].output = libxl__sprintf(&gc,
> "file:/var/lib/xen/qemu-save.%d", info->domid);
> + break;
> + case 2:
> + if (info->saved_state)
> + console[i].output = libxl__sprintf(&gc, "filerw:%s",
> info->saved_state);
These "file:" and "filerw:" prefixed things are interpreted by qemu
within the stub domain? Since you need to introduce filerw why not
instead introduce something like pvconsole:{0,1,2,3} (or /dev/consoleN
etc)?
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|