[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen staging] xen/vsprintf: Introduce %pd formatter for domains
commit 5c28a3c6814cc3a054fde133c0f6ef77d80c0412 Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> AuthorDate: Wed Aug 29 16:16:50 2018 +0000 Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CommitDate: Mon Oct 1 12:37:45 2018 +0100 xen/vsprintf: Introduce %pd formatter for domains This allows all system domids to be printed by name, rather than special casing the idle vcpus alone. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> --- docs/misc/printk-formats.txt | 14 ++++++++-- xen/common/vsprintf.c | 66 ++++++++++++++++++++++++++++++++++---------- 2 files changed, 63 insertions(+), 17 deletions(-) diff --git a/docs/misc/printk-formats.txt b/docs/misc/printk-formats.txt index 525108f86c..b5570bc1f1 100644 --- a/docs/misc/printk-formats.txt +++ b/docs/misc/printk-formats.txt @@ -28,5 +28,15 @@ Symbol/Function pointers: Domain and vCPU information: - %pv Domain and vCPU ID from a 'struct vcpu *' (printed as - "d<domid>v<vcpuid>") + %pd Domain from a 'struct domain *' + + Regular domains are printed with their ID in decimal. System + domains are printed with their name. + e.g. d0 + d[IDLE] + + %pv Domain and vCPU ID from a 'struct vcpu *' + + The domain part as above, with the vcpu_id printed in decimal. + e.g. d0v1 + d[IDLE]v0 diff --git a/xen/common/vsprintf.c b/xen/common/vsprintf.c index f92fb675e6..b0ff00c883 100644 --- a/xen/common/vsprintf.c +++ b/xen/common/vsprintf.c @@ -264,6 +264,52 @@ static char *string(char *str, char *end, const char *s, return str; } +/* Print a domain id, using names for system domains. (e.g. d0 or d[IDLE]) */ +static char *print_domain(char *str, char *end, const struct domain *d) +{ + const char *name = NULL; + + /* Some debugging may have an optionally-NULL pointer. */ + if ( unlikely(!d) ) + return string(str, end, "NULL", -1, -1, 0); + + switch ( d->domain_id ) + { + case DOMID_IO: name = "[IO]"; break; + case DOMID_XEN: name = "[XEN]"; break; + case DOMID_COW: name = "[COW]"; break; + case DOMID_IDLE: name = "[IDLE]"; break; + /* + * In principle, we could ASSERT_UNREACHABLE() in the default case. + * However, this path is used to print out crash information, which + * risks recursing infinitely and not printing any useful information. + */ + } + + if ( str < end ) + *str = 'd'; + + if ( name ) + return string(str + 1, end, name, -1, -1, 0); + else + return number(str + 1, end, d->domain_id, 10, -1, -1, 0); +} + +/* Print a vcpu id. (e.g. d0v1 or d[IDLE]v0) */ +static char *print_vcpu(char *str, char *end, const struct vcpu *v) +{ + /* Some debugging may have an optionally-NULL pointer. */ + if ( unlikely(!v) ) + return string(str, end, "NULL", -1, -1, 0); + + str = print_domain(str, end, v->domain); + + if ( str < end ) + *str = 'v'; + + return number(str + 1, end, v->vcpu_id, 10, -1, -1, 0); +} + static char *pointer(char *str, char *end, const char **fmt_ptr, const void *arg, int field_width, int precision, int flags) @@ -273,6 +319,10 @@ static char *pointer(char *str, char *end, const char **fmt_ptr, /* Custom %p suffixes. See XEN_ROOT/docs/misc/printk-formats.txt */ switch ( fmt[1] ) { + case 'd': /* Domain ID from a struct domain *. */ + ++*fmt_ptr; + return print_domain(str, end, arg); + case 'h': /* Raw buffer as hex string. */ { const uint8_t *hex_buffer = arg; @@ -370,22 +420,8 @@ static char *pointer(char *str, char *end, const char **fmt_ptr, } case 'v': /* d<domain-id>v<vcpu-id> from a struct vcpu */ - { - const struct vcpu *v = arg; - ++*fmt_ptr; - if ( unlikely(v->domain->domain_id == DOMID_IDLE) ) - str = string(str, end, "IDLE", -1, -1, 0); - else - { - if ( str < end ) - *str = 'd'; - str = number(str + 1, end, v->domain->domain_id, 10, -1, -1, 0); - } - if ( str < end ) - *str = 'v'; - return number(str + 1, end, v->vcpu_id, 10, -1, -1, 0); - } + return print_vcpu(str, end, arg); } if ( field_width == -1 ) -- generated by git-patchbot for /home/xen/git/xen.git#staging _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |