Skip to content

Commit

Permalink
ARM: Expose the VA/IDMAP offset
Browse files Browse the repository at this point in the history
The KVM code needs to be able to compute the address of
symbols in its idmap page (the equivalent of a virt_to_idmap()
call). Unfortunately, virt_to_idmap is slightly complicated,
depending on the use of arch_phys_to_idmap_offset or not, and
none of that is readily available at HYP.

Instead, expose a single kimage_voffset variable which contains the
offset between a kernel VA and its idmap address, enabling the
VA->IDMAP conversion. This allows the KVM code to behave similarily
to its arm64 counterpart.

Tested-by: Keerthy <j-keerthy@ti.com>
Acked-by: Russell King <rmk+kernel@armlinux.org.uk>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <cdall@linaro.org>
  • Loading branch information
Marc Zyngier authored and Christoffer Dall committed Apr 9, 2017
1 parent 6b52f7b commit cf763e4
Showing 1 changed file with 5 additions and 0 deletions.
5 changes: 5 additions & 0 deletions arch/arm/mm/mmu.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ struct cachepolicy {
#define s2_policy(policy) 0
#endif

unsigned long kimage_voffset __ro_after_init;

static struct cachepolicy cache_policies[] __initdata = {
{
.policy = "uncached",
Expand Down Expand Up @@ -1635,4 +1637,7 @@ void __init paging_init(const struct machine_desc *mdesc)

empty_zero_page = virt_to_page(zero_page);
__flush_dcache_page(NULL, empty_zero_page);

/* Compute the virt/idmap offset, mostly for the sake of KVM */
kimage_voffset = (unsigned long)&kimage_voffset - virt_to_idmap(&kimage_voffset);
}

0 comments on commit cf763e4

Please sign in to comment.