From: Greg Kroah-Hartman Date: Mon, 18 Apr 2022 09:56:34 +0000 (+0200) Subject: 4.9-stable patches X-Git-Tag: v4.9.311~19 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=36564d30e4eadfd93da3ab816378e8471d087d39;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: i2c-pasemi-wait-for-write-xfers-to-finish.patch smp-fix-offline-cpu-check-in-flush_smp_call_function_queue.patch --- diff --git a/queue-4.9/i2c-pasemi-wait-for-write-xfers-to-finish.patch b/queue-4.9/i2c-pasemi-wait-for-write-xfers-to-finish.patch new file mode 100644 index 00000000000..8f4ae5fd1f7 --- /dev/null +++ b/queue-4.9/i2c-pasemi-wait-for-write-xfers-to-finish.patch @@ -0,0 +1,53 @@ +From bd8963e602c77adc76dbbbfc3417c3cf14fed76b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Martin=20Povi=C5=A1er?= +Date: Tue, 29 Mar 2022 20:38:17 +0200 +Subject: i2c: pasemi: Wait for write xfers to finish +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Martin Povišer + +commit bd8963e602c77adc76dbbbfc3417c3cf14fed76b upstream. + +Wait for completion of write transfers before returning from the driver. +At first sight it may seem advantageous to leave write transfers queued +for the controller to carry out on its own time, but there's a couple of +issues with it: + + * Driver doesn't check for FIFO space. + + * The queued writes can complete while the driver is in its I2C read + transfer path which means it will get confused by the raising of + XEN (the 'transaction ended' signal). This can cause a spurious + ENODATA error due to premature reading of the MRXFIFO register. + +Adding the wait fixes some unreliability issues with the driver. There's +some efficiency cost to it (especially with pasemi_smb_waitready doing +its polling), but that will be alleviated once the driver receives +interrupt support. + +Fixes: beb58aa39e6e ("i2c: PA Semi SMBus driver") +Signed-off-by: Martin Povišer +Reviewed-by: Sven Peter +Signed-off-by: Wolfram Sang +Signed-off-by: Greg Kroah-Hartman +--- + drivers/i2c/busses/i2c-pasemi.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- a/drivers/i2c/busses/i2c-pasemi.c ++++ b/drivers/i2c/busses/i2c-pasemi.c +@@ -145,6 +145,12 @@ static int pasemi_i2c_xfer_msg(struct i2 + + TXFIFO_WR(smbus, msg->buf[msg->len-1] | + (stop ? MTXFIFO_STOP : 0)); ++ ++ if (stop) { ++ err = pasemi_smb_waitready(smbus); ++ if (err) ++ goto reset_out; ++ } + } + + return 0; diff --git a/queue-4.9/series b/queue-4.9/series index 80608a209d3..8e2bc13e885 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -215,3 +215,5 @@ alsa-pcm-test-for-silence-field-in-struct-pcm_format_data.patch arm-davinci-da850-evm-avoid-null-pointer-dereference.patch gcc-plugins-consolidate-on-pass_info-macro.patch gcc-plugins-latent_entropy-use-dev-urandom.patch +smp-fix-offline-cpu-check-in-flush_smp_call_function_queue.patch +i2c-pasemi-wait-for-write-xfers-to-finish.patch diff --git a/queue-4.9/smp-fix-offline-cpu-check-in-flush_smp_call_function_queue.patch b/queue-4.9/smp-fix-offline-cpu-check-in-flush_smp_call_function_queue.patch new file mode 100644 index 00000000000..2a839ac8518 --- /dev/null +++ b/queue-4.9/smp-fix-offline-cpu-check-in-flush_smp_call_function_queue.patch @@ -0,0 +1,42 @@ +From 9e949a3886356fe9112c6f6f34a6e23d1d35407f Mon Sep 17 00:00:00 2001 +From: Nadav Amit +Date: Sat, 19 Mar 2022 00:20:15 -0700 +Subject: smp: Fix offline cpu check in flush_smp_call_function_queue() + +From: Nadav Amit + +commit 9e949a3886356fe9112c6f6f34a6e23d1d35407f upstream. + +The check in flush_smp_call_function_queue() for callbacks that are sent +to offline CPUs currently checks whether the queue is empty. + +However, flush_smp_call_function_queue() has just deleted all the +callbacks from the queue and moved all the entries into a local list. +This checks would only be positive if some callbacks were added in the +short time after llist_del_all() was called. This does not seem to be +the intention of this check. + +Change the check to look at the local list to which the entries were +moved instead of the queue from which all the callbacks were just +removed. + +Fixes: 8d056c48e4862 ("CPU hotplug, smp: flush any pending IPI callbacks before CPU offline") +Signed-off-by: Nadav Amit +Signed-off-by: Thomas Gleixner +Link: https://lore.kernel.org/r/20220319072015.1495036-1-namit@vmware.com +Signed-off-by: Greg Kroah-Hartman +--- + kernel/smp.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/kernel/smp.c ++++ b/kernel/smp.c +@@ -209,7 +209,7 @@ static void flush_smp_call_function_queu + + /* There shouldn't be any pending callbacks on an offline CPU. */ + if (unlikely(warn_cpu_offline && !cpu_online(smp_processor_id()) && +- !warned && !llist_empty(head))) { ++ !warned && entry != NULL)) { + warned = true; + WARN(1, "IPI on offline CPU %d\n", smp_processor_id()); +