• Michael Ellerman's avatar
    powerpc/time: Fix mftb()/get_tb() for use with the compat VDSO · 5c189c52
    Michael Ellerman authored
    When we're building the compat VDSO we are building 32-bit code but in
    the context of a 64-bit kernel configuration.
    
    To make this work we need to be careful in some places when using
    ifdefs to differentiate between CONFIG_PPC64 and __powerpc64__.
    
    CONFIG_PPC64 indicates the kernel we're building is 64-bit, but it
    doesn't tell us that we're currently building 64-bit code - we could
    be building 32-bit code for the compat VDSO.
    
    On the other hand __powerpc64__ tells us that we are currently
    building 64-bit code (and therefore we must also be building a 64-bit
    kernel).
    
    In the case of get_tb() we want to use the 32-bit code sequence
    regardless of whether the kernel we're building for is 64-bit or
    32-bit, what matters is the word size of the current object. So we
    need to check __powerpc64__ to decide if we use mftb() or the
    mftbu()/mftb() sequence.
    
    For mftb() the logic for CPU_FTR_CELL_TB_BUG only makes sense if we're
    building 64-bit code, so guard that with a __powerpc64__ check.
    Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20201126131006.2431205-4-mpe@ellerman.id.au
    5c189c52
timebase.h 2 KB