Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp1560217imu; Wed, 16 Jan 2019 22:51:17 -0800 (PST) X-Google-Smtp-Source: ALg8bN5VSCnvetvsM6f3mV2Y5IbjZ3VOhHT4ydbpoCiIs9eVbX2jqxEm+LqgLgpNvnu6/l83W74A X-Received: by 2002:a63:8b41:: with SMTP id j62mr12546046pge.182.1547707877539; Wed, 16 Jan 2019 22:51:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547707877; cv=none; d=google.com; s=arc-20160816; b=beH4Zg5fZllv8Vx4HCa7/k2wCiOfxQEawH7whT90NLmOCo0bi18FkAi57XNQf2Kw/p vP1JouhME5xe/qYajF0o9kINmlhueLYkKxyLVeebmWhBJVKNl05tcdPoWbzPVJb4DwJA 8ngXrcw4/H3lCSlxNDBtAEEwtJg3tnAEYm74x7TfMF+WYW+eOLkaoCjADx7elrlpQTBz WPHr/61DhHwj5UW6PbQ2voj1+gO/ZOP2oaK9rtZZpEuF3w5N3QcvKXsV6Sh0mommZjHh J1hCdTYvP3lgTEVlpS/Zz1aBljdUx2DJDZGnoosHTv2sR9cMwuGOi8iCUOlt3s6SeoN4 TXEQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=LDxe+yVu0lOGlnJY9yYDyXlJo/q3OIrUnN6/6s2AWNw=; b=HNvZVAUdBt0HGkn6LNr45HM2+lEr/NNkvGWy1nAmdoABkMn4Vgqzn/aquujYn7E0Nl 3cYNxn3+m/eEGH6e6bGokigdde/xhA28wBzGDkOdqEvlju7F7OV3TuHxDuIQpD/IFbfY iA2b1LR9crwEjVYb54Hk+6xzPjN+IpTtNshI0v5rodH8QFQ9xhQ6P1lOGez7Tf1vITpz jx6Wj62wL7uWzGs0j1Kdqs9sRA8yP6cm8ZTs1RTzdSnpm50TybiPGvyLLs7UAHyAlVrA dGaiEUwQwj6hS8CVzA3+K5Dxm9VSPIliOB7RwzNHaDUntr/sWZJCA3MYs5tEZ7XKkhLH GZOw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z128si812126pgb.372.2019.01.16.22.51.01; Wed, 16 Jan 2019 22:51:17 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728078AbfAPR7r (ORCPT + 99 others); Wed, 16 Jan 2019 12:59:47 -0500 Received: from mga04.intel.com ([192.55.52.120]:8980 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727982AbfAPR7l (ORCPT ); Wed, 16 Jan 2019 12:59:41 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 16 Jan 2019 09:59:41 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,487,1539673200"; d="scan'208";a="117227797" Received: from unknown (HELO localhost.lm.intel.com) ([10.232.112.69]) by fmsmga008.fm.intel.com with ESMTP; 16 Jan 2019 09:59:40 -0800 From: Keith Busch To: linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, linux-mm@kvack.org Cc: Greg Kroah-Hartman , Rafael Wysocki , Dave Hansen , Dan Williams , Keith Busch Subject: [PATCHv4 09/13] acpi/hmat: Register performance attributes Date: Wed, 16 Jan 2019 10:58:00 -0700 Message-Id: <20190116175804.30196-10-keith.busch@intel.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20190116175804.30196-1-keith.busch@intel.com> References: <20190116175804.30196-1-keith.busch@intel.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Save the best performace access attributes and register these 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 best pairings at this time. Signed-off-by: Keith Busch --- drivers/acpi/hmat/Kconfig | 1 + drivers/acpi/hmat/hmat.c | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/drivers/acpi/hmat/Kconfig b/drivers/acpi/hmat/Kconfig index a4034d37a311..20a0e96ba58a 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 Parses representation of the ACPI Heterogeneous Memory Attributes Table (HMAT) and set the memory node relationships and access diff --git a/drivers/acpi/hmat/hmat.c b/drivers/acpi/hmat/hmat.c index efb33c74d1a3..45e20dc677f9 100644 --- a/drivers/acpi/hmat/hmat.c +++ b/drivers/acpi/hmat/hmat.c @@ -23,6 +23,8 @@ struct memory_target { struct list_head node; unsigned int memory_pxm; unsigned long p_nodes[BITS_TO_LONGS(MAX_NUMNODES)]; + bool hmem_valid; + struct node_hmem_attrs hmem; }; static __init struct memory_target *find_mem_target(unsigned int m) @@ -108,6 +110,34 @@ static __init void hmat_update_access(u8 type, u32 value, u32 *best) } } +static __init void hmat_update_target(struct memory_target *t, u8 type, + u32 value) +{ + switch (type) { + case ACPI_HMAT_ACCESS_LATENCY: + t->hmem.read_latency = value; + t->hmem.write_latency = value; + break; + case ACPI_HMAT_READ_LATENCY: + t->hmem.read_latency = value; + break; + case ACPI_HMAT_WRITE_LATENCY: + t->hmem.write_latency = value; + break; + case ACPI_HMAT_ACCESS_BANDWIDTH: + t->hmem.read_bandwidth = value; + t->hmem.write_bandwidth = value; + break; + case ACPI_HMAT_READ_BANDWIDTH: + t->hmem.read_bandwidth = value; + break; + case ACPI_HMAT_WRITE_BANDWIDTH: + t->hmem.write_bandwidth = value; + break; + } + t->hmem_valid = true; +} + static __init int hmat_parse_locality(union acpi_subtable_headers *header, const unsigned long end) { @@ -166,6 +196,8 @@ static __init int hmat_parse_locality(union acpi_subtable_headers *header, set_bit(p_node, t->p_nodes); } } + if (t && best) + hmat_update_target(t, type, best); } return 0; } @@ -267,6 +299,8 @@ static __init void hmat_register_targets(void) m = pxm_to_node(t->memory_pxm); for_each_set_bit(p, t->p_nodes, MAX_NUMNODES) register_memory_node_under_compute_node(m, p, 0); + if (t->hmem_valid) + node_set_perf_attrs(m, &t->hmem, 0); kfree(t); } } -- 2.14.4