[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v4 1/3] xen: add warning infrastructure
Use an array to keep track of warning text, provide a function to add warning text to track. Print warnings (if any) in console_endboot. Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- Cc: Jan Beulich <jbeulich@xxxxxxxx> Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> v4: 1. Fix __initdata annotation. 2. Move warning_print to console_endboot. 3. Use obj-bin-y in Makefile. 4. Print asterisks in warning_print. v3: new --- xen/common/Makefile | 1 + xen/common/warning.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++ xen/drivers/char/console.c | 3 +++ xen/include/xen/warning.h | 7 ++++++ 4 files changed, 66 insertions(+) create mode 100644 xen/common/warning.c create mode 100644 xen/include/xen/warning.h diff --git a/xen/common/Makefile b/xen/common/Makefile index e9893e2..dbf00c6 100644 --- a/xen/common/Makefile +++ b/xen/common/Makefile @@ -59,6 +59,7 @@ obj-y += vm_event.o obj-y += vmap.o obj-y += vsprintf.o obj-y += wait.o +obj-bin-y += warning.init.o obj-$(CONFIG_XENOPROF) += xenoprof.o obj-y += xmalloc_tlsf.o diff --git a/xen/common/warning.c b/xen/common/warning.c new file mode 100644 index 0000000..8bdd299 --- /dev/null +++ b/xen/common/warning.c @@ -0,0 +1,55 @@ +#include <xen/delay.h> +#include <xen/init.h> +#include <xen/lib.h> +#include <xen/softirq.h> +#include <xen/warning.h> + +#define WARNING_ARRAY_SIZE 20 +static unsigned int __initdata nr_warnings; +static const char *__initdata warnings[WARNING_ARRAY_SIZE]; + +void __init warning_add(const char *warning) +{ + if ( nr_warnings >= WARNING_ARRAY_SIZE ) + panic("Too many pieces of warning text."); + + warnings[nr_warnings] = warning; + nr_warnings++; +} + +void __init warning_print(void) +{ + unsigned int i, j; + + if ( !nr_warnings ) + return; + + printk("***************************************************\n"); + + for ( i = 0; i < nr_warnings; i++ ) + { + printk("%s", warnings[i]); + printk("***************************************************\n"); + } + + for ( i = 0; i < 3; i++ ) + { + printk("%u... ", 3 - i); + for ( j = 0; j < 100; j++ ) + { + process_pending_softirqs(); + mdelay(10); + } + } + printk("\n"); +} + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * tab-width: 4 + * indent-tabs-mode: nil + * End: + */ diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c index f4f6141..ac21caf 100644 --- a/xen/drivers/char/console.c +++ b/xen/drivers/char/console.c @@ -25,6 +25,7 @@ #include <xen/video.h> #include <xen/kexec.h> #include <xen/ctype.h> +#include <xen/warning.h> #include <asm/debugger.h> #include <asm/div64.h> #include <xen/hypercall.h> /* for do_console_io */ @@ -796,6 +797,8 @@ void __init console_endboot(void) printk(" (Rate-limited: %s)", loglvl_str(xenlog_guest_upper_thresh)); printk("\n"); + warning_print(); + if ( opt_sync_console ) { printk("**********************************************\n"); diff --git a/xen/include/xen/warning.h b/xen/include/xen/warning.h new file mode 100644 index 0000000..c0661d5 --- /dev/null +++ b/xen/include/xen/warning.h @@ -0,0 +1,7 @@ +#ifndef _WARNING_H_ +#define _WARNING_H_ + +void warning_add(const char *warning); +void warning_print(void); + +#endif -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |