lkml.org 
[lkml]   [2019]   [Aug]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH v5 02/10] efi: Enumerate EFI_MEMORY_SP
    From
    Date
    UEFI 2.8 defines an EFI_MEMORY_SP attribute bit to augment the
    interpretation of the EFI Memory Types as "reserved for a specific
    purpose". The intent of this bit is to allow the OS to identify precious
    or scarce memory resources and optionally manage it separately from
    EfiConventionalMemory. As defined older OSes that do not know about this
    attribute are permitted to ignore it and the memory will be handled
    according to the OS default policy for the given memory type.

    In other words, this "specific purpose" hint is deliberately weaker than
    EfiReservedMemoryType in that the system continues to operate if the OS
    takes no action on the attribute. The risk of taking no action is
    potentially unwanted / unmovable kernel allocations from the designated
    resource that prevent the full realization of the "specific purpose".
    For example, consider a system with a high-bandwidth memory pool. Older
    kernels are permitted to boot and consume that memory as conventional
    "System-RAM" newer kernels may arrange for that memory to be set aside
    (soft reserved) by the system administrator for a dedicated
    high-bandwidth memory aware application to consume.

    Specifically, this mechanism allows for the elimination of scenarios
    where platform firmware tries to game OS policy by lying about ACPI SLIT
    values, i.e. claiming that a precious memory resource has a high
    distance to trigger the OS to avoid it by default. This reservation hint
    allows platform-firmware to instead tell the truth about performance
    characteristics by indicate to OS memory management to put immovable
    allocations elsewhere.

    Implement simple detection of the bit for EFI memory table dumps and
    save the kernel policy for a follow-on change.

    Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Reviewed-by: Dave Hansen <dave.hansen@linux.intel.com>
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>
    ---
    drivers/firmware/efi/efi.c | 5 +++--
    include/linux/efi.h | 1 +
    2 files changed, 4 insertions(+), 2 deletions(-)

    diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
    index 8f1ab04f6743..363bb9d00fa5 100644
    --- a/drivers/firmware/efi/efi.c
    +++ b/drivers/firmware/efi/efi.c
    @@ -833,15 +833,16 @@ char * __init efi_md_typeattr_format(char *buf, size_t size,
    if (attr & ~(EFI_MEMORY_UC | EFI_MEMORY_WC | EFI_MEMORY_WT |
    EFI_MEMORY_WB | EFI_MEMORY_UCE | EFI_MEMORY_RO |
    EFI_MEMORY_WP | EFI_MEMORY_RP | EFI_MEMORY_XP |
    - EFI_MEMORY_NV |
    + EFI_MEMORY_NV | EFI_MEMORY_SP |
    EFI_MEMORY_RUNTIME | EFI_MEMORY_MORE_RELIABLE))
    snprintf(pos, size, "|attr=0x%016llx]",
    (unsigned long long)attr);
    else
    snprintf(pos, size,
    - "|%3s|%2s|%2s|%2s|%2s|%2s|%2s|%3s|%2s|%2s|%2s|%2s]",
    + "|%3s|%2s|%2s|%2s|%2s|%2s|%2s|%2s|%3s|%2s|%2s|%2s|%2s]",
    attr & EFI_MEMORY_RUNTIME ? "RUN" : "",
    attr & EFI_MEMORY_MORE_RELIABLE ? "MR" : "",
    + attr & EFI_MEMORY_SP ? "SP" : "",
    attr & EFI_MEMORY_NV ? "NV" : "",
    attr & EFI_MEMORY_XP ? "XP" : "",
    attr & EFI_MEMORY_RP ? "RP" : "",
    diff --git a/include/linux/efi.h b/include/linux/efi.h
    index bd3837022307..5c1dd0221384 100644
    --- a/include/linux/efi.h
    +++ b/include/linux/efi.h
    @@ -112,6 +112,7 @@ typedef struct {
    #define EFI_MEMORY_MORE_RELIABLE \
    ((u64)0x0000000000010000ULL) /* higher reliability */
    #define EFI_MEMORY_RO ((u64)0x0000000000020000ULL) /* read-only */
    +#define EFI_MEMORY_SP ((u64)0x0000000000040000ULL) /* soft reserved */
    #define EFI_MEMORY_RUNTIME ((u64)0x8000000000000000ULL) /* range requires runtime mapping */
    #define EFI_MEMORY_DESCRIPTOR_VERSION 1

    \
     
     \ /
      Last update: 2019-08-30 04:07    [W:4.054 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site