WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH] quiet bootup and add runtime tunable console log

To: Alex Williamson <alex.williamson@xxxxxx>, xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: Re: [Xen-devel] [PATCH] quiet bootup and add runtime tunable console log level
From: Keir Fraser <Keir.Fraser@xxxxxxxxxxxx>
Date: Wed, 07 Feb 2007 15:15:44 +0000
Delivery-date: Wed, 07 Feb 2007 07:15:33 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
In-reply-to: <1170826729.30297.84.camel@bling>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Thread-index: AcdKytYlFPC2HLa+EduXMAAX8io7RQ==
Thread-topic: [Xen-devel] [PATCH] quiet bootup and add runtime tunable console log level
User-agent: Microsoft-Entourage/11.2.5.060620
Actually printing everything out during boot can be rather useful. What's
the downside? I think we should keep the current behaviour as default and
maybe add a 'quiet_boot' option or similar.

 -- Keir

On 7/2/07 05:38, "Alex Williamson" <alex.williamson@xxxxxx> wrote:

> 
>    We currently print everything during xen bootup regardless of what
> the user has specified on the boot line with loglvl.  This seems wrong
> and makes using XENLOG_DEBUG and XENLOG_INFO much less useful.  We also
> provide no means (that I could find) to change the console log level at
> runtime.  The patch below changes this to only print out console
> messages below the upper threshold during bootup, and toggles rate
> limiting at the end of the xen boot.  It also adds a simple inc/dec
> capability to the keyhandler to change the lower thresholds at runtime.
> The cmpxchgs are probably overkill, but maybe another interface will
> want to use these someday.  Thanks,
> 
> Alex
> 
> Signed-off-by: Alex Williamson <alex.williamson@xxxxxx>
> ---
> 
> diff -r 7efb3a06c56a xen/common/keyhandler.c
> --- a/xen/common/keyhandler.c Tue Feb 06 15:20:26 2007 -0700
> +++ b/xen/common/keyhandler.c Tue Feb 06 21:21:13 2007 -0700
> @@ -258,6 +258,25 @@ extern void perfc_reset(unsigned char ke
>  extern void perfc_reset(unsigned char key);
>  #endif
>  
> +static void change_loglvl(unsigned char key)
> +{
> +    switch ( key )
> +    {
> +    case '+':
> +        console_inc_loglvl();
> +        break;
> +    case '-':
> +        console_dec_loglvl();
> +        break;
> +    case 'G':
> +        console_inc_guest_loglvl();
> +        break;
> +    case 'g':
> +        console_dec_guest_loglvl();
> +        break;
> +    }
> +}
> +
>  static void do_debug_key(unsigned char key, struct cpu_user_regs *regs)
>  {
>      (void)debugger_trap_fatal(0xf001, regs);
> @@ -290,6 +309,15 @@ void initialize_keytable(void)
>      register_keyhandler(
>          'P', perfc_reset,    "reset performance counters");
>  #endif
> +
> +    register_keyhandler(
> +        '+', change_loglvl, "increase xen console log level");
> +    register_keyhandler(
> +        '-', change_loglvl, "decrease xen console log level");
> +    register_keyhandler(
> +        'G', change_loglvl, "increase xen guest log level");
> +    register_keyhandler(
> +        'g', change_loglvl, "decrease xen guest log level");
>  
>      register_irq_keyhandler('%', do_debug_key,   "Trap to xendbg");
>  }
> diff -r 7efb3a06c56a xen/drivers/char/console.c
> --- a/xen/drivers/char/console.c Tue Feb 06 15:20:26 2007 -0700
> +++ b/xen/drivers/char/console.c Tue Feb 06 22:06:24 2007 -0700
> @@ -102,7 +102,8 @@ custom_param("loglvl", parse_loglvl);
>  custom_param("loglvl", parse_loglvl);
>  custom_param("guest_loglvl", parse_guest_loglvl);
>  
> -static atomic_t print_everything = ATOMIC_INIT(1);
> +static atomic_t print_everything = ATOMIC_INIT(0);
> +static int ratelimit_active;
>  
>  #define ___parse_loglvl(s, ps, lvlstr, lvlnum)          \
>      if ( !strncmp((s), (lvlstr), strlen(lvlstr)) ) {    \
> @@ -151,6 +152,58 @@ static char *loglvl_str(int lvl)
>      case 4: return "All";
>      }
>      return "???";
> +}
> +
> +void console_inc_loglvl(void)
> +{
> +    int loglvl;
> +
> +    do {
> +        loglvl = xenlog_lower_thresh;
> +        if (loglvl >= 4)
> +            break;
> +    } while (cmpxchg(&xenlog_lower_thresh, loglvl, loglvl + 1) != loglvl);
> +
> +    printk("Xen Loglevel: %s\n", loglvl_str(xenlog_lower_thresh));
> +}
> +
> +void console_dec_loglvl(void)
> +{
> +    int loglvl;
> +
> +    do {
> +        loglvl = xenlog_lower_thresh;
> +        if (loglvl <= 0)
> +            break;
> +    } while (cmpxchg(&xenlog_lower_thresh, loglvl, loglvl - 1) != loglvl);
> +
> +    printk("Xen Loglevel: %s\n", loglvl_str(xenlog_lower_thresh));
> +}
> +
> +void console_inc_guest_loglvl(void)
> +{
> +    int loglvl;
> +
> +    do {
> +        loglvl = xenlog_guest_lower_thresh;
> +        if (loglvl >= 4)
> +            break;
> +    } while (cmpxchg(&xenlog_guest_lower_thresh, loglvl, loglvl + 1) !=
> loglvl);
> +
> +    printk("Xen Guest Loglevel: %s\n",
> loglvl_str(xenlog_guest_lower_thresh));
> +}
> +
> +void console_dec_guest_loglvl(void)
> +{
> +    int loglvl;
> +
> +    do {
> +        loglvl = xenlog_guest_lower_thresh;
> +        if (loglvl <= 0)
> +            break;
> +    } while (cmpxchg(&xenlog_guest_lower_thresh, loglvl, loglvl - 1) !=
> loglvl);
> +
> +    printk("Xen Guest Loglevel: %s\n",
> loglvl_str(xenlog_guest_lower_thresh));
>  }
>  
>  /*
> @@ -422,9 +475,9 @@ static int printk_prefix_check(char *p,
>  
>      *pp = p;
>  
> -    return ((atomic_read(&print_everything) != 0) ||
> -            (loglvl < lower_thresh) ||
> -            ((loglvl < upper_thresh) && printk_ratelimit()));
> +    return (atomic_read(&print_everything) != 0 ||
> +            loglvl < lower_thresh ||
> +            (loglvl < upper_thresh && printk_ratelimit()));
>  } 
>  
>  void printk(const char *fmt, ...)
> @@ -570,8 +623,8 @@ void console_endboot(void)
>      /* Serial input is directed to DOM0 by default. */
>      switch_serial_input();
>  
> -    /* Now we implement the logging thresholds. */
> -    console_end_log_everything();
> +    /* Now we implement the rate limit */
> +    ratelimit_active = 1;
>  }
>  
>  void console_start_log_everything(void)
> @@ -676,6 +729,9 @@ int printk_ratelimit_burst = 10;
>  
>  int printk_ratelimit(void)
>  {
> +    if (!ratelimit_active)
> +     return 1;
> +
>      return __printk_ratelimit(printk_ratelimit_ms, printk_ratelimit_burst);
>  }
>  
> diff -r 7efb3a06c56a xen/include/xen/console.h
> --- a/xen/include/xen/console.h Tue Feb 06 15:20:26 2007 -0700
> +++ b/xen/include/xen/console.h Tue Feb 06 20:32:30 2007 -0700
> @@ -29,6 +29,11 @@ void console_start_log_everything(void);
>  void console_start_log_everything(void);
>  void console_end_log_everything(void);
>  
> +void console_inc_loglvl(void);
> +void console_dec_loglvl(void);
> +void console_inc_guest_loglvl(void);
> +void console_dec_guest_loglvl(void);
> +
>  /*
>   * Steal output from the console. Returns +ve identifier, else -ve error.
>   * Takes the handle of the serial line to steal, and steal callback function.
> 
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel