Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp2268560yba; Mon, 15 Apr 2019 08:16:29 -0700 (PDT) X-Google-Smtp-Source: APXvYqzegmA7LZpLa6vxEnUWx6u4ry8Iry1wuuJ4DFs+WQKtUd28f7PDtU2Lr5Ybp8AWS6m9TIcj X-Received: by 2002:a62:6985:: with SMTP id e127mr76576372pfc.188.1555341389203; Mon, 15 Apr 2019 08:16:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555341389; cv=none; d=google.com; s=arc-20160816; b=LoCFOM1LolK8q5eYTfwI4MTFF1CYj5NXqpvH5CX+3Z6opCIqmfIdcZ2k1wcvMIcnFA 2ywqtDh+3ya79vVPrOoxI2bO4PZjeeWxYa89OfrFd//JkRcNfFSe7dkSGeGAB0v9HkHU llTlBIqSgcQwE8FVaQ4T8tVLJtfwiO8SoOSuuXuhUhsmgLDUR2JNB2qrpGma27Ysvr26 M+PAsNlmJJZY9vwIUmsA4WXwbgF0a1fJuiXbIsOvAEiKjHqSCNySbNx4y4QcpyLPzvTn vXQzL93kFaJ3yJeBfnzhhqITTE1l0P+7wqPULOmR93JyvZiDuRFRjfbtZqXjGrsbVkq4 aM/g== 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=dnEZfooHStwnMmAgeATkp6v8buJAv5PcJuj4rl9P134=; b=diL8SA7IbCPSNtsxLOlXORXg6opZJQUIBPdaOnZeO44T2bSIedMwFqHAJQC+QH7NxK l+1X07+3bkFfY8QIfHk6dAfEsgoTiSerZ8mZPywsMRJh2DNoAfp8fmQWXgyEWOObT806 e+WNNHK2jmWoD4v80hwMURG/bDFx9+FjBQ92rEy279r0HI4I3k7sA6FsAJDr63duydvc //IBcpYY4MBh+EUzORq6YAVyuX0Tj3SoxMkiujLqu+oU/PvWxehfttKLPEsza+a6IvUQ cGdJQYm2fvB3xu2BJZZerjTHdywIqLa61oSSFgBW9gsHANAsLBt8SDfcF5bMVNjoYrNv yfEg== 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 t3si38824969plq.181.2019.04.15.08.16.10; Mon, 15 Apr 2019 08:16:29 -0700 (PDT) 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 S1727651AbfDOPPd (ORCPT + 99 others); Mon, 15 Apr 2019 11:15:33 -0400 Received: from mga04.intel.com ([192.55.52.120]:23730 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727413AbfDOPPa (ORCPT ); Mon, 15 Apr 2019 11:15:30 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 15 Apr 2019 08:15:29 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,354,1549958400"; d="scan'208";a="149585858" Received: from unknown (HELO localhost.lm.intel.com) ([10.232.112.69]) by FMSMGA003.fm.intel.com with ESMTP; 15 Apr 2019 08:15:28 -0700 From: Keith Busch To: linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, linux-mm@kvack.org Cc: Rafael Wysocki , Dave Hansen , Dan Williams , Brice Goglin , Keith Busch Subject: [PATCHv2 1/2] hmat: Register memory-side cache after parsing Date: Mon, 15 Apr 2019 09:16:53 -0600 Message-Id: <20190415151654.15913-2-keith.busch@intel.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20190415151654.15913-1-keith.busch@intel.com> References: <20190415151654.15913-1-keith.busch@intel.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Instead of registering the hmat cache attributes in line with parsing the table, save the attributes in the memory target and register them after parsing completes. This will make it easier to register the attributes later when hot add is supported. Signed-off-by: Keith Busch --- drivers/acpi/hmat/hmat.c | 48 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/drivers/acpi/hmat/hmat.c b/drivers/acpi/hmat/hmat.c index b7824a0309f7..bdb167c026ff 100644 --- a/drivers/acpi/hmat/hmat.c +++ b/drivers/acpi/hmat/hmat.c @@ -41,6 +41,7 @@ struct memory_target { unsigned int memory_pxm; unsigned int processor_pxm; struct node_hmem_attrs hmem_attrs; + struct node_cache_attrs cache_attrs; }; struct memory_initiator { @@ -314,7 +315,7 @@ static __init int hmat_parse_cache(union acpi_subtable_headers *header, const unsigned long end) { struct acpi_hmat_cache *cache = (void *)header; - struct node_cache_attrs cache_attrs; + struct memory_target *target; u32 attrs; if (cache->header.length < sizeof(*cache)) { @@ -328,37 +329,40 @@ static __init int hmat_parse_cache(union acpi_subtable_headers *header, cache->memory_PD, cache->cache_size, attrs, cache->number_of_SMBIOShandles); - cache_attrs.size = cache->cache_size; - cache_attrs.level = (attrs & ACPI_HMAT_CACHE_LEVEL) >> 4; - cache_attrs.line_size = (attrs & ACPI_HMAT_CACHE_LINE_SIZE) >> 16; + target = find_mem_target(cache->memory_PD); + if (!target) + return 0; + + target->cache_attrs.size = cache->cache_size; + target->cache_attrs.level = (attrs & ACPI_HMAT_CACHE_LEVEL) >> 4; + target->cache_attrs.line_size = (attrs & ACPI_HMAT_CACHE_LINE_SIZE) >> 16; switch ((attrs & ACPI_HMAT_CACHE_ASSOCIATIVITY) >> 8) { case ACPI_HMAT_CA_DIRECT_MAPPED: - cache_attrs.indexing = NODE_CACHE_DIRECT_MAP; + target->cache_attrs.indexing = NODE_CACHE_DIRECT_MAP; break; case ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING: - cache_attrs.indexing = NODE_CACHE_INDEXED; + target->cache_attrs.indexing = NODE_CACHE_INDEXED; break; case ACPI_HMAT_CA_NONE: default: - cache_attrs.indexing = NODE_CACHE_OTHER; + target->cache_attrs.indexing = NODE_CACHE_OTHER; break; } switch ((attrs & ACPI_HMAT_WRITE_POLICY) >> 12) { case ACPI_HMAT_CP_WB: - cache_attrs.write_policy = NODE_CACHE_WRITE_BACK; + target->cache_attrs.write_policy = NODE_CACHE_WRITE_BACK; break; case ACPI_HMAT_CP_WT: - cache_attrs.write_policy = NODE_CACHE_WRITE_THROUGH; + target->cache_attrs.write_policy = NODE_CACHE_WRITE_THROUGH; break; case ACPI_HMAT_CP_NONE: default: - cache_attrs.write_policy = NODE_CACHE_WRITE_OTHER; + target->cache_attrs.write_policy = NODE_CACHE_WRITE_OTHER; break; } - node_add_cache(pxm_to_node(cache->memory_PD), &cache_attrs); return 0; } @@ -577,20 +581,34 @@ static __init void hmat_register_target_initiators(struct memory_target *target) } } +static __init void hmat_register_target_cache(struct memory_target *target) +{ + unsigned mem_nid = pxm_to_node(target->memory_pxm); + node_add_cache(mem_nid, &target->cache_attrs); +} + static __init void hmat_register_target_perf(struct memory_target *target) { unsigned mem_nid = pxm_to_node(target->memory_pxm); node_set_perf_attrs(mem_nid, &target->hmem_attrs, 0); } +static __init void hmat_register_target(struct memory_target *target) +{ + if (!node_online(pxm_to_node(target->memory_pxm))) + return; + + hmat_register_target_initiators(target); + hmat_register_target_cache(target); + hmat_register_target_perf(target); +} + static __init void hmat_register_targets(void) { struct memory_target *target; - list_for_each_entry(target, &targets, node) { - hmat_register_target_initiators(target); - hmat_register_target_perf(target); - } + list_for_each_entry(target, &targets, node) + hmat_register_target(target); } static __init void hmat_free_structures(void) -- 2.14.4