kdump: arrange for paddr_vmcoreinfo_note() to return phys_addr_t
On PAE systems (eg, ARM LPAE) the vmcore note may be located above 4GB physical on 32-bit architectures, so we need a wider type than "unsigned long" here. Arrange for paddr_vmcoreinfo_note() to return a phys_addr_t, thereby allowing it to be located above 4GB. This makes no difference for kexec-tools, as they already assume a 64-bit type when reading from this file. Link: http://lkml.kernel.org/r/E1b8koK-0004HS-K9@rmk-PC.armlinux.org.uk Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> Reviewed-by: Pratyush Anand <panand@redhat.com> Acked-by: Baoquan He <bhe@redhat.com> Cc: Keerthy <j-keerthy@ti.com> Cc: Vitaly Andrianov <vitalya@ti.com> Cc: Eric Biederman <ebiederm@xmission.com> Cc: Dave Young <dyoung@redhat.com> Cc: Vivek Goyal <vgoyal@redhat.com> Cc: Simon Horman <horms@verge.net.au> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
465d377701
commit
dae28018f5
@ -163,7 +163,7 @@ void arch_crash_save_vmcoreinfo(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long paddr_vmcoreinfo_note(void)
|
phys_addr_t paddr_vmcoreinfo_note(void)
|
||||||
{
|
{
|
||||||
return ia64_tpa((unsigned long)(char *)&vmcoreinfo_note);
|
return ia64_tpa((unsigned long)(char *)&vmcoreinfo_note);
|
||||||
}
|
}
|
||||||
|
@ -233,7 +233,7 @@ void crash_save_vmcoreinfo(void);
|
|||||||
void arch_crash_save_vmcoreinfo(void);
|
void arch_crash_save_vmcoreinfo(void);
|
||||||
__printf(1, 2)
|
__printf(1, 2)
|
||||||
void vmcoreinfo_append_str(const char *fmt, ...);
|
void vmcoreinfo_append_str(const char *fmt, ...);
|
||||||
unsigned long paddr_vmcoreinfo_note(void);
|
phys_addr_t paddr_vmcoreinfo_note(void);
|
||||||
|
|
||||||
#define VMCOREINFO_OSRELEASE(value) \
|
#define VMCOREINFO_OSRELEASE(value) \
|
||||||
vmcoreinfo_append_str("OSRELEASE=%s\n", value)
|
vmcoreinfo_append_str("OSRELEASE=%s\n", value)
|
||||||
|
@ -1372,7 +1372,7 @@ void vmcoreinfo_append_str(const char *fmt, ...)
|
|||||||
void __weak arch_crash_save_vmcoreinfo(void)
|
void __weak arch_crash_save_vmcoreinfo(void)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
unsigned long __weak paddr_vmcoreinfo_note(void)
|
phys_addr_t __weak paddr_vmcoreinfo_note(void)
|
||||||
{
|
{
|
||||||
return __pa((unsigned long)(char *)&vmcoreinfo_note);
|
return __pa((unsigned long)(char *)&vmcoreinfo_note);
|
||||||
}
|
}
|
||||||
|
@ -128,8 +128,8 @@ KERNEL_ATTR_RW(kexec_crash_size);
|
|||||||
static ssize_t vmcoreinfo_show(struct kobject *kobj,
|
static ssize_t vmcoreinfo_show(struct kobject *kobj,
|
||||||
struct kobj_attribute *attr, char *buf)
|
struct kobj_attribute *attr, char *buf)
|
||||||
{
|
{
|
||||||
return sprintf(buf, "%lx %x\n",
|
phys_addr_t vmcore_base = paddr_vmcoreinfo_note();
|
||||||
paddr_vmcoreinfo_note(),
|
return sprintf(buf, "%pa %x\n", &vmcore_base,
|
||||||
(unsigned int)sizeof(vmcoreinfo_note));
|
(unsigned int)sizeof(vmcoreinfo_note));
|
||||||
}
|
}
|
||||||
KERNEL_ATTR_RO(vmcoreinfo);
|
KERNEL_ATTR_RO(vmcoreinfo);
|
||||||
|
Loading…
Reference in New Issue
Block a user