[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] Re: xl: Add subcommand 'xl dmesg'



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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.