]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.5-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 16 Mar 2020 11:02:12 +0000 (12:02 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 16 Mar 2020 11:02:12 +0000 (12:02 +0100)
added patches:
drm-amd-display-remove-duplicated-assignment-to-grph_obj_type.patch
workqueue-don-t-use-wq_select_unbound_cpu-for-bound-works.patch

queue-5.5/drm-amd-display-remove-duplicated-assignment-to-grph_obj_type.patch [new file with mode: 0644]
queue-5.5/series
queue-5.5/workqueue-don-t-use-wq_select_unbound_cpu-for-bound-works.patch [new file with mode: 0644]

diff --git a/queue-5.5/drm-amd-display-remove-duplicated-assignment-to-grph_obj_type.patch b/queue-5.5/drm-amd-display-remove-duplicated-assignment-to-grph_obj_type.patch
new file mode 100644 (file)
index 0000000..16a619a
--- /dev/null
@@ -0,0 +1,34 @@
+From d785476c608c621b345dd9396e8b21e90375cb0e Mon Sep 17 00:00:00 2001
+From: Colin Ian King <colin.king@canonical.com>
+Date: Fri, 8 Nov 2019 14:45:27 +0000
+Subject: drm/amd/display: remove duplicated assignment to grph_obj_type
+
+From: Colin Ian King <colin.king@canonical.com>
+
+commit d785476c608c621b345dd9396e8b21e90375cb0e upstream.
+
+Variable grph_obj_type is being assigned twice, one of these is
+redundant so remove it.
+
+Addresses-Coverity: ("Evaluation order violation")
+Signed-off-by: Colin Ian King <colin.king@canonical.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Cc: <nobuhiro1.iwamatsu@toshiba.co.jp>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
+@@ -365,8 +365,7 @@ bool amdgpu_atombios_get_connector_info_
+                       router.ddc_valid = false;
+                       router.cd_valid = false;
+                       for (j = 0; j < ((le16_to_cpu(path->usSize) - 8) / 2); j++) {
+-                              uint8_t grph_obj_type=
+-                              grph_obj_type =
++                              uint8_t grph_obj_type =
+                                   (le16_to_cpu(path->usGraphicObjIds[j]) &
+                                    OBJECT_TYPE_MASK) >> OBJECT_TYPE_SHIFT;
index 7bb9dcf227027b8abfb4b0dfa9f8f4d0f3ba28e3..e77c4b2564da08a8606540a592395ace2ad03983 100644 (file)
@@ -80,3 +80,5 @@ netfilter-nf_conntrack-ct_cpu_seq_next-should-increase-position-index.patch
 netfilter-synproxy-synproxy_cpu_seq_next-should-increase-position-index.patch
 netfilter-xt_recent-recent_seq_next-should-increase-position-index.patch
 netfilter-x_tables-xt_mttg_seq_next-should-increase-position-index.patch
+workqueue-don-t-use-wq_select_unbound_cpu-for-bound-works.patch
+drm-amd-display-remove-duplicated-assignment-to-grph_obj_type.patch
diff --git a/queue-5.5/workqueue-don-t-use-wq_select_unbound_cpu-for-bound-works.patch b/queue-5.5/workqueue-don-t-use-wq_select_unbound_cpu-for-bound-works.patch
new file mode 100644 (file)
index 0000000..4314825
--- /dev/null
@@ -0,0 +1,61 @@
+From aa202f1f56960c60e7befaa0f49c72b8fa11b0a8 Mon Sep 17 00:00:00 2001
+From: Hillf Danton <hdanton@sina.com>
+Date: Fri, 24 Jan 2020 20:14:45 -0500
+Subject: workqueue: don't use wq_select_unbound_cpu() for bound works
+
+From: Hillf Danton <hdanton@sina.com>
+
+commit aa202f1f56960c60e7befaa0f49c72b8fa11b0a8 upstream.
+
+wq_select_unbound_cpu() is designed for unbound workqueues only, but
+it's wrongly called when using a bound workqueue too.
+
+Fixing this ensures work queued to a bound workqueue with
+cpu=WORK_CPU_UNBOUND always runs on the local CPU.
+
+Before, that would happen only if wq_unbound_cpumask happened to include
+it (likely almost always the case), or was empty, or we got lucky with
+forced round-robin placement.  So restricting
+/sys/devices/virtual/workqueue/cpumask to a small subset of a machine's
+CPUs would cause some bound work items to run unexpectedly there.
+
+Fixes: ef557180447f ("workqueue: schedule WORK_CPU_UNBOUND work on wq_unbound_cpumask CPUs")
+Cc: stable@vger.kernel.org # v4.5+
+Signed-off-by: Hillf Danton <hdanton@sina.com>
+[dj: massage changelog]
+Signed-off-by: Daniel Jordan <daniel.m.jordan@oracle.com>
+Cc: Tejun Heo <tj@kernel.org>
+Cc: Lai Jiangshan <jiangshanlai@gmail.com>
+Cc: linux-kernel@vger.kernel.org
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ kernel/workqueue.c |   14 ++++++++------
+ 1 file changed, 8 insertions(+), 6 deletions(-)
+
+--- a/kernel/workqueue.c
++++ b/kernel/workqueue.c
+@@ -1411,14 +1411,16 @@ static void __queue_work(int cpu, struct
+               return;
+       rcu_read_lock();
+ retry:
+-      if (req_cpu == WORK_CPU_UNBOUND)
+-              cpu = wq_select_unbound_cpu(raw_smp_processor_id());
+-
+       /* pwq which will be used unless @work is executing elsewhere */
+-      if (!(wq->flags & WQ_UNBOUND))
+-              pwq = per_cpu_ptr(wq->cpu_pwqs, cpu);
+-      else
++      if (wq->flags & WQ_UNBOUND) {
++              if (req_cpu == WORK_CPU_UNBOUND)
++                      cpu = wq_select_unbound_cpu(raw_smp_processor_id());
+               pwq = unbound_pwq_by_node(wq, cpu_to_node(cpu));
++      } else {
++              if (req_cpu == WORK_CPU_UNBOUND)
++                      cpu = raw_smp_processor_id();
++              pwq = per_cpu_ptr(wq->cpu_pwqs, cpu);
++      }
+       /*
+        * If @work was previously on a different pool, it might still be