Return the fixmap VA with the page offset, instead of the page base
address. This allows to use hyp_fixmap_map() seamlessly regardless of
the address alignment. While at it, do the same for hyp_fixblock_map().

Signed-off-by: Vincent Donnefort <[email protected]>

diff --git a/arch/arm64/kvm/hyp/nvhe/mm.c b/arch/arm64/kvm/hyp/nvhe/mm.c
index ae8391baebc3..a6eafd72f87c 100644
--- a/arch/arm64/kvm/hyp/nvhe/mm.c
+++ b/arch/arm64/kvm/hyp/nvhe/mm.c
@@ -244,7 +244,7 @@ static void *fixmap_map_slot(struct hyp_fixmap_slot *slot, 
phys_addr_t phys)
 
 void *hyp_fixmap_map(phys_addr_t phys)
 {
-       return fixmap_map_slot(this_cpu_ptr(&fixmap_slots), phys);
+       return fixmap_map_slot(this_cpu_ptr(&fixmap_slots), phys) + 
offset_in_page(phys);
 }
 
 static void fixmap_clear_slot(struct hyp_fixmap_slot *slot)
@@ -366,7 +366,7 @@ void *hyp_fixblock_map(phys_addr_t phys, size_t *size)
 #ifdef HAS_FIXBLOCK
        *size = PMD_SIZE;
        hyp_spin_lock(&hyp_fixblock_lock);
-       return fixmap_map_slot(&hyp_fixblock_slot, phys);
+       return fixmap_map_slot(&hyp_fixblock_slot, phys) + offset_in_page(phys);
 #else
        *size = PAGE_SIZE;
        return hyp_fixmap_map(phys);
-- 
2.52.0.107.ga0afd4fd5b-goog


Reply via email to