• Jessica Clarke's avatar
    ACPICA: Use original pointer for virtual origin tables · 5d6e5966
    Jessica Clarke authored
    ACPICA commit dfa3feffa8f760b686207d09dc880cd2f26c72af
    
    Currently the pointer to the table is cast to acpi_physical_address and
    later cast back to a pointer to be dereferenced. Whether or not this is
    supported is implementation-defined.
    
    On CHERI, and thus Arm's experimental Morello prototype architecture,
    pointers are represented as capabilities, which are unforgeable bounded
    pointers, providing always-on fine-grained spatial memory safety. This
    means that any pointer cast to a plain integer will lose all its
    associated metadata, and when cast back to a pointer it will give a
    null-derived pointer (one that has the same metadata as null but an
    address equal to the integer) that will trap on any dereference. As a
    result, this is an implementation where acpi_physical_address cannot be
    used as a hack to store real pointers.
    
    Thus, alter the lifecycle of table descriptors. Internal physical tables
    keep the current behaviour where only the address is set on install, and
    the pointer is set on acquire. Virtual tables (internal and external)
    now store the pointer on initialisation and use that on acquire (which
    will redundantly set *table_ptr to itself, but changing that is both
    unnecessary and overly complicated as acpi_tb_acquire_table is called with
    both a pointer to a variable and a pointer to Table->Pointer itself).
    
    This requires propagating the (possible) table pointer everywhere in
    order to make sure pointers make it through to acpi_tb_acquire_temp_table,
    which requires a change to the acpi_install_table interface. Instead of
    taking an ACPI_PHYSADDR_TYPE and a boolean indicating whether it's
    physical or virtual, it is now split into acpi_install_table (that takes
    an external virtual table pointer) and acpi_install_physical_table (that
    takes an ACPI_PHYSADDR_TYPE for an internal physical table address).
    This also has the benefit of providing a cleaner API.
    
    Link: https://github.com/acpica/acpica/commit/dfa3feffSigned-off-by: default avatarBob Moore <robert.moore@intel.com>
    [ rjw: Adjust the code in tables.c to match interface changes ]
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    5d6e5966
tbutils.c 12.8 KB