Nathan Lynch <nath...@linux.ibm.com> writes:
> Memory locations passed as arguments from the OS to RTAS usually need
> to be addressable in 32-bit mode and must reside in the Real Mode
> Area. On PAPR guests, the RMA starts at logical address 0 and is the
> first logical memory block reported in the LPAR’s device tree.
>
> On powerpc targets with RTAS, Linux makes available to user space a
> region of memory suitable for arguments to be passed to RTAS via
> sys_rtas(). This region (rtas_rmo_buf) is allocated via the memblock
> API during boot in order to ensure that it satisfies the requirements
> described above.
>
> With radix MMU, the upper limit supplied to the memblock allocation
> can exceed the bounds of the first logical memory block, since
> ppc64_rma_size is ULONG_MAX and RTAS_INSTANTIATE_MAX is 1GB.

Why does the size of the first memory block matter for radix?

The 1GB limit is sufficient to make it accessible by 32-bit code.

> (512MB is a common size of the first memory block according to a small sample 
> of
> LPARs I have checked.)

That's the minimum we request, see prom_init.c:

        /* option vector 2: Open Firmware options supported */
        .vec2 = {
                .byte1 = OV2_REAL_MODE,
                .reserved = 0,
                .real_base = cpu_to_be32(0xffffffff),
                .real_size = cpu_to_be32(0xffffffff),
                .virt_base = cpu_to_be32(0xffffffff),
                .virt_size = cpu_to_be32(0xffffffff),
                .load_base = cpu_to_be32(0xffffffff),
                .min_rma = cpu_to_be32(512),            /* 512MB min RMA */

Since v4.12 in 2017.

cheers

Reply via email to