From: Russell King <rmk+kernel@arm.linux.org.uk>
To: linux-arm-kernel@lists.infradead.org
Cc: Mark Rutland <mark.rutland@arm.com>,
devicetree@vger.kernel.org, Tony Luck <tony.luck@intel.com>,
linux-ia64@vger.kernel.org, linux-doc@vger.kernel.org,
Pawel Moll <pawel.moll@arm.com>, Jonathan Corbet <corbet@lwn.net>,
Ian Campbell <ijc+devicetree@hellion.org.uk>,
kexec@lists.infradead.org, Fenghua Yu <fenghua.yu@intel.com>,
Haren Myneni <hbabu@us.ibm.com>, Rob Herring <robh+dt@kernel.org>,
Eric Biederman <ebiederm@xmission.com>,
Santosh Shilimkar <ssantosh@kernel.org>,
Kumar Gala <galak@codeaurora.org>,
Vivek Goyal <vgoyal@redhat.com>
Subject: [PATCH 02/12] ARM: provide improved virt_to_idmap() functionality
Date: Thu, 28 Apr 2016 10:27:54 +0100 [thread overview]
Message-ID: <E1aviEk-0000il-44@rmk-PC.arm.linux.org.uk> (raw)
In-Reply-To: <20160428092644.GX19428@n2100.arm.linux.org.uk>
For kexec, we need more functionality from the IDMAP system. We need to
be able to convert physical addresses to their identity mappped versions
as well as virtual addresses.
Convert the existing arch_virt_to_idmap() to deal with physical
addresses instead.
Acked-by: Santosh Shilimkar <ssantosh@kernel.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
---
arch/arm/include/asm/memory.h | 33 ++++++++++++++++++++++++++-------
arch/arm/mach-keystone/keystone.c | 7 +------
arch/arm/mm/idmap.c | 2 +-
3 files changed, 28 insertions(+), 14 deletions(-)
diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h
index 9427fd632552..ca208335fde6 100644
--- a/arch/arm/include/asm/memory.h
+++ b/arch/arm/include/asm/memory.h
@@ -288,19 +288,38 @@ static inline void *phys_to_virt(phys_addr_t x)
#define __va(x) ((void *)__phys_to_virt((phys_addr_t)(x)))
#define pfn_to_kaddr(pfn) __va((phys_addr_t)(pfn) << PAGE_SHIFT)
-extern unsigned long (*arch_virt_to_idmap)(unsigned long x);
+extern long long arch_phys_to_idmap_offset;
/*
- * These are for systems that have a hardware interconnect supported alias of
- * physical memory for idmap purposes. Most cases should leave these
+ * These are for systems that have a hardware interconnect supported alias
+ * of physical memory for idmap purposes. Most cases should leave these
* untouched. Note: this can only return addresses less than 4GiB.
*/
+#define IDMAP_INVALID_ADDR ((u32)~0)
+
+static inline unsigned long phys_to_idmap(phys_addr_t addr)
+{
+ if (IS_ENABLED(CONFIG_MMU) && arch_phys_to_idmap_offset) {
+ addr += arch_phys_to_idmap_offset;
+ if (addr > (u32)~0)
+ addr = IDMAP_INVALID_ADDR;
+ }
+ return addr;
+}
+
+static inline phys_addr_t idmap_to_phys(unsigned long idmap)
+{
+ phys_addr_t addr = idmap;
+
+ if (IS_ENABLED(CONFIG_MMU) && arch_phys_to_idmap_offset)
+ addr -= arch_phys_to_idmap_offset;
+
+ return addr;
+}
+
static inline unsigned long __virt_to_idmap(unsigned long x)
{
- if (IS_ENABLED(CONFIG_MMU) && arch_virt_to_idmap)
- return arch_virt_to_idmap(x);
- else
- return __virt_to_phys(x);
+ return phys_to_idmap(__virt_to_phys(x));
}
#define virt_to_idmap(x) __virt_to_idmap((unsigned long)(x))
diff --git a/arch/arm/mach-keystone/keystone.c b/arch/arm/mach-keystone/keystone.c
index e6b9cb1e6709..a33a296b00dc 100644
--- a/arch/arm/mach-keystone/keystone.c
+++ b/arch/arm/mach-keystone/keystone.c
@@ -63,11 +63,6 @@ static void __init keystone_init(void)
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
}
-static unsigned long keystone_virt_to_idmap(unsigned long x)
-{
- return (phys_addr_t)(x) - CONFIG_PAGE_OFFSET + KEYSTONE_LOW_PHYS_START;
-}
-
static long long __init keystone_pv_fixup(void)
{
long long offset;
@@ -91,7 +86,7 @@ static long long __init keystone_pv_fixup(void)
offset = KEYSTONE_HIGH_PHYS_START - KEYSTONE_LOW_PHYS_START;
/* Populate the arch idmap hook */
- arch_virt_to_idmap = keystone_virt_to_idmap;
+ arch_phys_to_idmap_offset = -offset;
return offset;
}
diff --git a/arch/arm/mm/idmap.c b/arch/arm/mm/idmap.c
index bd274a05b8ff..c1a48f88764e 100644
--- a/arch/arm/mm/idmap.c
+++ b/arch/arm/mm/idmap.c
@@ -15,7 +15,7 @@
* page tables.
*/
pgd_t *idmap_pgd;
-unsigned long (*arch_virt_to_idmap)(unsigned long x);
+long long arch_phys_to_idmap_offset;
#ifdef CONFIG_ARM_LPAE
static void idmap_add_pmd(pud_t *pud, unsigned long addr, unsigned long end,
--
2.1.0
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
next prev parent reply other threads:[~2016-04-28 9:28 UTC|newest]
Thread overview: 121+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-28 9:26 [PATCH 00/12] Fixing TI Keystone2 kexec Russell King - ARM Linux
2016-04-28 9:27 ` [PATCH 01/12] ARM: kexec: fix crashkernel= handling Russell King
2016-04-29 14:17 ` Pratyush Anand
2016-04-28 9:27 ` Russell King [this message]
2016-04-28 9:27 ` [PATCH 03/12] ARM: kexec: remove 512MB restriction on kexec crashdump Russell King
2016-04-29 14:19 ` Pratyush Anand
2016-04-29 18:10 ` Russell King - ARM Linux
2016-04-30 3:36 ` Pratyush Anand
2016-04-30 8:25 ` Russell King - ARM Linux
2016-04-28 9:28 ` [PATCH 04/12] ARM: provide arm_has_idmap_alias() helper Russell King
2016-04-29 14:21 ` Pratyush Anand
2016-04-28 9:28 ` [PATCH 05/12] ARM: kdump: advertise boot aliased crash kernel resource Russell King
2016-04-28 9:28 ` [PATCH 06/12] ARM: kexec: advertise location of bootable RAM Russell King
2016-04-29 14:56 ` Pratyush Anand
2016-04-29 18:00 ` Russell King - ARM Linux
2016-04-30 3:27 ` Pratyush Anand
2016-04-30 8:20 ` Russell King - ARM Linux
2016-05-02 7:34 ` Pratyush Anand
2016-05-02 10:10 ` Russell King - ARM Linux
2016-05-02 10:48 ` Pratyush Anand
2016-05-03 10:21 ` [PATCH kexec-tools 01/32] kdump: mmap() and munmap() only work on page-aligned quantites Russell King
2016-05-25 6:16 ` Pratyush Anand
2016-05-26 8:35 ` Russell King - ARM Linux
2016-05-03 10:21 ` [PATCH kexec-tools 02/32] kdump: fix multiple program header entries Russell King
2016-05-25 6:16 ` Pratyush Anand
2016-05-03 10:21 ` [PATCH kexec-tools 03/32] kdump: actually write out the memory Russell King
2016-05-25 6:16 ` Pratyush Anand
2016-05-03 10:21 ` [PATCH kexec-tools 04/32] kdump: fix kdump mapping Russell King
2016-05-25 6:17 ` Pratyush Anand
2016-05-26 14:33 ` Russell King - ARM Linux
2016-05-03 10:21 ` [PATCH kexec-tools 05/32] arm: fix kdump to work on LPAE systems Russell King
2016-05-28 11:28 ` Baoquan He
2016-05-03 10:21 ` [PATCH kexec-tools 06/32] kdump: print mmap() offset in hex Russell King
2016-05-25 6:21 ` Pratyush Anand
2016-05-03 10:21 ` [PATCH kexec-tools 07/32] kexec: fix warnings caused by selecting 64-bit file IO on 32-bit platforms Russell King
2016-05-28 11:33 ` Baoquan He
2016-05-28 13:53 ` Russell King - ARM Linux
2016-05-29 13:29 ` Baoquan He
2016-05-03 10:21 ` [PATCH kexec-tools 08/32] kexec: add max_size to memory_ranges Russell King
2016-05-27 11:43 ` Pratyush Anand
2016-05-03 10:21 ` [PATCH kexec-tools 09/32] kexec: phys_to_virt() must take unsigned long long Russell King
2016-05-25 6:31 ` Pratyush Anand
2016-05-03 10:21 ` [PATCH kexec-tools 10/32] kexec: add generic helper to add to memory_regions Russell King
2016-05-25 8:00 ` Pratyush Anand
2016-05-03 10:22 ` [PATCH kexec-tools 11/32] kexec: add mem_regions sorting implementation Russell King
2016-05-25 8:00 ` Pratyush Anand
2016-05-03 10:22 ` [PATCH kexec-tools 12/32] kexec: add helper to exlude a region from a set of memory ranges Russell King
2016-05-25 8:00 ` Pratyush Anand
2016-05-26 8:56 ` Russell King - ARM Linux
2016-05-27 15:07 ` Pratyush Anand
2016-05-27 15:12 ` Russell King - ARM Linux
2016-05-03 10:22 ` [PATCH kexec-tools 13/32] arm: fix pointer signedness warning in kexec-uImage-arm.c Russell King
2016-05-25 8:00 ` Pratyush Anand
2016-05-03 10:22 ` [PATCH kexec-tools 14/32] arm: fix off-by-one on memory end Russell King
2016-05-25 8:01 ` Pratyush Anand
2016-05-03 10:22 ` [PATCH kexec-tools 15/32] arm: fix get_kernel_stext_sym() to close its file Russell King
2016-05-25 8:01 ` Pratyush Anand
2016-05-03 10:22 ` [PATCH kexec-tools 16/32] arm: fix ELF32/ELF64 check Russell King
2016-05-03 10:22 ` [PATCH kexec-tools 17/32] arm: return proper error for missing crash kernel Russell King
2016-05-27 11:27 ` Pratyush Anand
2016-05-03 10:22 ` [PATCH kexec-tools 18/32] arm: report if crash kernel is out of bounds Russell King
2016-05-27 11:27 ` Pratyush Anand
2016-05-27 13:36 ` Russell King - ARM Linux
2016-05-03 10:22 ` [PATCH kexec-tools 19/32] arm: add memory ranges debug Russell King
2016-05-27 11:28 ` Pratyush Anand
2016-05-03 10:22 ` [PATCH kexec-tools 20/32] arm: add maximum number of memory ranges Russell King
2016-05-27 11:29 ` Pratyush Anand
2016-05-03 10:22 ` [PATCH kexec-tools 21/32] arm: parse crash_reserved_mem early Russell King
2016-05-27 11:30 ` Pratyush Anand
2016-05-03 10:22 ` [PATCH kexec-tools 22/32] arm: use generic mem_region sorting implementation Russell King
2016-05-27 11:30 ` Pratyush Anand
2016-05-03 10:23 ` [PATCH kexec-tools 23/32] arm: move crash system RAM parsing earlier Russell King
2016-05-27 11:33 ` Pratyush Anand
2016-05-03 10:23 ` [PATCH kexec-tools 24/32] arm: add support for platforms with boot memory aliases Russell King
2016-05-27 11:34 ` Pratyush Anand
2016-05-03 10:23 ` [PATCH kexec-tools 25/32] arm: crashdump needs boot alias of crash kernel region Russell King
2016-05-27 11:34 ` Pratyush Anand
2016-05-03 10:23 ` [PATCH kexec-tools 26/32] arm: rename crash_reserved_mem to crash_kernel_mem Russell King
2016-05-27 11:36 ` Pratyush Anand
2016-05-03 10:23 ` [PATCH kexec-tools 27/32] arm: add support for multiple reserved regions Russell King
2016-05-27 11:37 ` Pratyush Anand
2016-05-03 10:23 ` [PATCH kexec-tools 28/32] arm: add support for boot-time crash kernel resource Russell King
2016-05-27 11:37 ` Pratyush Anand
2016-05-03 10:23 ` [PATCH kexec-tools 29/32] arm: add debug of reserved and coredump memory ranges Russell King
2016-05-27 11:35 ` Pratyush Anand
2016-05-03 10:23 ` [PATCH kexec-tools 30/32] arm: fix type of phys_offset Russell King
2016-05-27 11:38 ` Pratyush Anand
2016-05-03 10:23 ` [PATCH kexec-tools 31/32] arm: clean up phys/page offset debug Russell King
2016-05-27 11:38 ` Pratyush Anand
2016-05-03 10:23 ` [PATCH kexec-tools 32/32] arm: report which ELF core format we will use Russell King
2016-05-27 11:38 ` Pratyush Anand
2016-05-03 10:29 ` [PATCH 06/12] ARM: kexec: advertise location of bootable RAM Russell King - ARM Linux
2016-04-28 9:28 ` [PATCH 07/12] ARM: keystone: dts: add psci command definition Russell King
2016-04-28 9:28 ` [PATCH 08/12] kexec: don't invoke OOM-killer for control page allocation Russell King
2016-04-29 14:57 ` Pratyush Anand
2016-04-28 9:28 ` [PATCH 09/12] kexec: ensure user memory sizes do not wrap Russell King
2016-04-29 14:57 ` Pratyush Anand
2016-04-28 9:28 ` [PATCH 10/12] kexec: arrange for paddr_vmcoreinfo_note() to return phys_addr_t Russell King
2016-04-29 15:06 ` Pratyush Anand
2016-04-29 15:16 ` Mark Rutland
2016-04-29 15:47 ` Pratyush Anand
2016-05-03 4:24 ` Baoquan He
2016-05-03 5:53 ` Pratyush Anand
2016-05-03 9:01 ` Baoquan He
2016-05-03 10:12 ` Russell King - ARM Linux
2016-05-03 12:56 ` Baoquan He
2016-04-29 18:06 ` Russell King - ARM Linux
2016-04-30 3:30 ` Pratyush Anand
2016-04-28 9:28 ` [PATCH 11/12] kexec: allow architectures to override boot mapping Russell King
2016-04-29 15:14 ` Pratyush Anand
2016-04-29 18:08 ` Russell King - ARM Linux
2016-05-11 18:56 ` Russell King - ARM Linux
2016-05-12 6:26 ` Baoquan He
2016-05-12 8:22 ` Russell King - ARM Linux
2016-04-28 9:28 ` [PATCH 12/12] ARM: kexec: fix kexec for Keystone 2 Russell King
2016-04-28 23:04 ` [PATCH 00/12] Fixing TI Keystone2 kexec Simon Horman
2016-05-11 8:29 ` Dave Young
2016-05-11 8:52 ` Russell King - ARM Linux
2016-05-11 9:13 ` Dave Young
2016-05-11 9:32 ` Russell King - ARM Linux
2016-05-11 10:31 ` Dave Young
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=E1aviEk-0000il-44@rmk-PC.arm.linux.org.uk \
--to=rmk+kernel@arm.linux.org.uk \
--cc=corbet@lwn.net \
--cc=devicetree@vger.kernel.org \
--cc=ebiederm@xmission.com \
--cc=fenghua.yu@intel.com \
--cc=galak@codeaurora.org \
--cc=hbabu@us.ibm.com \
--cc=ijc+devicetree@hellion.org.uk \
--cc=kexec@lists.infradead.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-ia64@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=pawel.moll@arm.com \
--cc=robh+dt@kernel.org \
--cc=ssantosh@kernel.org \
--cc=tony.luck@intel.com \
--cc=vgoyal@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox