[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 1/2] vsprintf: introduce %*ph extended format specifier for hex buffers
On 01/10/14 08:21, Jan Beulich wrote: > This behaves in the same way as Linux. The 64 byte limit is arbitrary but > long enough for practical purposes. > > Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> > Release-acked-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> > > Re-structured code. > > Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> As this is a modification to my patch, I am not sure whether Reviewed-by or Ack-ed by is more appropriate. Either way, I am happy with the change. ~Andrew > > --- a/docs/misc/printk-formats.txt > +++ b/docs/misc/printk-formats.txt > @@ -3,6 +3,11 @@ Xen custom %p format options. A subset, > All parameters to a %p option should be compatible with void*. Regular > pointers are fine. Numbers should make use of the _p() macro. > > +Raw buffer as hex string: > + > + %*ph Up to 64 characters, printed as "00 01 02 ... ff". Buffer > length > + expected via the field_width paramter. i.e. printk("%*ph", 8, > buffer); > + > Symbol/Function pointers: > > %ps Symbol name with condition offset and size (iff offset != 0) > @@ -16,5 +21,7 @@ Symbol/Function pointers: > In the case that an appropriate symbol name can't be found, %p[sS] > will > fall back to '%p' and print the address in hex. > > +Domain and vCPU information: > + > %pv Domain and vCPU ID from a 'struct vcpu *' (printed as > "d<domid>v<vcpuid>") > --- a/xen/common/vsprintf.c > +++ b/xen/common/vsprintf.c > @@ -272,6 +272,34 @@ static char *pointer(char *str, char *en > /* Custom %p suffixes. See XEN_ROOT/docs/misc/printk-formats.txt */ > switch ( fmt[1] ) > { > + case 'h': /* Raw buffer as hex string. */ > + { > + const uint8_t *hex_buffer = arg; > + unsigned int i; > + > + /* Consumed 'h' from the format string. */ > + ++*fmt_ptr; > + > + /* Bound user count from %* to between 0 and 64 bytes. */ > + if ( field_width <= 0 ) > + return str; > + if ( field_width > 64 ) > + field_width = 64; > + > + for ( i = 0; ; ) > + { > + /* Each byte: 2 chars, 0-padded, base 16, no hex prefix. */ > + str = number(str, end, hex_buffer[i], 16, 2, -1, ZEROPAD); > + > + if ( ++i == field_width ) > + return str; > + > + if ( str < end ) > + *str = ' '; > + ++str; > + } > + } > + > case 's': /* Symbol name with offset and size (iff offset != 0) */ > case 'S': /* Symbol name unconditionally with offset and size */ > { > > > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |