On Thu, 20 May 2010, Yu Zhiguo wrote:
> Can be used to read and/or clear dmesg buffer.
>
Thanks for the patch!
The implementation is good, but I think we could probably offer an
higher level API in libxenlight than just a wrapper around
xc_readconsolering.
I think we should have a libxl_dmesg instead of libxl_readconsolering,
and libxl_dmesg would print dmesg itself using the libxl logging
functions.
The caller can setup the logging function so that dmesg is printed to
stdout in this case.
> Signed-off-by: Yu Zhiguo <yuzg@xxxxxxxxxxxxxx>
>
> diff -r 840f269d95fb -r ab11e3eab7cc tools/libxl/libxl.c
> --- a/tools/libxl/libxl.c Wed May 19 22:59:52 2010 +0100
> +++ b/tools/libxl/libxl.c Thu May 20 19:52:13 2010 +0800
> @@ -2827,6 +2827,18 @@
> return xc_send_debug_keys(ctx->xch, keys);
> }
>
> +int libxl_readconsolering(struct libxl_ctx *ctx, char **pbuffer,
> + unsigned int *pnr_chars, int clear,
> + int incremental, uint32_t *pindex)
> +{
> + int ret;
> +
> + ret = xc_readconsolering(ctx->xch, pbuffer, pnr_chars, clear,
> + incremental, pindex);
> +
> + return ret;
> +}
> +
> uint32_t libxl_vm_get_start_time(struct libxl_ctx *ctx, uint32_t domid)
> {
> char *dompath = libxl_xs_get_dompath(ctx, domid);
> diff -r 840f269d95fb -r ab11e3eab7cc tools/libxl/libxl.h
> --- a/tools/libxl/libxl.h Wed May 19 22:59:52 2010 +0100
> +++ b/tools/libxl/libxl.h Thu May 20 19:52:13 2010 +0800
> @@ -512,6 +512,9 @@
> char *trigger_name, uint32_t vcpuid);
> int libxl_send_sysrq(struct libxl_ctx *ctx, uint32_t domid, char sysrq);
> int libxl_send_debug_keys(struct libxl_ctx *ctx, char *keys);
> +int libxl_readconsolering(struct libxl_ctx *ctx, char **pbuffer,
> + unsigned int *pnr_chars, int clear,
> + int incremental, uint32_t *pindex);
> uint32_t libxl_vm_get_start_time(struct libxl_ctx *ctx, uint32_t domid);
>
> char *libxl_tmem_list(struct libxl_ctx *ctx, uint32_t domid, int use_long);
> diff -r 840f269d95fb -r ab11e3eab7cc tools/libxl/xl_cmdimpl.c
> --- a/tools/libxl/xl_cmdimpl.c Wed May 19 22:59:52 2010 +0100
> +++ b/tools/libxl/xl_cmdimpl.c Thu May 20 19:52:13 2010 +0800
> @@ -3246,6 +3246,66 @@
> exit(0);
> }
>
> +int main_dmesg(int argc, char **argv)
> +{
> + unsigned int clear = 0, index = 0, incremental = 0;
> + unsigned int count = 16384 + 1, size = count;
> + char *str, *ptr;
> + int opt, ret;
> +
> + while ((opt = getopt(argc, argv, "hc")) != -1) {
> + switch (opt) {
> + case 'c':
> + clear = 1;
> + break;
> + case 'h':
> + help("dmesg");
> + exit(0);
> + default:
> + fprintf(stderr, "option not supported\n");
> + break;
> + }
> + }
> +
> + str = malloc(size);
> + memset(str, 0, size);
> + ret = libxl_readconsolering(&ctx, &str, &count, clear,
> + incremental, &index);
> + if (ret < 0)
> + goto out;
> +
> + while (!incremental && count == size) {
> + size += count - 1;
> + if (size < count)
> + break;
> +
> + ptr = realloc(str, size);
> + if (!ptr)
> + break;
> +
> + str = ptr + count;
> + count = size - count;
> + ret = libxl_readconsolering(&ctx, &str, &count, clear,
> + 1, &index);
> + if (ret < 0) {
> + str = ptr;
> + break;
> + }
> +
> + count += str - ptr;
> + str = ptr;
> + }
> +
> +out:
> + printf(str);
> + free(str);
> +
> + if (ret)
> + exit(1);
> +
> + exit(0);
> +}
> +
> int main_top(int argc, char **argv)
> {
> int opt;
> diff -r 840f269d95fb -r ab11e3eab7cc tools/libxl/xl_cmdimpl.h
> --- a/tools/libxl/xl_cmdimpl.h Wed May 19 22:59:52 2010 +0100
> +++ b/tools/libxl/xl_cmdimpl.h Thu May 20 19:52:13 2010 +0800
> @@ -45,6 +45,7 @@
> int main_trigger(int argc, char **argv);
> int main_sysrq(int argc, char **argv);
> int main_debug_keys(int argc, char **argv);
> +int main_dmesg(int argc, char **argv);
> int main_top(int argc, char **argv);
> int main_networkattach(int argc, char **argv);
> int main_networklist(int argc, char **argv);
> diff -r 840f269d95fb -r ab11e3eab7cc tools/libxl/xl_cmdtable.c
> --- a/tools/libxl/xl_cmdtable.c Wed May 19 22:59:52 2010 +0100
> +++ b/tools/libxl/xl_cmdtable.c Thu May 20 19:52:13 2010 +0800
> @@ -191,6 +191,12 @@
> "Send debug keys to Xen",
> "<Keys>",
> },
> + { "dmesg",
> + &main_dmesg,
> + "Read and/or clear dmesg buffer",
> + "[-c]",
> + " -c Clear dmesg buffer as well as printing
> it",
> + },
> { "top",
> &main_top,
> "Monitor a host and the domains in real time",
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|