eclair and crash: clean up architecture dependent codes and comply with Linux page_offset_base

Change-Id: Ie14ceb8bc9d816a9201dddd4020e2c21d6cfd686
Fujitsu: POSTK_DEBUG_ARCH_DEP_34
This commit is contained in:
Balazs Gerofi
2019-12-12 00:17:39 +00:00
committed by Masamichi Takagi
parent 1526237bc6
commit d5de68e97b
8 changed files with 77 additions and 139 deletions

View File

@ -82,7 +82,11 @@ static struct mck_size_table {
#define MCK_SIZE_INIT(X, Y) (MCK_ASSIGN_SIZE(X) = STRUCT_SIZE(Y))
#ifdef X86_64
#define LINUX_PAGE_OFFSET 0xffff880000000000UL
#define MAP_FIXED_START 0xffff860000000000UL
#define MAP_KERNEL_START 0xffffffff80000000UL
#define MAP_ST_START 0xffff800000000000UL
unsigned long LINUX_PAGE_OFFSET = -1UL;
unsigned long x86_kernel_phys_base = -1UL;
static inline ulong phys_to_virt(ulong phys)
{
return phys + LINUX_PAGE_OFFSET;
@ -100,9 +104,29 @@ static inline ulong phys_to_virt(ulong phys)
int mcreadmem(ulonglong addr, int memtype, void *buffer, long size,
char *type, ulong error_handle)
{
#ifdef ARM64
ulong phys;
#ifdef X86_64
if (LINUX_PAGE_OFFSET != -1UL &&
x86_kernel_phys_base != -1UL) {
if (addr >= MAP_KERNEL_START &&
addr < MAP_KERNEL_START + 0x4000) {
phys = addr - MAP_KERNEL_START + x86_kernel_phys_base;
}
else if (addr >= LINUX_PAGE_OFFSET) {
phys = addr - LINUX_PAGE_OFFSET;
}
else if (addr >= MAP_FIXED_START) {
phys = addr - MAP_FIXED_START;
}
else if (addr >= MAP_ST_START) {
phys = addr - MAP_ST_START;
}
else {
kvtop(NULL, addr, &phys, 0);
}
addr = phys_to_virt(phys);
}
#elif defined ARM64
/*
* Crash on ARM RedHat8 can't seem to access module space
* virtual addresses, translate to kernel fixed map.
@ -148,13 +172,6 @@ get_symbol_value(char *name)
close_tmpfile2();
#ifdef X86_64
/* adjust symbols in MAP_ST_START */
if (value < 0xffff810000000000UL && value >= 0xffff800000000000UL) {
value += 0x80000000000UL;
}
#endif
return value;
}
@ -1050,7 +1067,8 @@ static void
arch_init(void)
{
#ifdef X86_64
/* nothing to do */
LINUX_PAGE_OFFSET = get_symbol_value("linux_page_offset_base");
x86_kernel_phys_base = get_symbol_value("x86_kernel_phys_base");
#elif defined(ARM64)
V2PHYS_OFFSET = get_symbol_value("memstart_addr");
@ -1625,7 +1643,7 @@ cmd_mcinfo(void)
#ifdef x86
#endif
fprintf(fp, "LINUX_PAGE_OFFSET: 0x%lx\n", LINUX_PAGE_OFFSET);
#ifdef ARM64
fprintf(fp, "V2PHYS_OFFSET: 0x%lx\n", V2PHYS_OFFSET);