All of lore.kernel.org
 help / color / mirror / Atom feed
From: Guenter Roeck <linux@roeck-us.net>
To: linux-kernel@vger.kernel.org
Cc: linux-tip-commits@vger.kernel.org,
	Valentin Schneider <valentin.schneider@arm.com>,
	Ingo Molnar <mingo@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	x86@kernel.org
Subject: Re: [tip: sched/core] sched/core: Initialize the idle task with preemption disabled
Date: Tue, 6 Jul 2021 12:44:56 -0700	[thread overview]
Message-ID: <20210706194456.GA1823793@roeck-us.net> (raw)
In-Reply-To: <162081815405.29796.14574924529325899839.tip-bot2@tip-bot2>

Hi,

On Wed, May 12, 2021 at 11:15:54AM -0000, tip-bot2 for Valentin Schneider wrote:
> The following commit has been merged into the sched/core branch of tip:
> 
> Commit-ID:     f1a0a376ca0c4ef1fc3d24e3e502acbb5b795674
> Gitweb:        https://git.kernel.org/tip/f1a0a376ca0c4ef1fc3d24e3e502acbb5b795674
> Author:        Valentin Schneider <valentin.schneider@arm.com>
> AuthorDate:    Wed, 12 May 2021 10:46:36 +01:00
> Committer:     Ingo Molnar <mingo@kernel.org>
> CommitterDate: Wed, 12 May 2021 13:01:45 +02:00
> 
> sched/core: Initialize the idle task with preemption disabled
> 
> As pointed out by commit
> 
>   de9b8f5dcbd9 ("sched: Fix crash trying to dequeue/enqueue the idle thread")
> 
> init_idle() can and will be invoked more than once on the same idle
> task. At boot time, it is invoked for the boot CPU thread by
> sched_init(). Then smp_init() creates the threads for all the secondary
> CPUs and invokes init_idle() on them.
> 
> As the hotplug machinery brings the secondaries to life, it will issue
> calls to idle_thread_get(), which itself invokes init_idle() yet again.
> In this case it's invoked twice more per secondary: at _cpu_up(), and at
> bringup_cpu().
> 
> Given smp_init() already initializes the idle tasks for all *possible*
> CPUs, no further initialization should be required. Now, removing
> init_idle() from idle_thread_get() exposes some interesting expectations
> with regards to the idle task's preempt_count: the secondary startup always
> issues a preempt_disable(), requiring some reset of the preempt count to 0
> between hot-unplug and hotplug, which is currently served by
> idle_thread_get() -> idle_init().
> 
> Given the idle task is supposed to have preemption disabled once and never
> see it re-enabled, it seems that what we actually want is to initialize its
> preempt_count to PREEMPT_DISABLED and leave it there. Do that, and remove
> init_idle() from idle_thread_get().
> 
> Secondary startups were patched via coccinelle:
> 
>   @begone@
>   @@
> 
>   -preempt_disable();
>   ...
>   cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
> 
> Signed-off-by: Valentin Schneider <valentin.schneider@arm.com>
> Signed-off-by: Ingo Molnar <mingo@kernel.org>
> Acked-by: Peter Zijlstra <peterz@infradead.org>
> Link: https://lore.kernel.org/r/20210512094636.2958515-1-valentin.schneider@arm.com

This patch results in several messages similar to the following
when booting s390 images in qemu.

[    1.690807] BUG: sleeping function called from invalid context at include/linux/percpu-rwsem.h:49
[    1.690925] in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 1, name: swapper/0
[    1.691053] no locks held by swapper/0/1.
[    1.691310] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.13.0-11788-g79160a603bdb #1
[    1.691469] Hardware name: QEMU 2964 QEMU (KVM/Linux)
[    1.691612] Call Trace:
[    1.691718]  [<0000000000d98bb0>] show_stack+0x90/0xf8
[    1.692040]  [<0000000000da894c>] dump_stack_lvl+0x74/0xa8
[    1.692134]  [<0000000000187e52>] ___might_sleep+0x15a/0x170
[    1.692228]  [<000000000014f588>] cpus_read_lock+0x38/0xc0
[    1.692320]  [<0000000000182e8a>] smpboot_register_percpu_thread+0x2a/0x160
[    1.692412]  [<00000000014814b8>] cpuhp_threads_init+0x28/0x60
[    1.692505]  [<0000000001487a30>] smp_init+0x28/0x90
[    1.692597]  [<00000000014779a6>] kernel_init_freeable+0x1f6/0x270
[    1.692689]  [<0000000000db7466>] kernel_init+0x2e/0x160
[    1.692779]  [<0000000000103618>] __ret_from_fork+0x40/0x58
[    1.692870]  [<0000000000dc6e12>] ret_from_fork+0xa/0x30

Reverting this patch fixes the problem.
Bisect log is attached.

Guenter

---
# bad: [007b350a58754a93ca9fe50c498cc27780171153] Merge tag 'dlm-5.14' of git://git.kernel.org/pub/scm/linux/kernel/git/teigland/linux-dlm
# good: [62fb9874f5da54fdb243003b386128037319b219] Linux 5.13
git bisect start '007b350a5875' '62fb9874f5da'
# bad: [36824f198c621cebeb22966b5e244378fa341295] Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
git bisect bad 36824f198c621cebeb22966b5e244378fa341295
# bad: [9269d27e519ae9a89be8d288f59d1ec573b0c686] Merge tag 'timers-nohz-2021-06-28' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
git bisect bad 9269d27e519ae9a89be8d288f59d1ec573b0c686
# good: [69609a91ac1d82f9c958a762614edfe0ac8498e3] Merge tag 'spi-v5.14' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi
git bisect good 69609a91ac1d82f9c958a762614edfe0ac8498e3
# good: [a15286c63d113d4296c58867994cd266a28f5d6d] Merge tag 'locking-core-2021-06-28' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
git bisect good a15286c63d113d4296c58867994cd266a28f5d6d
# bad: [0159bb020ca9a43b17aa9149f1199643c1d49426] Documentation: Add usecases, design and interface for core scheduling
git bisect bad 0159bb020ca9a43b17aa9149f1199643c1d49426
# good: [97886d9dcd86820bdbc1fa73b455982809cbc8c2] sched: Migration changes for core scheduling
git bisect good 97886d9dcd86820bdbc1fa73b455982809cbc8c2
# bad: [fcb501704554eebfd27e3220b0540997fd2b24a8] delayacct: Document task_delayacct sysctl
git bisect bad fcb501704554eebfd27e3220b0540997fd2b24a8
# bad: [cc00c1988801dc71f63bb7bad019e85046865095] sched: Fix leftover comment typos
git bisect bad cc00c1988801dc71f63bb7bad019e85046865095
# good: [7ac592aa35a684ff1858fb9ec282886b9e3575ac] sched: prctl() core-scheduling interface
git bisect good 7ac592aa35a684ff1858fb9ec282886b9e3575ac
# bad: [f1a0a376ca0c4ef1fc3d24e3e502acbb5b795674] sched/core: Initialize the idle task with preemption disabled
git bisect bad f1a0a376ca0c4ef1fc3d24e3e502acbb5b795674
# good: [9f26990074931bbf797373e53104216059b300b1] kselftest: Add test for core sched prctl interface
git bisect good 9f26990074931bbf797373e53104216059b300b1
# first bad commit: [f1a0a376ca0c4ef1fc3d24e3e502acbb5b795674] sched/core: Initialize the idle task with preemption disabled

  reply	other threads:[~2021-07-06 19:45 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-12  9:46 [PATCH] sched: Initialize the idle task with preemption disabled Valentin Schneider
2021-05-12  9:46 ` Valentin Schneider
2021-05-12  9:46 ` [OpenRISC] " Valentin Schneider
2021-05-12  9:46 ` Valentin Schneider
2021-05-12  9:46 ` Valentin Schneider
2021-05-12  9:46 ` Valentin Schneider
2021-05-12  9:46 ` Valentin Schneider
2021-05-12 11:15 ` [tip: sched/core] sched/core: " tip-bot2 for Valentin Schneider
2021-07-06 19:44   ` Guenter Roeck [this message]
2021-07-06 23:55     ` Valentin Schneider
2021-07-07  4:06       ` Guenter Roeck
2021-07-07 12:03       ` Frederic Weisbecker
2021-07-07 12:11         ` Valentin Schneider
2021-07-07 14:14           ` Guenter Roeck
2021-07-07 14:35             ` Alexey Kardashevskiy
2021-07-07 14:57               ` Valentin Schneider
2021-07-07 15:31                 ` Guenter Roeck
2021-07-07 16:35                 ` Guenter Roeck
2021-07-07 17:31                   ` Valentin Schneider
2021-07-08  1:50                     ` Alexey Kardashevskiy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210706194456.GA1823793@roeck-us.net \
    --to=linux@roeck-us.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=peterz@infradead.org \
    --cc=valentin.schneider@arm.com \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.