Messages in this thread Patch in this message | | | Date | Mon, 13 Oct 2008 14:46:28 -0700 (PDT) | From | Linus Torvalds <> | Subject | Re: [PATCH] x86: split e820 reserved entries record to late v4 - fix v7 |
| |
On Mon, 13 Oct 2008, H. Peter Anvin wrote: > > Here is a fix... currently running standard tests on it.
Or we could do what Andrew suggested some time ago, and extend %p to do resource printing, like %pS and %pF.
TOTALLY UNTESTED! But something like this might allow
printk(KERN_DEBUG " reserve_region: (%s) %pR\n" res->name, res);
and if I did things right it should print
reserve_region: (name) [xx-xx]
and maybe it's worth it. We certainly do seem to have a fair number of those irritating casts for resource printouts.
Linus --- lib/vsprintf.c | 18 ++++++++++++++++++ 1 files changed, 18 insertions(+), 0 deletions(-)
diff --git a/lib/vsprintf.c b/lib/vsprintf.c index c399bc1..dd62557 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -24,6 +24,7 @@ #include <linux/kernel.h> #include <linux/kallsyms.h> #include <linux/uaccess.h> +#include <linux/ioport.h> #include <asm/page.h> /* for PAGE_SIZE */ #include <asm/div64.h> @@ -528,6 +529,21 @@ static char *symbol_string(char *buf, char *end, void *ptr, int field_width, int #endif } +static char *resource_string(char *buf, char *end, struct resource *res, int field_width, int precision, int flags) +{ + char sym[4*sizeof(resource_size_t) + 4]; + char *p = sym, *pend = sym + sizeof(sym); + + *p++ = '['; + p = number(p, pend, res->start, 16, -1, -1, 0); + *p++ = '-'; + p = number(p, pend, res->end, 16, -1, -1, 0); + *p++ = ']'; + *p = 0; + + return string(buf, end, sym, field_width, precision, flags); +} + /* * Show a '%p' thing. A kernel extension is that the '%p' is followed * by an extra set of alphanumeric characters that are extended format @@ -549,6 +565,8 @@ static char *pointer(const char *fmt, char *buf, char *end, void *ptr, int field /* Fallthrough */ case 'S': return symbol_string(buf, end, ptr, field_width, precision, flags); + case 'R': + return resource_string(buf, end, ptr, field_width, precision, flags); } flags |= SMALL; if (field_width == -1) {
| |