From: Greg Kroah-Hartman Date: Mon, 16 Mar 2020 11:01:52 +0000 (+0100) Subject: 5.4-stable patches X-Git-Tag: v4.19.111~44 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2e787621396b9e87f9791a99014c2ef55d4e1897;p=thirdparty%2Fkernel%2Fstable-queue.git 5.4-stable patches 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 --- diff --git a/queue-5.4/drm-amd-display-remove-duplicated-assignment-to-grph_obj_type.patch b/queue-5.4/drm-amd-display-remove-duplicated-assignment-to-grph_obj_type.patch new file mode 100644 index 00000000000..16a619a8eb4 --- /dev/null +++ b/queue-5.4/drm-amd-display-remove-duplicated-assignment-to-grph_obj_type.patch @@ -0,0 +1,34 @@ +From d785476c608c621b345dd9396e8b21e90375cb0e Mon Sep 17 00:00:00 2001 +From: Colin Ian King +Date: Fri, 8 Nov 2019 14:45:27 +0000 +Subject: drm/amd/display: remove duplicated assignment to grph_obj_type + +From: Colin Ian King + +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 +Signed-off-by: Alex Deucher +Cc: +Signed-off-by: Greg Kroah-Hartman + +--- + 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; + diff --git a/queue-5.4/series b/queue-5.4/series index 4c6288adba1..bc930811116 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -65,3 +65,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.4/workqueue-don-t-use-wq_select_unbound_cpu-for-bound-works.patch b/queue-5.4/workqueue-don-t-use-wq_select_unbound_cpu-for-bound-works.patch new file mode 100644 index 00000000000..694288731b2 --- /dev/null +++ b/queue-5.4/workqueue-don-t-use-wq_select_unbound_cpu-for-bound-works.patch @@ -0,0 +1,61 @@ +From aa202f1f56960c60e7befaa0f49c72b8fa11b0a8 Mon Sep 17 00:00:00 2001 +From: Hillf Danton +Date: Fri, 24 Jan 2020 20:14:45 -0500 +Subject: workqueue: don't use wq_select_unbound_cpu() for bound works + +From: Hillf Danton + +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 +[dj: massage changelog] +Signed-off-by: Daniel Jordan +Cc: Tejun Heo +Cc: Lai Jiangshan +Cc: linux-kernel@vger.kernel.org +Signed-off-by: Tejun Heo +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/workqueue.c | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +--- a/kernel/workqueue.c ++++ b/kernel/workqueue.c +@@ -1417,14 +1417,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