Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp1736981ybg; Sat, 19 Oct 2019 01:24:19 -0700 (PDT) X-Google-Smtp-Source: APXvYqyA5KMhdf2TGhGsZxDYXeP/ApSnQf8ZnBJUsRVWAcPxj3D5K4GiLfkbZ17qUy4+8kSMvtMH X-Received: by 2002:a17:906:7f04:: with SMTP id d4mr12798306ejr.178.1571473459627; Sat, 19 Oct 2019 01:24:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1571473459; cv=none; d=google.com; s=arc-20160816; b=ogfqQEFC9CR1oGWoFF8hUYDc3wA5DbHBauV0Qy6BmKwCSKo/l4ACdjUyUWm7eE9cEK 9FusU02hVZx4L2Ql12ZB4zd+xsTTsTQJdYDokcaFAsHLSwkuLiak7ufTVtsMjbEphd9m 43WNtM8JI2hmCSfW5/tKjuIJzpPCx6uY1uM20a0FUtnofAQOCxISyTZu/I1lC/uMjNgJ kNg4t8pA+Ja/n1P2sps0dOPxV3lakzvoFdyOs6rfEtjxnUhzOQtUgCg/DlQScjPmvWSp Z1TmuJ7f+bRxF+2IHffFuLNSM9eW1l2dOZ51ohenZI3Gt6UM5z5OKdVga7ZSRcBa/L7I NfTA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :organization:references:in-reply-to:message-id:subject:cc:to:from :date; bh=oak3p9EaDe9MyrD+PrkMJLV6IMdCcf2N7Shz/W0XZqY=; b=UjoJZA3JdVtTdjTgZstPUchvUdvpJvwdegIFL57/LN9Ii2Su9eOVjfdkXz2+d+fRtJ RpgeutY3epqXkjN39aFS53pCT+RevvZlVrkMc9qyIWRL3MU3vsTud+M26Q0vVI3lLwnx jxdcflQT/Co9Ddl1sJ6rj2RMqJMW1NXbb6DXC/SefqbVhlb4Xas6rHV/Nl86wOtO/OtT 6ec8tbUbAC2tfXHV26ueT8rNPR7vWGpN+ZSsqyMvHcoXHEibfnprnO2lFQ59IvS5KQXJ mrroHaKfmVSeySNJIPWkIH70Fd6EB11HRrdWzsM2ymD8vcoW6fi4f7e1bVn4eVxMHsuJ 8V/Q== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d34si252499eda.268.2019.10.19.01.23.56; Sat, 19 Oct 2019 01:24:19 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2633930AbfJRMrU (ORCPT + 99 others); Fri, 18 Oct 2019 08:47:20 -0400 Received: from szxga05-in.huawei.com ([45.249.212.191]:4734 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2633907AbfJRMrU (ORCPT ); Fri, 18 Oct 2019 08:47:20 -0400 Received: from DGGEMS412-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id E6B4EFB0A86FFA338901; Fri, 18 Oct 2019 20:47:17 +0800 (CST) Received: from localhost (10.202.226.61) by DGGEMS412-HUB.china.huawei.com (10.3.19.212) with Microsoft SMTP Server id 14.3.439.0; Fri, 18 Oct 2019 20:47:10 +0800 Date: Fri, 18 Oct 2019 13:46:56 +0100 From: Jonathan Cameron To: "Rafael J. Wysocki" CC: , , , , , Keith Busch , , , Andrew Morton , "Dan Williams" Subject: Re: [PATCH V5 1/4] ACPI: Support Generic Initiator only domains Message-ID: <20191018134656.00000f70@huawei.com> In-Reply-To: <1895971.7mY3IlW731@kreacher> References: <20191004114330.104746-1-Jonathan.Cameron@huawei.com> <20191004114330.104746-2-Jonathan.Cameron@huawei.com> <1895971.7mY3IlW731@kreacher> Organization: Huawei X-Mailer: Claws Mail 3.17.4 (GTK+ 2.24.32; i686-w64-mingw32) MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit X-Originating-IP: [10.202.226.61] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 18 Oct 2019 12:18:33 +0200 "Rafael J. Wysocki" wrote: > On Friday, October 4, 2019 1:43:27 PM CEST Jonathan Cameron wrote: > > Generic Initiators are a new ACPI concept that allows for the > > description of proximity domains that contain a device which > > performs memory access (such as a network card) but neither > > host CPU nor Memory. > > > > This patch has the parsing code and provides the infrastructure > > for an architecture to associate these new domains with their > > nearest memory processing node. > > > > Signed-off-by: Jonathan Cameron > > This depends on the series from Dan at: > > https://lore.kernel.org/linux-acpi/CAPcyv4gBSX58CWH4HZ28w0_cZRzJrhgdEFHa2g8KDqyv8aFqZQ@mail.gmail.com/T/#m1acce3ae8f29f680c0d95fd1e840e703949fbc48 > Hi Rafael, Yes. Cover letter mentions it was rebased on v4 of that series. > AFAICS, so please respin when that one hits the Linus' tree. Sure, though that pushes it out another cycle and it's beginning to get a bit silly (just rebases since April). I guess it can't be helped given the series hits several trees. Note that this version applies completely clean on top of V7 of Dan's SPM/hmem set applied to the tip tree (which I assume is the route that will take). Hence, unless something else changes, the respin will be identical to this version. Thanks, Jonathan > > > --- > > drivers/acpi/numa/srat.c | 62 +++++++++++++++++++++++++++++++++- > > drivers/base/node.c | 3 ++ > > include/asm-generic/topology.h | 3 ++ > > include/linux/nodemask.h | 1 + > > include/linux/topology.h | 7 ++++ > > 5 files changed, 75 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/acpi/numa/srat.c b/drivers/acpi/numa/srat.c > > index eadbf90e65d1..fe34315a9234 100644 > > --- a/drivers/acpi/numa/srat.c > > +++ b/drivers/acpi/numa/srat.c > > @@ -170,6 +170,38 @@ acpi_table_print_srat_entry(struct acpi_subtable_header *header) > > } > > break; > > > > + case ACPI_SRAT_TYPE_GENERIC_AFFINITY: > > + { > > + struct acpi_srat_generic_affinity *p = > > + (struct acpi_srat_generic_affinity *)header; > > + char name[9] = {}; > > + > > + if (p->device_handle_type == 0) { > > + /* > > + * For pci devices this may be the only place they > > + * are assigned a proximity domain > > + */ > > + pr_debug("SRAT Generic Initiator(Seg:%u BDF:%u) in proximity domain %d %s\n", > > + *(u16 *)(&p->device_handle[0]), > > + *(u16 *)(&p->device_handle[2]), > > + p->proximity_domain, > > + (p->flags & ACPI_SRAT_GENERIC_AFFINITY_ENABLED) ? > > + "enabled" : "disabled"); > > + } else { > > + /* > > + * In this case we can rely on the device having a > > + * proximity domain reference > > + */ > > + memcpy(name, p->device_handle, 8); > > + pr_info("SRAT Generic Initiator(HID=%.8s UID=%.4s) in proximity domain %d %s\n", > > + (char *)(&p->device_handle[0]), > > + (char *)(&p->device_handle[8]), > > + p->proximity_domain, > > + (p->flags & ACPI_SRAT_GENERIC_AFFINITY_ENABLED) ? > > + "enabled" : "disabled"); > > + } > > + } > > + break; > > default: > > pr_warn("Found unsupported SRAT entry (type = 0x%x)\n", > > header->type); > > @@ -378,6 +410,32 @@ acpi_parse_gicc_affinity(union acpi_subtable_headers *header, > > return 0; > > } > > > > +static int __init > > +acpi_parse_gi_affinity(union acpi_subtable_headers *header, > > + const unsigned long end) > > +{ > > + struct acpi_srat_generic_affinity *gi_affinity; > > + int node; > > + > > + gi_affinity = (struct acpi_srat_generic_affinity *)header; > > + if (!gi_affinity) > > + return -EINVAL; > > + acpi_table_print_srat_entry(&header->common); > > + > > + if (!(gi_affinity->flags & ACPI_SRAT_GENERIC_AFFINITY_ENABLED)) > > + return -EINVAL; > > + > > + node = acpi_map_pxm_to_node(gi_affinity->proximity_domain); > > + if (node == NUMA_NO_NODE || node >= MAX_NUMNODES) { > > + pr_err("SRAT: Too many proximity domains.\n"); > > + return -EINVAL; > > + } > > + node_set(node, numa_nodes_parsed); > > + node_set_state(node, N_GENERIC_INITIATOR); > > + > > + return 0; > > +} > > + > > static int __initdata parsed_numa_memblks; > > > > static int __init > > @@ -433,7 +491,7 @@ int __init acpi_numa_init(void) > > > > /* SRAT: System Resource Affinity Table */ > > if (!acpi_table_parse(ACPI_SIG_SRAT, acpi_parse_srat)) { > > - struct acpi_subtable_proc srat_proc[3]; > > + struct acpi_subtable_proc srat_proc[4]; > > > > memset(srat_proc, 0, sizeof(srat_proc)); > > srat_proc[0].id = ACPI_SRAT_TYPE_CPU_AFFINITY; > > @@ -442,6 +500,8 @@ int __init acpi_numa_init(void) > > srat_proc[1].handler = acpi_parse_x2apic_affinity; > > srat_proc[2].id = ACPI_SRAT_TYPE_GICC_AFFINITY; > > srat_proc[2].handler = acpi_parse_gicc_affinity; > > + srat_proc[3].id = ACPI_SRAT_TYPE_GENERIC_AFFINITY; > > + srat_proc[3].handler = acpi_parse_gi_affinity; > > > > acpi_table_parse_entries_array(ACPI_SIG_SRAT, > > sizeof(struct acpi_table_srat), > > diff --git a/drivers/base/node.c b/drivers/base/node.c > > index 296546ffed6c..e5863baa8cb6 100644 > > --- a/drivers/base/node.c > > +++ b/drivers/base/node.c > > @@ -977,6 +977,8 @@ static struct node_attr node_state_attr[] = { > > #endif > > [N_MEMORY] = _NODE_ATTR(has_memory, N_MEMORY), > > [N_CPU] = _NODE_ATTR(has_cpu, N_CPU), > > + [N_GENERIC_INITIATOR] = _NODE_ATTR(has_generic_initiator, > > + N_GENERIC_INITIATOR), > > }; > > > > static struct attribute *node_state_attrs[] = { > > @@ -988,6 +990,7 @@ static struct attribute *node_state_attrs[] = { > > #endif > > &node_state_attr[N_MEMORY].attr.attr, > > &node_state_attr[N_CPU].attr.attr, > > + &node_state_attr[N_GENERIC_INITIATOR].attr.attr, > > NULL > > }; > > > > diff --git a/include/asm-generic/topology.h b/include/asm-generic/topology.h > > index 238873739550..54d0b4176a45 100644 > > --- a/include/asm-generic/topology.h > > +++ b/include/asm-generic/topology.h > > @@ -71,6 +71,9 @@ > > #ifndef set_cpu_numa_mem > > #define set_cpu_numa_mem(cpu, node) > > #endif > > +#ifndef set_gi_numa_mem > > +#define set_gi_numa_mem(gi, node) > > +#endif > > > > #endif /* !CONFIG_NUMA || !CONFIG_HAVE_MEMORYLESS_NODES */ > > > > diff --git a/include/linux/nodemask.h b/include/linux/nodemask.h > > index 27e7fa36f707..1aebf766fb52 100644 > > --- a/include/linux/nodemask.h > > +++ b/include/linux/nodemask.h > > @@ -399,6 +399,7 @@ enum node_states { > > #endif > > N_MEMORY, /* The node has memory(regular, high, movable) */ > > N_CPU, /* The node has one or more cpus */ > > + N_GENERIC_INITIATOR, /* The node is a GI only node */ > > NR_NODE_STATES > > }; > > > > diff --git a/include/linux/topology.h b/include/linux/topology.h > > index eb2fe6edd73c..05ccf011e489 100644 > > --- a/include/linux/topology.h > > +++ b/include/linux/topology.h > > @@ -140,6 +140,13 @@ static inline void set_numa_mem(int node) > > } > > #endif > > > > +#ifndef set_gi_numa_mem > > +static inline void set_gi_numa_mem(int gi, int node) > > +{ > > + _node_numa_mem_[gi] = node; > > +} > > +#endif > > + > > #ifndef node_to_mem_node > > static inline int node_to_mem_node(int node) > > { > > > > > >