• Paul Mackerras's avatar
    powerpc/64: Don't try to use radix MMU under a hypervisor · 18569c1f
    Paul Mackerras authored
    Currently, if the kernel is running on a POWER9 processor under a
    hypervisor, it will try to use the radix MMU even though it doesn't have
    the necessary code to use radix under a hypervisor (it doesn't negotiate
    use of radix, and it doesn't do the H_REGISTER_PROC_TBL hcall). The
    result is that the guest kernel will crash when it tries to turn on the
    MMU.
    
    This fixes it by looking for the /chosen/ibm,architecture-vec-5
    property, and if it exists, clears the radix MMU feature bit, before we
    decide whether to initialize for radix or HPT. This property is created
    by the hypervisor as a result of the guest calling the
    ibm,client-architecture-support method to indicate its capabilities, so
    it will indicate whether the hypervisor agreed to us using radix.
    
    Systems without a hypervisor may have this property also (for example,
    skiboot creates it), so we check the HV bit in the MSR to see whether we
    are running as a guest or not. If we are in hypervisor mode, then we can
    do whatever we like including using the radix MMU.
    
    The reason for using this property is that in future, when we have
    support for using radix under a hypervisor, we will need to check this
    property to see whether the hypervisor agreed to us using radix.
    
    Fixes: 2bfd65e4 ("powerpc/mm/radix: Add radix callbacks for early init routines")
    Cc: stable@vger.kernel.org # v4.7+
    Signed-off-by: default avatarPaul Mackerras <paulus@ozlabs.org>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    18569c1f
init_64.c 10 KB