| From ee69d4be8fd064cd08270b4808d2dfece3614ee0 Mon Sep 17 00:00:00 2001 |
| From: Guo Ren <guoren@linux.alibaba.com> |
| Date: Thu, 7 Apr 2022 15:33:22 +0800 |
| Subject: xtensa: patch_text: Fixup last cpu should be master |
| |
| From: Guo Ren <guoren@linux.alibaba.com> |
| |
| commit ee69d4be8fd064cd08270b4808d2dfece3614ee0 upstream. |
| |
| These patch_text implementations are using stop_machine_cpuslocked |
| infrastructure with atomic cpu_count. The original idea: When the |
| master CPU patch_text, the others should wait for it. But current |
| implementation is using the first CPU as master, which couldn't |
| guarantee the remaining CPUs are waiting. This patch changes the |
| last CPU as the master to solve the potential risk. |
| |
| Fixes: 64711f9a47d4 ("xtensa: implement jump_label support") |
| Signed-off-by: Guo Ren <guoren@linux.alibaba.com> |
| Signed-off-by: Guo Ren <guoren@kernel.org> |
| Reviewed-by: Max Filippov <jcmvbkbc@gmail.com> |
| Reviewed-by: Masami Hiramatsu <mhiramat@kernel.org> |
| Cc: <stable@vger.kernel.org> |
| Message-Id: <20220407073323.743224-4-guoren@kernel.org> |
| Signed-off-by: Max Filippov <jcmvbkbc@gmail.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/xtensa/kernel/jump_label.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/arch/xtensa/kernel/jump_label.c |
| +++ b/arch/xtensa/kernel/jump_label.c |
| @@ -40,7 +40,7 @@ static int patch_text_stop_machine(void |
| { |
| struct patch *patch = data; |
| |
| - if (atomic_inc_return(&patch->cpu_count) == 1) { |
| + if (atomic_inc_return(&patch->cpu_count) == num_online_cpus()) { |
| local_patch_text(patch->addr, patch->data, patch->sz); |
| atomic_inc(&patch->cpu_count); |
| } else { |