• Suraj Jitindar Singh's avatar
    powerpc/mm: Limit rma_size to 1TB when running without HV mode · da0ef933
    Suraj Jitindar Singh authored
    The virtual real mode addressing (VRMA) mechanism is used when a
    partition is using HPT (Hash Page Table) translation and performs real
    mode accesses (MSR[IR|DR] = 0) in non-hypervisor mode. In this mode
    effective address bits 0:23 are treated as zero (i.e. the access is
    aliased to 0) and the access is performed using an implicit 1TB SLB
    entry.
    
    The size of the RMA (Real Memory Area) is communicated to the guest as
    the size of the first memory region in the device tree. And because of
    the mechanism described above can be expected to not exceed 1TB. In
    the event that the host erroneously represents the RMA as being larger
    than 1TB, guest accesses in real mode to memory addresses above 1TB
    will be aliased down to below 1TB. This means that a memory access
    performed in real mode may differ to one performed in virtual mode for
    the same memory address, which would likely have unintended
    consequences.
    
    To avoid this outcome have the guest explicitly limit the size of the
    RMA to the current maximum, which is 1TB. This means that even if the
    first memory block is larger than 1TB, only the first 1TB should be
    accessed in real mode.
    
    Fixes: c610d65c ("powerpc/pseries: lift RTAS limit for hash")
    Cc: stable@vger.kernel.org # v4.16+
    Signed-off-by: default avatarSuraj Jitindar Singh <sjitindarsingh@gmail.com>
    Tested-by: default avatarSatheesh Rajendran <sathnaga@linux.vnet.ibm.com>
    Reviewed-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20190710052018.14628-1-sjitindarsingh@gmail.com
    da0ef933
hash_utils.c 51.3 KB