On Fri, Apr 29, 2016 at 11:36 PM, Russell King - ARM Linux <linux at arm.linux.org.uk> wrote: > On Fri, Apr 29, 2016 at 08:36:43PM +0530, Pratyush Anand wrote: >> On Thu, Apr 28, 2016 at 2:58 PM, Russell King >> <rmk+kernel at arm.linux.org.uk> wrote: >> > diff --git a/kernel/ksysfs.c b/kernel/ksysfs.c >> > index 152da4a48867..9f1920d2d0c6 100644 >> > --- a/kernel/ksysfs.c >> > +++ b/kernel/ksysfs.c >> > @@ -128,8 +128,8 @@ KERNEL_ATTR_RW(kexec_crash_size); >> > static ssize_t vmcoreinfo_show(struct kobject *kobj, >> > struct kobj_attribute *attr, char *buf) >> > { >> > - return sprintf(buf, "%lx %x\n", >> > - paddr_vmcoreinfo_note(), >> > + phys_addr_t vmcore_base = paddr_vmcoreinfo_note(); >> > + return sprintf(buf, "%pa %x\n", &vmcore_base, >> >> Why do we pass &vmcore_base? Shouldn't it be vmcore_base? > > You seem to not know what the "%pa" format string means. Apologies, Yes, yes.. it was my negligence. > > %p always takes a _pointer_ as per C standard, so the printf argument > must be a pointer. However, the kernel format strings are extended > with additional suffixes - in this case 'a', which means that we want > to print the contents of a _pointer_ to a phys_addr_t. > > Full details in Documentation/printk-formats.txt in the kernel. Thanks for explaining :-)