From 29cdfe444a55bda3d77e0832733d81e8c6ea9d89 Mon Sep 17 00:00:00 2001 From: Yuanfang Zhang Date: Tue, 3 Dec 2019 21:31:29 +0800 Subject: [PATCH] soc: mem_dump: fix physical address mapping issue Using phys_to_virt can't get correct virtual address. Because the physical address is continuous, the virtual address can be obtained by using the offset of the physical address. Change-Id: Ifdf57820273b2466dca0e486b42ed6895bff0f48 Signed-off-by: Yuanfang Zhang --- drivers/soc/qcom/memory_dump_v2.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/soc/qcom/memory_dump_v2.c b/drivers/soc/qcom/memory_dump_v2.c index ed29e058f787..19cab60465b2 100644 --- a/drivers/soc/qcom/memory_dump_v2.c +++ b/drivers/soc/qcom/memory_dump_v2.c @@ -476,7 +476,7 @@ static struct msm_dump_table *msm_dump_get_table(enum msm_dump_table_ids id) { struct msm_dump_table *table = memdump.table; int i; - + unsigned long offset; if (!table) { pr_err("mem dump base table does not exist\n"); return ERR_PTR(-EINVAL); @@ -491,8 +491,9 @@ static struct msm_dump_table *msm_dump_get_table(enum msm_dump_table_ids id) return ERR_PTR(-EINVAL); } + offset = table->entries[i].addr - memdump.table_phys; /* Get the apps table pointer */ - table = phys_to_virt(table->entries[i].addr); + table = (void *)memdump.table + offset; return table; }