• Chris von Recklinghausen's avatar
    arm64: Fix kcore macros after 52-bit virtual addressing fallout · 86109a69
    Chris von Recklinghausen authored
    We export the entire kernel address space (i.e. the whole of the TTBR1
    address range) via /proc/kcore. The kc_vaddr_to_offset() and
    kc_offset_to_vaddr() macros are intended to convert between a kernel
    virtual address and its offset relative to the start of the TTBR1
    address space.
    
    Prior to commit:
    
      14c127c9 ("arm64: mm: Flip kernel VA space")
    
    ... the offset was calculated relative to VA_START, which at the time
    was the start of the TTBR1 address space. At this time, PAGE_OFFSET
    pointed to the high half of the TTBR1 address space where arm64's
    linear map lived.
    
    That commit swapped the position of VA_START and PAGE_OFFSET, but
    failed to update kc_vaddr_to_offset() or kc_offset_to_vaddr(), so
    since then the two macros behave incorrectly.
    
    Note that VA_START was subsequently renamed to PAGE_END in commit:
    
      77ad4ce6 ("arm64: memory: rename VA_START to PAGE_END")
    
    As the generic implementations of the two macros calculate the offset
    relative to PAGE_OFFSET (which is now the start of the TTBR1 address
    space), we can delete the arm64 implementation and use those.
    
    Fixes: 14c127c9 ("arm64: mm: Flip kernel VA space")
    Reviewed-by: default avatarJames Morse <james.morse@arm.com>
    Reviewed-by: default avatarMark Rutland <mark.rutland@arm.com>
    Signed-off-by: default avatarChris von Recklinghausen <crecklin@redhat.com>
    Signed-off-by: default avatarWill Deacon <will@kernel.org>
    86109a69
pgtable.h 25.2 KB