]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
fixes for 4.19
authorSasha Levin <sashal@kernel.org>
Tue, 15 Oct 2019 22:05:51 +0000 (18:05 -0400)
committerSasha Levin <sashal@kernel.org>
Tue, 15 Oct 2019 22:05:51 +0000 (18:05 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.19/acpi-pptt-add-support-for-acpi-6.3-thread-flag.patch [new file with mode: 0644]
queue-4.19/acpica-acpi-6.3-pptt-add-additional-fields-in-proces.patch [new file with mode: 0644]
queue-4.19/arm64-topology-use-pptt-to-determine-if-pe-is-a-thre.patch [new file with mode: 0644]
queue-4.19/series

diff --git a/queue-4.19/acpi-pptt-add-support-for-acpi-6.3-thread-flag.patch b/queue-4.19/acpi-pptt-add-support-for-acpi-6.3-thread-flag.patch
new file mode 100644 (file)
index 0000000..55d78e9
--- /dev/null
@@ -0,0 +1,119 @@
+From 37f98c0e2efb2e788ad42d8450f8f47f20d6ad9b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 14 Oct 2019 17:56:25 +0800
+Subject: ACPI/PPTT: Add support for ACPI 6.3 thread flag
+
+From: Jeremy Linton <jeremy.linton@arm.com>
+
+Commit bbd1b70639f785a970d998f35155c713f975e3ac upstream.
+
+ACPI 6.3 adds a flag to the CPU node to indicate whether
+the given PE is a thread. Add a function to return that
+information for a given linux logical CPU.
+
+Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
+Reviewed-by: Sudeep Holla <sudeep.holla@arm.com>
+Reviewed-by: Robert Richter <rrichter@marvell.com>
+Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Will Deacon <will@kernel.org>
+[jpg: backport for 4.19, replace acpi_pptt_warn_missing()]
+Signed-off-by: John Garry <john.garry@huawei.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/acpi/pptt.c  | 52 ++++++++++++++++++++++++++++++++++++++++++++
+ include/linux/acpi.h |  5 +++++
+ 2 files changed, 57 insertions(+)
+
+diff --git a/drivers/acpi/pptt.c b/drivers/acpi/pptt.c
+index da031b1df6f5c..9dbf86a0c8277 100644
+--- a/drivers/acpi/pptt.c
++++ b/drivers/acpi/pptt.c
+@@ -509,6 +509,44 @@ static int find_acpi_cpu_topology_tag(unsigned int cpu, int level, int flag)
+       return retval;
+ }
++/**
++ * check_acpi_cpu_flag() - Determine if CPU node has a flag set
++ * @cpu: Kernel logical CPU number
++ * @rev: The minimum PPTT revision defining the flag
++ * @flag: The flag itself
++ *
++ * Check the node representing a CPU for a given flag.
++ *
++ * Return: -ENOENT if the PPTT doesn't exist, the CPU cannot be found or
++ *       the table revision isn't new enough.
++ *       1, any passed flag set
++ *       0, flag unset
++ */
++static int check_acpi_cpu_flag(unsigned int cpu, int rev, u32 flag)
++{
++      struct acpi_table_header *table;
++      acpi_status status;
++      u32 acpi_cpu_id = get_acpi_id_for_cpu(cpu);
++      struct acpi_pptt_processor *cpu_node = NULL;
++      int ret = -ENOENT;
++
++      status = acpi_get_table(ACPI_SIG_PPTT, 0, &table);
++      if (ACPI_FAILURE(status)) {
++              pr_warn_once("No PPTT table found, cpu topology may be inaccurate\n");
++              return ret;
++      }
++
++      if (table->revision >= rev)
++              cpu_node = acpi_find_processor_node(table, acpi_cpu_id);
++
++      if (cpu_node)
++              ret = (cpu_node->flags & flag) != 0;
++
++      acpi_put_table(table);
++
++      return ret;
++}
++
+ /**
+  * acpi_find_last_cache_level() - Determines the number of cache levels for a PE
+  * @cpu: Kernel logical cpu number
+@@ -573,6 +611,20 @@ int cache_setup_acpi(unsigned int cpu)
+       return status;
+ }
++/**
++ * acpi_pptt_cpu_is_thread() - Determine if CPU is a thread
++ * @cpu: Kernel logical CPU number
++ *
++ * Return: 1, a thread
++ *         0, not a thread
++ *         -ENOENT ,if the PPTT doesn't exist, the CPU cannot be found or
++ *         the table revision isn't new enough.
++ */
++int acpi_pptt_cpu_is_thread(unsigned int cpu)
++{
++      return check_acpi_cpu_flag(cpu, 2, ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD);
++}
++
+ /**
+  * find_acpi_cpu_topology() - Determine a unique topology value for a given cpu
+  * @cpu: Kernel logical cpu number
+diff --git a/include/linux/acpi.h b/include/linux/acpi.h
+index b4d23b3a2ef2d..59a416dfcaaa2 100644
+--- a/include/linux/acpi.h
++++ b/include/linux/acpi.h
+@@ -1291,10 +1291,15 @@ static inline int lpit_read_residency_count_address(u64 *address)
+ #endif
+ #ifdef CONFIG_ACPI_PPTT
++int acpi_pptt_cpu_is_thread(unsigned int cpu);
+ int find_acpi_cpu_topology(unsigned int cpu, int level);
+ int find_acpi_cpu_topology_package(unsigned int cpu);
+ int find_acpi_cpu_cache_topology(unsigned int cpu, int level);
+ #else
++static inline int acpi_pptt_cpu_is_thread(unsigned int cpu)
++{
++      return -EINVAL;
++}
+ static inline int find_acpi_cpu_topology(unsigned int cpu, int level)
+ {
+       return -EINVAL;
+-- 
+2.20.1
+
diff --git a/queue-4.19/acpica-acpi-6.3-pptt-add-additional-fields-in-proces.patch b/queue-4.19/acpica-acpi-6.3-pptt-add-additional-fields-in-proces.patch
new file mode 100644 (file)
index 0000000..30f0f4a
--- /dev/null
@@ -0,0 +1,43 @@
+From 43ca0aa619d7031c85ae306e7fc9d8c5f8803734 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 14 Oct 2019 17:56:24 +0800
+Subject: ACPICA: ACPI 6.3: PPTT add additional fields in Processor Structure
+ Flags
+
+From: Erik Schmauss <erik.schmauss@intel.com>
+
+Commit b5eab512e7cffb2bb37c4b342b5594e9e75fd486 upstream.
+
+ACPICA commit c736ea34add19a3a07e0e398711847cd6b95affd
+
+Link: https://github.com/acpica/acpica/commit/c736ea34
+Signed-off-by: Erik Schmauss <erik.schmauss@intel.com>
+Signed-off-by: Bob Moore <robert.moore@intel.com>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: John Garry <john.garry@huawei.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/acpi/actbl2.h | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/include/acpi/actbl2.h b/include/acpi/actbl2.h
+index c50ef7e6b9425..1d4ef0621174d 100644
+--- a/include/acpi/actbl2.h
++++ b/include/acpi/actbl2.h
+@@ -1472,8 +1472,11 @@ struct acpi_pptt_processor {
+ /* Flags */
+-#define ACPI_PPTT_PHYSICAL_PACKAGE          (1)       /* Physical package */
+-#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID   (2)       /* ACPI Processor ID valid */
++#define ACPI_PPTT_PHYSICAL_PACKAGE          (1)
++#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID   (1<<1)
++#define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD  (1<<2)    /* ACPI 6.3 */
++#define ACPI_PPTT_ACPI_LEAF_NODE            (1<<3)    /* ACPI 6.3 */
++#define ACPI_PPTT_ACPI_IDENTICAL            (1<<4)    /* ACPI 6.3 */
+ /* 1: Cache Type Structure */
+-- 
+2.20.1
+
diff --git a/queue-4.19/arm64-topology-use-pptt-to-determine-if-pe-is-a-thre.patch b/queue-4.19/arm64-topology-use-pptt-to-determine-if-pe-is-a-thre.patch
new file mode 100644 (file)
index 0000000..01add4c
--- /dev/null
@@ -0,0 +1,73 @@
+From db74fabd29d4764953e5b13daf704f1b2fa38f25 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 14 Oct 2019 17:56:26 +0800
+Subject: arm64: topology: Use PPTT to determine if PE is a thread
+
+From: Jeremy Linton <jeremy.linton@arm.com>
+
+Commit 98dc19902a0b2e5348e43d6a2c39a0a7d0fc639e upstream.
+
+ACPI 6.3 adds a thread flag to represent if a CPU/PE is
+actually a thread. Given that the MPIDR_MT bit may not
+represent this information consistently on homogeneous machines
+we should prefer the PPTT flag if its available.
+
+Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
+Reviewed-by: Sudeep Holla <sudeep.holla@arm.com>
+Reviewed-by: Robert Richter <rrichter@marvell.com>
+[will: made acpi_cpu_is_threaded() return 'bool']
+Signed-off-by: Will Deacon <will@kernel.org>
+Signed-off-by: John Garry <john.garry@huawei.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm64/kernel/topology.c | 19 +++++++++++++++----
+ 1 file changed, 15 insertions(+), 4 deletions(-)
+
+diff --git a/arch/arm64/kernel/topology.c b/arch/arm64/kernel/topology.c
+index 0825c4a856e33..6106c49f84bc8 100644
+--- a/arch/arm64/kernel/topology.c
++++ b/arch/arm64/kernel/topology.c
+@@ -340,17 +340,28 @@ void remove_cpu_topology(unsigned int cpu)
+ }
+ #ifdef CONFIG_ACPI
++static bool __init acpi_cpu_is_threaded(int cpu)
++{
++      int is_threaded = acpi_pptt_cpu_is_thread(cpu);
++
++      /*
++       * if the PPTT doesn't have thread information, assume a homogeneous
++       * machine and return the current CPU's thread state.
++       */
++      if (is_threaded < 0)
++              is_threaded = read_cpuid_mpidr() & MPIDR_MT_BITMASK;
++
++      return !!is_threaded;
++}
++
+ /*
+  * Propagate the topology information of the processor_topology_node tree to the
+  * cpu_topology array.
+  */
+ static int __init parse_acpi_topology(void)
+ {
+-      bool is_threaded;
+       int cpu, topology_id;
+-      is_threaded = read_cpuid_mpidr() & MPIDR_MT_BITMASK;
+-
+       for_each_possible_cpu(cpu) {
+               int i, cache_id;
+@@ -358,7 +369,7 @@ static int __init parse_acpi_topology(void)
+               if (topology_id < 0)
+                       return topology_id;
+-              if (is_threaded) {
++              if (acpi_cpu_is_threaded(cpu)) {
+                       cpu_topology[cpu].thread_id = topology_id;
+                       topology_id = find_acpi_cpu_topology(cpu, 1);
+                       cpu_topology[cpu].core_id   = topology_id;
+-- 
+2.20.1
+
index 2ce7c4309d3a60c8053aed984b13530b2fef7241..bae37ca2c7ed79609249c738414ef217f8096071 100644 (file)
@@ -60,3 +60,6 @@ gpiolib-don-t-clear-flag_is_out-when-emulating-open-.patch
 iio-adc-stm32-adc-move-registers-definitions.patch
 iio-adc-stm32-adc-fix-a-race-when-using-several-adcs.patch
 cifs-use-cifsinodeinfo-open_file_lock-while-iteratin.patch
+acpica-acpi-6.3-pptt-add-additional-fields-in-proces.patch
+acpi-pptt-add-support-for-acpi-6.3-thread-flag.patch
+arm64-topology-use-pptt-to-determine-if-pe-is-a-thre.patch