diff for duplicates of <236eab50-e1d0-e2f5-fb69-95451c4ccc7e@codeaurora.org> diff --git a/a/1.txt b/N1/1.txt index dd3d424..628fcb6 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -27,56 +27,56 @@ On 10/9/2018 11:58 AM, James Morse wrote: >>> +++ b/drivers/acpi/pptt.c >>> @@ -341,6 +341,84 @@ static struct acpi_pptt_cache >>> *acpi_find_cache_node(struct acpi_table_header *ta ->>> /* total number of attributes checked by the properties code */ ->>> #define PPTT_CHECKED_ATTRIBUTES 4 ->>> +/** +>>> ? /* total number of attributes checked by the properties code */ +>>> ? #define PPTT_CHECKED_ATTRIBUTES 4 +>>> ? +/** >>> + * acpi_pptt_min_physid_from_cpu_node() - Recursivly find @min_physid for all >>> + * leaf CPUs below @cpu_node. ->>> + * @table_hdr: Pointer to the head of the PPTT table ->>> + * @cpu_node: The point in the toplogy to start the walk ->>> + * @min_physid: The min_physid to update with leaf CPUs. +>>> + * @table_hdr:??? Pointer to the head of the PPTT table +>>> + * @cpu_node:??? The point in the toplogy to start the walk +>>> + * @min_physid:??? The min_physid to update with leaf CPUs. >>> + */ >>> +void acpi_pptt_min_physid_from_cpu_node(struct acpi_table_header *table_hdr, ->>> + struct acpi_pptt_processor *cpu_node, ->>> + phys_cpuid_t *min_physid) +>>> +??????????????????? struct acpi_pptt_processor *cpu_node, +>>> +??????????????????? phys_cpuid_t *min_physid) >>> +{ ->>> + bool leaf = true; ->>> + u32 acpi_processor_id; ->>> + phys_cpuid_t cpu_node_phys_id; ->>> + struct acpi_subtable_header *iter; ->>> + struct acpi_pptt_processor *iter_node; ->>> + u32 target_node = ACPI_PTR_DIFF(cpu_node, table_hdr); ->>> + u32 proc_sz = sizeof(struct acpi_pptt_processor *); ->>> + unsigned long table_end = (unsigned long)table_hdr + table_hdr->length; +>>> +??? bool leaf = true; +>>> +??? u32 acpi_processor_id; +>>> +??? phys_cpuid_t cpu_node_phys_id; +>>> +??? struct acpi_subtable_header *iter; +>>> +??? struct acpi_pptt_processor *iter_node; +>>> +??? u32 target_node = ACPI_PTR_DIFF(cpu_node, table_hdr); +>>> +??? u32 proc_sz = sizeof(struct acpi_pptt_processor *); +>>> +??? unsigned long table_end = (unsigned long)table_hdr + table_hdr->length; >>> + ->>> + /* ->>> + * Walk the PPTT, looking for nodes that reference cpu_node ->>> + * as parent. ->>> + */ ->>> + iter = ACPI_ADD_PTR(struct acpi_subtable_header, table_hdr, ->>> + sizeof(struct acpi_table_pptt)); +>>> +??? /* +>>> +???? * Walk the PPTT, looking for nodes that reference cpu_node +>>> +???? * as parent. +>>> +???? */ +>>> +??? iter = ACPI_ADD_PTR(struct acpi_subtable_header, table_hdr, +>>> +???????????????? sizeof(struct acpi_table_pptt)); >>> + ->>> + while ((unsigned long)iter + proc_sz < table_end) { ->>> + iter_node = (struct acpi_pptt_processor *)iter; +>>> +??? while ((unsigned long)iter + proc_sz < table_end) { +>>> +??????? iter_node = (struct acpi_pptt_processor *)iter; >>> + ->>> + if (iter->type == ACPI_PPTT_TYPE_PROCESSOR && ->>> + iter_node->parent == target_node) { ->>> + leaf = false; ->>> + acpi_pptt_min_physid_from_cpu_node(table_hdr, iter_node, ->>> + min_physid); ->>> + } +>>> +??????? if (iter->type == ACPI_PPTT_TYPE_PROCESSOR && +>>> +??????????? iter_node->parent == target_node) { +>>> +??????????? leaf = false; +>>> +??????????? acpi_pptt_min_physid_from_cpu_node(table_hdr, iter_node, +>>> +?????????????????????????????? min_physid); +>>> +??????? } >>> + ->>> + if (iter->length == 0) ->>> + return; ->>> + iter = ACPI_ADD_PTR(struct acpi_subtable_header, iter, ->>> + iter->length); ->>> + } +>>> +??????? if (iter->length == 0) +>>> +??????????? return; +>>> +??????? iter = ACPI_ADD_PTR(struct acpi_subtable_header, iter, +>>> +??????????????????? iter->length); +>>> +??? } >>> + ->>> + if (leaf && cpu_node->flags & ACPI_PPTT_ACPI_PROCESSOR_ID_VALID) { ->>> + acpi_processor_id = cpu_node->acpi_processor_id; ->>> + cpu_node_phys_id = acpi_id_to_phys_cpuid(acpi_processor_id); ->>> + *min_physid = min(*min_physid, cpu_node_phys_id); ->>> + } +>>> +??? if (leaf && cpu_node->flags & ACPI_PPTT_ACPI_PROCESSOR_ID_VALID) { +>>> +??????? acpi_processor_id = cpu_node->acpi_processor_id; +>>> +??????? cpu_node_phys_id = acpi_id_to_phys_cpuid(acpi_processor_id); +>>> +??????? *min_physid = min(*min_physid, cpu_node_phys_id); +>>> +??? } >>> +} >> >> Tho me, is seems a reliable way to acquire a stable id. @@ -109,30 +109,30 @@ set the flag for leaf nodes. > >>> +static void acpi_pptt_label_cache(struct cacheinfo *this_leaf) >>> +{ ->>> + acpi_status status; ->>> + struct acpi_table_header *table; ->>> + struct acpi_pptt_processor *cpu_node; ->>> + phys_cpuid_t min_physid = PHYS_CPUID_INVALID; +>>> +??? acpi_status status; +>>> +??? struct acpi_table_header *table; +>>> +??? struct acpi_pptt_processor *cpu_node; +>>> +??? phys_cpuid_t min_physid = PHYS_CPUID_INVALID; >>> + ->>> + /* Affinity based IDs for non-unified caches would not be unique */ ->>> + if (this_leaf->type != CACHE_TYPE_UNIFIED) ->>> + return; +>>> +??? /* Affinity based IDs for non-unified caches would not be unique */ +>>> +??? if (this_leaf->type != CACHE_TYPE_UNIFIED) +>>> +??????? return; >>> + ->>> + if (!this_leaf->fw_token) ->>> + return; ->>> + cpu_node = this_leaf->fw_token; +>>> +??? if (!this_leaf->fw_token) +>>> +??????? return; +>>> +??? cpu_node = this_leaf->fw_token; >>> + ->>> + status = acpi_get_table(ACPI_SIG_PPTT, 0, &table); ->>> + if (ACPI_FAILURE(status)) ->>> + return; +>>> +??? status = acpi_get_table(ACPI_SIG_PPTT, 0, &table); +>>> +??? if (ACPI_FAILURE(status)) +>>> +??????? return; >>> + ->>> + acpi_pptt_min_physid_from_cpu_node(table, cpu_node, &min_physid); ->>> + acpi_put_table(table); +>>> +??? acpi_pptt_min_physid_from_cpu_node(table, cpu_node, &min_physid); +>>> +??? acpi_put_table(table); >>> + ->>> + WARN_ON_ONCE(min_physid == PHYS_CPUID_INVALID); +>>> +??? WARN_ON_ONCE(min_physid == PHYS_CPUID_INVALID); >>> + ->>> + this_leaf->id = ARCH_PHYSID_TO_U32(min_physid); ->>> + this_leaf->attributes |= CACHE_ID; +>>> +??? this_leaf->id = ARCH_PHYSID_TO_U32(min_physid); +>>> +??? this_leaf->attributes |= CACHE_ID; >>> +} >> >> To me its seems a little odd to be acpi_get_table()ing inside the PPTT parse @@ -155,8 +155,3 @@ Qualcomm Datacenter Technologies as an affiliate of Qualcomm Technologies, Inc. Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project. - -_______________________________________________ -linux-arm-kernel mailing list -linux-arm-kernel@lists.infradead.org -http://lists.infradead.org/mailman/listinfo/linux-arm-kernel diff --git a/a/content_digest b/N1/content_digest index 50b3e78..c7cfaad 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -2,20 +2,10 @@ "ref\020181005150235.13846-3-james.morse@arm.com\0" "ref\0a68abfd2-1e28-d9e7-919a-8b3133db4d20@arm.com\0" "ref\010e15b8d-c0c2-b73a-de31-f87ae0d86469@arm.com\0" - "From\0Jeffrey Hugo <jhugo@codeaurora.org>\0" - "Subject\0Re: [RFC PATCH 2/2] ACPI / PPTT: cacheinfo: Label caches based on fw_token\0" + "From\0jhugo@codeaurora.org (Jeffrey Hugo)\0" + "Subject\0[RFC PATCH 2/2] ACPI / PPTT: cacheinfo: Label caches based on fw_token\0" "Date\0Tue, 9 Oct 2018 12:34:51 -0600\0" - "To\0James Morse <james.morse@arm.com>" - Jeremy Linton <jeremy.linton@arm.com> - " linux-acpi@vger.kernel.org\0" - "Cc\0Vijaya Kumar K <vkilari@codeaurora.org>" - Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> - Sudeep Holla <sudeep.holla@arm.com> - Tomasz Nowicki <Tomasz.Nowicki@cavium.com> - Richard Ruigrok <rruigrok@qti.qualcomm.com> - Hanjun Guo <guohanjun@huawei.com> - Xiongfeng Wang <wangxiongfeng2@huawei.com> - " linux-arm-kernel@lists.infradead.org\0" + "To\0linux-arm-kernel@lists.infradead.org\0" "\00:1\0" "b\0" "On 10/9/2018 11:58 AM, James Morse wrote:\n" @@ -47,56 +37,56 @@ ">>> +++ b/drivers/acpi/pptt.c\n" ">>> @@ -341,6 +341,84 @@ static struct acpi_pptt_cache\n" ">>> *acpi_find_cache_node(struct acpi_table_header *ta\n" - ">>> \302\240 /* total number of attributes checked by the properties code */\n" - ">>> \302\240 #define PPTT_CHECKED_ATTRIBUTES 4\n" - ">>> \302\240 +/**\n" + ">>> ? /* total number of attributes checked by the properties code */\n" + ">>> ? #define PPTT_CHECKED_ATTRIBUTES 4\n" + ">>> ? +/**\n" ">>> + * acpi_pptt_min_physid_from_cpu_node() - Recursivly find @min_physid for all\n" ">>> + * leaf CPUs below @cpu_node.\n" - ">>> + * @table_hdr:\302\240\302\240\302\240 Pointer to the head of the PPTT table\n" - ">>> + * @cpu_node:\302\240\302\240\302\240 The point in the toplogy to start the walk\n" - ">>> + * @min_physid:\302\240\302\240\302\240 The min_physid to update with leaf CPUs.\n" + ">>> + * @table_hdr:??? Pointer to the head of the PPTT table\n" + ">>> + * @cpu_node:??? The point in the toplogy to start the walk\n" + ">>> + * @min_physid:??? The min_physid to update with leaf CPUs.\n" ">>> + */\n" ">>> +void acpi_pptt_min_physid_from_cpu_node(struct acpi_table_header *table_hdr,\n" - ">>> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 struct acpi_pptt_processor *cpu_node,\n" - ">>> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 phys_cpuid_t *min_physid)\n" + ">>> +??????????????????? struct acpi_pptt_processor *cpu_node,\n" + ">>> +??????????????????? phys_cpuid_t *min_physid)\n" ">>> +{\n" - ">>> +\302\240\302\240\302\240 bool leaf = true;\n" - ">>> +\302\240\302\240\302\240 u32 acpi_processor_id;\n" - ">>> +\302\240\302\240\302\240 phys_cpuid_t cpu_node_phys_id;\n" - ">>> +\302\240\302\240\302\240 struct acpi_subtable_header *iter;\n" - ">>> +\302\240\302\240\302\240 struct acpi_pptt_processor *iter_node;\n" - ">>> +\302\240\302\240\302\240 u32 target_node = ACPI_PTR_DIFF(cpu_node, table_hdr);\n" - ">>> +\302\240\302\240\302\240 u32 proc_sz = sizeof(struct acpi_pptt_processor *);\n" - ">>> +\302\240\302\240\302\240 unsigned long table_end = (unsigned long)table_hdr + table_hdr->length;\n" + ">>> +??? bool leaf = true;\n" + ">>> +??? u32 acpi_processor_id;\n" + ">>> +??? phys_cpuid_t cpu_node_phys_id;\n" + ">>> +??? struct acpi_subtable_header *iter;\n" + ">>> +??? struct acpi_pptt_processor *iter_node;\n" + ">>> +??? u32 target_node = ACPI_PTR_DIFF(cpu_node, table_hdr);\n" + ">>> +??? u32 proc_sz = sizeof(struct acpi_pptt_processor *);\n" + ">>> +??? unsigned long table_end = (unsigned long)table_hdr + table_hdr->length;\n" ">>> +\n" - ">>> +\302\240\302\240\302\240 /*\n" - ">>> +\302\240\302\240\302\240\302\240 * Walk the PPTT, looking for nodes that reference cpu_node\n" - ">>> +\302\240\302\240\302\240\302\240 * as parent.\n" - ">>> +\302\240\302\240\302\240\302\240 */\n" - ">>> +\302\240\302\240\302\240 iter = ACPI_ADD_PTR(struct acpi_subtable_header, table_hdr,\n" - ">>> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 sizeof(struct acpi_table_pptt));\n" + ">>> +??? /*\n" + ">>> +???? * Walk the PPTT, looking for nodes that reference cpu_node\n" + ">>> +???? * as parent.\n" + ">>> +???? */\n" + ">>> +??? iter = ACPI_ADD_PTR(struct acpi_subtable_header, table_hdr,\n" + ">>> +???????????????? sizeof(struct acpi_table_pptt));\n" ">>> +\n" - ">>> +\302\240\302\240\302\240 while ((unsigned long)iter + proc_sz < table_end) {\n" - ">>> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 iter_node = (struct acpi_pptt_processor *)iter;\n" + ">>> +??? while ((unsigned long)iter + proc_sz < table_end) {\n" + ">>> +??????? iter_node = (struct acpi_pptt_processor *)iter;\n" ">>> +\n" - ">>> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 if (iter->type == ACPI_PPTT_TYPE_PROCESSOR &&\n" - ">>> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 iter_node->parent == target_node) {\n" - ">>> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 leaf = false;\n" - ">>> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 acpi_pptt_min_physid_from_cpu_node(table_hdr, iter_node,\n" - ">>> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 min_physid);\n" - ">>> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 }\n" + ">>> +??????? if (iter->type == ACPI_PPTT_TYPE_PROCESSOR &&\n" + ">>> +??????????? iter_node->parent == target_node) {\n" + ">>> +??????????? leaf = false;\n" + ">>> +??????????? acpi_pptt_min_physid_from_cpu_node(table_hdr, iter_node,\n" + ">>> +?????????????????????????????? min_physid);\n" + ">>> +??????? }\n" ">>> +\n" - ">>> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 if (iter->length == 0)\n" - ">>> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 return;\n" - ">>> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 iter = ACPI_ADD_PTR(struct acpi_subtable_header, iter,\n" - ">>> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 iter->length);\n" - ">>> +\302\240\302\240\302\240 }\n" + ">>> +??????? if (iter->length == 0)\n" + ">>> +??????????? return;\n" + ">>> +??????? iter = ACPI_ADD_PTR(struct acpi_subtable_header, iter,\n" + ">>> +??????????????????? iter->length);\n" + ">>> +??? }\n" ">>> +\n" - ">>> +\302\240\302\240\302\240 if (leaf && cpu_node->flags & ACPI_PPTT_ACPI_PROCESSOR_ID_VALID) {\n" - ">>> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 acpi_processor_id = cpu_node->acpi_processor_id;\n" - ">>> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 cpu_node_phys_id = acpi_id_to_phys_cpuid(acpi_processor_id);\n" - ">>> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 *min_physid = min(*min_physid, cpu_node_phys_id);\n" - ">>> +\302\240\302\240\302\240 }\n" + ">>> +??? if (leaf && cpu_node->flags & ACPI_PPTT_ACPI_PROCESSOR_ID_VALID) {\n" + ">>> +??????? acpi_processor_id = cpu_node->acpi_processor_id;\n" + ">>> +??????? cpu_node_phys_id = acpi_id_to_phys_cpuid(acpi_processor_id);\n" + ">>> +??????? *min_physid = min(*min_physid, cpu_node_phys_id);\n" + ">>> +??? }\n" ">>> +}\n" ">>\n" ">> Tho me, is seems a reliable way to acquire a stable id.\n" @@ -129,30 +119,30 @@ "> \n" ">>> +static void acpi_pptt_label_cache(struct cacheinfo *this_leaf)\n" ">>> +{\n" - ">>> +\302\240\302\240\302\240 acpi_status status;\n" - ">>> +\302\240\302\240\302\240 struct acpi_table_header *table;\n" - ">>> +\302\240\302\240\302\240 struct acpi_pptt_processor *cpu_node;\n" - ">>> +\302\240\302\240\302\240 phys_cpuid_t min_physid = PHYS_CPUID_INVALID;\n" + ">>> +??? acpi_status status;\n" + ">>> +??? struct acpi_table_header *table;\n" + ">>> +??? struct acpi_pptt_processor *cpu_node;\n" + ">>> +??? phys_cpuid_t min_physid = PHYS_CPUID_INVALID;\n" ">>> +\n" - ">>> +\302\240\302\240\302\240 /* Affinity based IDs for non-unified caches would not be unique */\n" - ">>> +\302\240\302\240\302\240 if (this_leaf->type != CACHE_TYPE_UNIFIED)\n" - ">>> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 return;\n" + ">>> +??? /* Affinity based IDs for non-unified caches would not be unique */\n" + ">>> +??? if (this_leaf->type != CACHE_TYPE_UNIFIED)\n" + ">>> +??????? return;\n" ">>> +\n" - ">>> +\302\240\302\240\302\240 if (!this_leaf->fw_token)\n" - ">>> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 return;\n" - ">>> +\302\240\302\240\302\240 cpu_node = this_leaf->fw_token;\n" + ">>> +??? if (!this_leaf->fw_token)\n" + ">>> +??????? return;\n" + ">>> +??? cpu_node = this_leaf->fw_token;\n" ">>> +\n" - ">>> +\302\240\302\240\302\240 status = acpi_get_table(ACPI_SIG_PPTT, 0, &table);\n" - ">>> +\302\240\302\240\302\240 if (ACPI_FAILURE(status))\n" - ">>> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 return;\n" + ">>> +??? status = acpi_get_table(ACPI_SIG_PPTT, 0, &table);\n" + ">>> +??? if (ACPI_FAILURE(status))\n" + ">>> +??????? return;\n" ">>> +\n" - ">>> +\302\240\302\240\302\240 acpi_pptt_min_physid_from_cpu_node(table, cpu_node, &min_physid);\n" - ">>> +\302\240\302\240\302\240 acpi_put_table(table);\n" + ">>> +??? acpi_pptt_min_physid_from_cpu_node(table, cpu_node, &min_physid);\n" + ">>> +??? acpi_put_table(table);\n" ">>> +\n" - ">>> +\302\240\302\240\302\240 WARN_ON_ONCE(min_physid == PHYS_CPUID_INVALID);\n" + ">>> +??? WARN_ON_ONCE(min_physid == PHYS_CPUID_INVALID);\n" ">>> +\n" - ">>> +\302\240\302\240\302\240 this_leaf->id = ARCH_PHYSID_TO_U32(min_physid);\n" - ">>> +\302\240\302\240\302\240 this_leaf->attributes |= CACHE_ID;\n" + ">>> +??? this_leaf->id = ARCH_PHYSID_TO_U32(min_physid);\n" + ">>> +??? this_leaf->attributes |= CACHE_ID;\n" ">>> +}\n" ">>\n" ">> To me its seems a little odd to be acpi_get_table()ing inside the PPTT parse\n" @@ -174,11 +164,6 @@ "Qualcomm Datacenter Technologies as an affiliate of Qualcomm \n" "Technologies, Inc.\n" "Qualcomm Technologies, Inc. is a member of the\n" - "Code Aurora Forum, a Linux Foundation Collaborative Project.\n" - "\n" - "_______________________________________________\n" - "linux-arm-kernel mailing list\n" - "linux-arm-kernel@lists.infradead.org\n" - http://lists.infradead.org/mailman/listinfo/linux-arm-kernel + Code Aurora Forum, a Linux Foundation Collaborative Project. -9934ab63a738a6cb04e8d9eae73785982ebe459e50890f9240d3f490fd5373f8 +2a51883267081ace258600f3bf0f5f3fa40ffcfb99e7051f5d0840c0e1c82a26
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.