Register the local attached performace access attributes with the memory's node if HMAT provides the locality table. While HMAT does make it possible to know performance for all possible initiator-target pairings, we export only the local and matching pairings at this time. Signed-off-by: Keith Busch <keith.busch@xxxxxxxxx> --- drivers/acpi/hmat/Kconfig | 1 + drivers/acpi/hmat/hmat.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/drivers/acpi/hmat/Kconfig b/drivers/acpi/hmat/Kconfig index c9637e2e7514..08e972ead159 100644 --- a/drivers/acpi/hmat/Kconfig +++ b/drivers/acpi/hmat/Kconfig @@ -2,6 +2,7 @@ config ACPI_HMAT bool "ACPI Heterogeneous Memory Attribute Table Support" depends on ACPI_NUMA + select HMEM_REPORTING help If set, this option causes the kernel to set the memory NUMA node relationships and access attributes in accordance with ACPI HMAT diff --git a/drivers/acpi/hmat/hmat.c b/drivers/acpi/hmat/hmat.c index 85fd835c2e23..917e6122b3f0 100644 --- a/drivers/acpi/hmat/hmat.c +++ b/drivers/acpi/hmat/hmat.c @@ -430,6 +430,19 @@ static __init void hmat_register_target_initiators(struct memory_target *target) hmat_register_if_local(target, initiator); } +static __init void hmat_register_target_perf(struct memory_target *target) +{ + unsigned mem_nid = pxm_to_node(target->memory_pxm); + struct node_hmem_attrs hmem_attrs = { + .read_bandwidth = target->read_bandwidth, + .write_bandwidth= target->write_bandwidth, + .read_latency = target->read_latency, + .write_latency = target->write_latency, + }; + + node_set_perf_attrs(mem_nid, &hmem_attrs, 0); +} + static __init void hmat_register_targets(void) { struct memory_target *target, *tnext; @@ -439,6 +452,7 @@ static __init void hmat_register_targets(void) list_for_each_entry_safe(target, tnext, &targets, node) { list_del(&target->node); hmat_register_target_initiators(target); + hmat_register_target_perf(target); kfree(target); } -- 2.14.4