Received: by 2002:ab2:3350:0:b0:1f4:6588:b3a7 with SMTP id o16csp2165096lqe; Tue, 9 Apr 2024 11:16:53 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCUJSqBY/6Jj4I39sbyxyC4+MNQR1J4kvh81GL/mwEhjVDs6W54OY1sfx/vFI7J0vyX1RXcJHOev5DxAQvH+X28xMnrOrawDWOGFLV+Ibw== X-Google-Smtp-Source: AGHT+IEzhZP0CoVJhlcKT3z2Mw5k66iNOn1/9wZdjN6KYhoQimyM/hKg7SgmvJegNRm/eME7/vzi X-Received: by 2002:a05:620a:1914:b0:78d:6198:f07d with SMTP id bj20-20020a05620a191400b0078d6198f07dmr604735qkb.31.1712686612582; Tue, 09 Apr 2024 11:16:52 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1712686612; cv=pass; d=google.com; s=arc-20160816; b=MKbezJo6XAx/dUoWzvMkk2u6SnwiizAcIYL8UfmBSybcMZo4N3zD5gV5bVuoPpvCTM z3jED995fNWa4BAu8ZTP6HTiajPj/D8w9Ko3T6Lmex32Ds+Xqj/n3vUt0ItOutzESktK hz8UvJItazsXgatDkZDzvls0YSAgBTLjCl7+1vusuDV1r4poK9sa8x4Ab+/wK1K6sWMd 1H/wPYSmYbx7sAIKtZ+2hXUab6usJHi9HNiOlQA13ioLz/TQPLFqA8B3o0fnhyt8EtWM 5zkO0OcokygH4n7pdpX5EFztxM48TUaIBnl3/hrzS0fJB0TU+NiOj4ohUmqCYNbcf1tj DyBg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=in-reply-to:content-disposition:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:reply-to:message-id :subject:cc:to:from:date:dkim-signature; bh=DkwJdUhYgjv0aUe6smon5r5otdOsVK99QB9bj9eJwNE=; fh=z8catKIr1V0hSEq9wvlbmZMFJvmahyGsneRMMMMPIOk=; b=UWS7VWgVDwLWJyqHGmoiBwh3+bOBbaz4e+VhAiDYSH2+gpqDMS1JQzxP6p1DRDbt67 f2EgDIkoFqwC8jjtQ+ddsBVetJZ5VCqzR9ADAfesR5XQAsn4+L4qurkgQhclUzQkUnoQ lYAZuEKHcYRcOf7IjJxKvB4LuG8Zy93GaCv7YiqJPAh1Cu3+89nbR3eiMbk5tHyMPS7z tSX4btXdLiyhLEOsYqJTNNUExzgiqPL4+mlgFv6jkggt+Yum8jRIAyzXMB0cVWjJOOWo wZG3YCW6KX0VK+WgU29Zl9fZ1LfB+oKWkfqjGVdpYcN96wVv4/hFXnk59bCQDp0IjhRY eOIA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=H1UehCBs; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-137453-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-137453-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id q2-20020ae9e402000000b0078d3d55dca3si10654844qkc.530.2024.04.09.11.16.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Apr 2024 11:16:52 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-137453-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=H1UehCBs; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-137453-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-137453-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 3C19C1C22675 for ; Tue, 9 Apr 2024 18:16:52 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id CB55D156986; Tue, 9 Apr 2024 18:16:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="H1UehCBs" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 848E7156883 for ; Tue, 9 Apr 2024 18:16:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712686604; cv=none; b=oVE8vpSXGkuaTeQW3PTeCyeezvYEc6Wglc1Rn+UEwk+pjJ1JR1fNevbhRbiUnolMGWJqRv5mJsGLPGjW/qcnAO3MbD0ZZrzTNIsB7SiQJmihNLhFrFSxuIhyYY0wXJn+21g+gOKwe7cCC7yoSSKUl2nil4ucdoCEp5rpFRLyJJE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712686604; c=relaxed/simple; bh=xx5nJgPBYfQGg8nUKkmyefd8lfIOFiEmSmWrpC3/z4A=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=XQhlmYPNXCmqrftPOmj5tBHk3UmO821e01Qahe9aQWtFU2fNLxHC31cQTGyL/NnRB3TIkIaJ8rXYox/K2dXKnpCRJVmSKshgslgFjSls9X91dHJjsO0vOUFnb5VyLiJQQj1xWgVQaa+XG7kgcioeYiEw5zwgVupWBEmUviQb2wQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=H1UehCBs; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0F00AC433F1; Tue, 9 Apr 2024 18:16:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1712686604; bh=xx5nJgPBYfQGg8nUKkmyefd8lfIOFiEmSmWrpC3/z4A=; h=Date:From:To:Cc:Subject:Reply-To:References:In-Reply-To:From; b=H1UehCBs7+Uztx4JxSqPup2ByxAOyoi/VXnUTgjLEiY1M/wzj7JPNwT44EOAWKYAL zYwpc+QpMAG3ds86eoKSRnoHywHUifuGddbRAbiVL6zj4W+efr69RFm57AQVEDf4aD TLKm+4FcQsw5liVdeuUxVljoWZqqjDL/t3ouBFjeB9Th5nkJ1bZ7HaWqojqRn08L4/ tz1NTbH0Xj4DnKxqTnQlSE+wAHV0Cb84ERlIel1ov0eAfMhS5+r0X6QkVCZcw5+Iu+ kUQZAtUkNa4c3ODXRm3ekryDg1ls1p5CJIk2CpLkd+BBfsFa5zhIHfo7YFjCL92DiT 5QfxUR3hzl9Vw== Received: by paulmck-ThinkPad-P17-Gen-1.home (Postfix, from userid 1000) id 764AECE2D22; Tue, 9 Apr 2024 11:16:43 -0700 (PDT) Date: Tue, 9 Apr 2024 11:16:43 -0700 From: "Paul E. McKenney" To: Mukesh Ojha Cc: linux-kernel@vger.kernel.org Subject: Re: [PATCH] stop_machine: call rcu_momentary_dyntick_idle() from irq disable path Message-ID: <0696bf2e-29a3-40a3-80dc-c5002f447f4b@paulmck-laptop> Reply-To: paulmck@kernel.org References: <1712649736-27058-1-git-send-email-quic_mojha@quicinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1712649736-27058-1-git-send-email-quic_mojha@quicinc.com> On Tue, Apr 09, 2024 at 01:32:16PM +0530, Mukesh Ojha wrote: > rcu_momentary_dyntick_idle() is getting called from all the irq > disable path(also documented in rcu_momentary_dyntick_idle()) > however, in multi_cpu_stop() it is not. > > " > > * Let the RCU core know that this CPU has gone through the scheduler, > * which is a quiescent state. This is called when the need for a > * quiescent state is urgent, so we burn an atomic operation and full > * memory barriers to let the RCU core know about it, regardless of what > * this CPU might (or might not) do in the near future. > * > * We inform the RCU core by emulating a zero-duration dyntick-idle period. > * > * The caller must have disabled interrupts and must not be idle. > > " > > > Let's fix this as it is possible that during stop_machine() call for > a kprobe registration[1] can get stuck when one cpu(cpu4) calls > rcu_momentary_dyntick_idle() after acking MULTI_STOP_PREPARE state[2] > and other cpus have acked MULTI_STOP_DISABLE_IRQ and waiting for earlier > cpu to reach to next state [3]. Good eyes! Acked-by: Paul E. McKenney > [1] > > [] __switch_to+0x1e8 > [] __schedule+0x6bc > [] preempt_schedule_common+0xb4 > [] preempt_schedule[jt]+0x20 > [] queue_stop_cpus_work[jt]+0xdc > [] stop_machine_cpuslocked+0xdc > [] aarch64_insn_patch_text[jt]+0x4c > [] arch_arm_kprobe+0x40 > [] arm_kprobe+0x3c > [] register_kprobe+0x3fc > > > [2] > 000|check_preemption_disabled(what1 = 0xFFFFFFDB79153D0B, what2 = 0xFFFFFFDB7912A911) > | what1 = 0xFFFFFFDB79153D0B > | what2 = 0xFFFFFFDB7912A911 > -001|__this_cpu_preempt_check(op = ?) > -002|rcu_preempt_need_deferred_qs(inline) > | t = 0xFFFFFF8806879F80 > | pscr_ret__ = 0 > -002|rcu_preempt_deferred_qs(inline) > | t = 0xFFFFFF8806879F80 > | flags = 0 > -002|rcu_momentary_dyntick_idle() > -003|multi_cpu_stop(:data = 0xFFFFFFC084343478) > | data = 0xFFFFFFC084343478 > | msdata = 0x0 > | curstate = MULTI_STOP_PREPARE ==> This seems to have acked MULTI_STOP_PREPARE > state and calls rcu_momentary_dyntick_idle() > | flags = 0 > | is_active = TRUE > | cpumask = 0xFFFFFFDB79E37718 > | err = 0 > -004|cpu_stopper_thread(cpu = ?) > | cpu = ? > | __already_done = FALSE > | stopper = 0xFFFFFF8B6D812F28 > | fn = 0xFFFFFFDB77DD74C4 > | arg = 0xFFFFFFC084343478 > | done = 0xFFFFFFC0843434A0 > | ret = ??? > -005|smpboot_thread_fn(:data = 0xFFFFFF8805C063C0) > | data = 0xFFFFFF8805C063C0 > | td = 0x0 > | ht = 0xFFFFFFDB79EE8B40 > -006|kthread(_create = 0xFFFFFF8806B7EC00) > | _create = 0xFFFFFF8806B7EC00 > | param = (sched_priority = 0) > | create = 0x0 > | data = 0xFFFFFF8805C063C0 > | threadfn = 0x0 > | ret = ??? > | self = 0xFFFFFF8806402F00 > | done = 0xFFFFFFC08005BA98 > -007|ret_from_fork(asm) > > [3] > 000|touch_softlockup_watchdog() > -001|touch_nmi_watchdog(inline) > -001|multi_cpu_stop(:data = 0xFFFFFFC084343478) > | data = 0xFFFFFFC084343478 > | msdata = 0x0 > | curstate = MULTI_STOP_DISABLE_IRQ > | newstate = MULTI_STOP_DISABLE_IRQ > | flags = 0 > | is_active = TRUE > | cpumask = 0xFFFFFFDB79E37718 > | err = 0 > -002|cpu_stopper_thread(cpu = ?) > | cpu = ? > | __already_done = FALSE > | stopper = 0xFFFFFF8B6D04EF28 > | fn = 0xFFFFFFDB77DD74C4 > | arg = 0xFFFFFFC084343478 > | done = 0xFFFFFFC0843434A0 > | ret = ??? > -003|smpboot_thread_fn(:data = 0xFFFFFF8805C06230) > | data = 0xFFFFFF8805C06230 > | td = 0x0 > | ht = 0xFFFFFFDB79EE8B40 > -004|kthread(_create = 0xFFFFFF8806469D80) > | _create = 0xFFFFFF8806469D80 > | param = (sched_priority = 0) > | create = 0x0 > | data = 0xFFFFFF8805C06230 > | threadfn = 0x0 > | ret = ??? > | self = 0xFFFFFF8806401500 > | done = 0xFFFFFFC08005B888 > -005|ret_from_fork(asm) > ---|end of frame > > cpu1: > > -000|touch_softlockup_watchdog() > -001|touch_nmi_watchdog(inline) > -001|multi_cpu_stop(:data = 0xFFFFFFC084343478) > | data = 0xFFFFFFC084343478 > | msdata = 0x0 > | curstate = MULTI_STOP_DISABLE_IRQ > | newstate = MULTI_STOP_DISABLE_IRQ > | flags = 0 > | is_active = TRUE > | cpumask = 0xFFFFFFDB79E37718 > | err = 0 > -002|cpu_stopper_thread(cpu = ?) > | cpu = ? > | __already_done = FALSE > | stopper = 0xFFFFFF8B6D23FF28 > | fn = 0xFFFFFFDB77DD74C4 > | arg = 0xFFFFFFC084343478 > | done = 0xFFFFFFC0843434A0 > | ret = ??? > -003|smpboot_thread_fn(:data = 0xFFFFFF8805C06270) > | data = 0xFFFFFF8805C06270 > | td = 0x0 > | ht = 0xFFFFFFDB79EE8B40 > -004|kthread(_create = 0xFFFFFF88066119C0) > | _create = 0xFFFFFF88066119C0 > | param = (sched_priority = 0) > | create = 0x0 > | data = 0xFFFFFF8805C06270 > | threadfn = 0x0 > | ret = ??? > | self = 0xFFFFFF8806401000 > | done = 0xFFFFFFC08005BA98 > -005|ret_from_fork(asm) > ---|end of frame > > cpu2: > > -000|touch_softlockup_watchdog() > -001|touch_nmi_watchdog(inline) > -001|multi_cpu_stop(:data = 0xFFFFFFC084343478) > | data = 0xFFFFFFC084343478 > | msdata = 0x0 > | curstate = MULTI_STOP_DISABLE_IRQ > | newstate = MULTI_STOP_DISABLE_IRQ > | flags = 0 > | is_active = TRUE > | cpumask = 0xFFFFFFDB79E37718 > | err = 0 > -002|cpu_stopper_thread(cpu = ?) > | cpu = ? > | __already_done = FALSE > | stopper = 0xFFFFFF8B6D430F28 > | fn = 0xFFFFFFDB77DD74C4 > | arg = 0xFFFFFFC084343478 > | done = 0xFFFFFFC0843434A0 > | ret = ??? > -003|smpboot_thread_fn(:data = 0xFFFFFF8805C062E0) > | data = 0xFFFFFF8805C062E0 > | td = 0x0 > | ht = 0xFFFFFFDB79EE8B40 > -004|kthread(_create = 0xFFFFFF88067D5B80) > | _create = 0xFFFFFF88067D5B80 > | param = (sched_priority = 0) > | create = 0x0 > | data = 0xFFFFFF8805C062E0 > | threadfn = 0x0 > | ret = ??? > | self = 0xFFFFFF8806403F00 > | done = 0xFFFFFFC08005BA98 > -005|ret_from_fork(asm) > ---|end of frame > > cpu3: > > -000|touch_softlockup_watchdog_sched(inline) > | __ptr = 18446743916840366040 > -000|touch_softlockup_watchdog() > -001|touch_nmi_watchdog(inline) > -001|multi_cpu_stop(:data = 0xFFFFFFC084343478) > | data = 0xFFFFFFC084343478 > | msdata = 0x0 > | curstate = MULTI_STOP_DISABLE_IRQ > | newstate = MULTI_STOP_DISABLE_IRQ > | flags = 0 > | is_active = TRUE > | cpumask = 0xFFFFFFDB79E37718 > | err = 0 > -002|cpu_stopper_thread(cpu = ?) > | cpu = ? > | __already_done = FALSE > | stopper = 0xFFFFFF8B6D621F28 > | fn = 0xFFFFFFDB77DD74C4 > | arg = 0xFFFFFFC084343478 > | done = 0xFFFFFFC0843434A0 > | ret = ??? > -003|smpboot_thread_fn(:data = 0xFFFFFF8805C06350) > | data = 0xFFFFFF8805C06350 > | td = 0x0 > | ht = 0xFFFFFFDB79EE8B40 > -004|kthread(_create = 0xFFFFFF88069E7300) > | _create = 0xFFFFFF88069E7300 > | param = (sched_priority = 0) > | create = 0x0 > | data = 0xFFFFFF8805C06350 > | threadfn = 0x0 > | ret = ??? > | self = 0xFFFFFF8806403300 > | done = 0xFFFFFFC08005BA98 > -005|ret_from_fork(asm) > ---|end of frame > > > Cpu5: > > -000|check_preemption_disabled(what1 = ?, what2 = ?) > | what1 = ? > | what2 = ? > -001|debug_smp_processor_id() > -002|ct_state_inc(inline) > | incby = 8 > | __ptr = 0 > -002|rcu_momentary_dyntick_idle() > | seq = 0 > -003|multi_cpu_stop(:data = 0xFFFFFFC084343478) > | data = 0xFFFFFFC084343478 > | msdata = 0x0 > | curstate = MULTI_STOP_DISABLE_IRQ > | flags = 0 > | is_active = TRUE > | cpumask = 0xFFFFFFDB79E37718 > | err = 0 > -004|cpu_stopper_thread(cpu = ?) > | cpu = ? > | __already_done = FALSE > | stopper = 0xFFFFFF8B6DA03F28 > | fn = 0xFFFFFFDB77DD74C4 > | arg = 0xFFFFFFC084343478 > | done = 0xFFFFFFC0843434A0 > | ret = ??? > -005|smpboot_thread_fn(:data = 0xFFFFFF8805C06430) > | data = 0xFFFFFF8805C06430 > | td = 0x0 > | ht = 0xFFFFFFDB79EE8B40 > -006|kthread(_create = 0xFFFFFF8806D58180) > | _create = 0xFFFFFF8806D58180 > | param = (sched_priority = 0) > | create = 0x0 > | data = 0xFFFFFF8805C06430 > | threadfn = 0x0 > | ret = ??? > | self = 0xFFFFFF8806402400 > | done = 0xFFFFFFC08005BA98 > -007|ret_from_fork(asm) > ---|end of frame > > Cpu6: > > -000|check_preemption_disabled(what1 = ?, what2 = ?) > | what1 = ? > | what2 = ? > -001|__this_cpu_preempt_check(op = ?) > -002|rcu_preempt_need_deferred_qs(inline) > | t = 0xFFFFFF8806E03F00 > | pscr_ret__ = 0 > -002|rcu_preempt_deferred_qs(inline) > | t = 0xFFFFFF8806E03F00 > | flags = 0 > -002|rcu_momentary_dyntick_idle() > -003|multi_cpu_stop(:data = 0xFFFFFFC084343478) > | data = 0xFFFFFFC084343478 > | msdata = 0x0 > | curstate = MULTI_STOP_DISABLE_IRQ > | flags = 0 > | is_active = TRUE > | cpumask = 0xFFFFFFDB79E37718 > | err = 0 > -004|cpu_stopper_thread(cpu = ?) > | cpu = ? > | __already_done = FALSE > | stopper = 0xFFFFFF8B6DBF4F28 > | fn = 0xFFFFFFDB77DD74C4 > | arg = 0xFFFFFFC084343478 > | done = 0xFFFFFFC0843434A0 > | ret = ??? > -005|smpboot_thread_fn(:data = 0xFFFFFF8805C064A0) > | data = 0xFFFFFF8805C064A0 > | td = 0x0 > | ht = 0xFFFFFFDB79EE8B40 > -006|kthread(_create = 0xFFFFFF8806F67D00) > | _create = 0xFFFFFF8806F67D00 > | param = (sched_priority = 0) > | create = 0x0 > | data = 0xFFFFFF8805C064A0 > | threadfn = 0x0 > | ret = ??? > | self = 0xFFFFFF8806402600 > | done = 0xFFFFFFC08005BA98 > -007|ret_from_fork(asm) > ---|end of frame > > Cpu7: > > -000|check_preemption_disabled(what1 = ?, what2 = ?) > | what1 = ? > | what2 = ? > -001|__this_cpu_preempt_check(op = ?) > -002|rcu_preempt_need_deferred_qs(inline) > | t = 0xFFFFFF8806E1DE80 > | pscr_ret__ = 0 > -002|rcu_preempt_deferred_qs(inline) > | t = 0xFFFFFF8806E1DE80 > | flags = 0 > -002|rcu_momentary_dyntick_idle() > -003|multi_cpu_stop(:data = 0xFFFFFFC084343478) > | data = 0xFFFFFFC084343478 > | msdata = 0x0 > | curstate = MULTI_STOP_DISABLE_IRQ > | flags = 0 > | is_active = TRUE > | cpumask = 0xFFFFFFDB79E37718 > | err = 0 > -004|cpu_stopper_thread(cpu = ?) > | cpu = ? > | __already_done = FALSE > | stopper = 0xFFFFFF8B6DDE5F28 > | fn = 0xFFFFFFDB77DD74C4 > | arg = 0xFFFFFFC084343478 > | done = 0xFFFFFFC0843434A0 > | ret = ??? > -005|smpboot_thread_fn(:data = 0xFFFFFF8805C06510) > | data = 0xFFFFFF8805C06510 > | td = 0x0 > | ht = 0xFFFFFFDB79EE8B40 > -006|kthread(_create = 0xFFFFFF88070FF300) > | _create = 0xFFFFFF88070FF300 > | param = (sched_priority = 0) > | create = 0x0 > | data = 0xFFFFFF8805C06510 > | threadfn = 0x0 > | ret = ??? > | self = 0xFFFFFF8806407D00 > | done = 0xFFFFFFC08005BA98 > -007|ret_from_fork(asm) > ---|end of frame > > > Signed-off-by: Mukesh Ojha > --- > kernel/stop_machine.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/kernel/stop_machine.c b/kernel/stop_machine.c > index cedb17ba158a..f93e6deb8150 100644 > --- a/kernel/stop_machine.c > +++ b/kernel/stop_machine.c > @@ -250,8 +250,8 @@ static int multi_cpu_stop(void *data) > * be detected and reported on their side. > */ > touch_nmi_watchdog(); > + rcu_momentary_dyntick_idle(); > } > - rcu_momentary_dyntick_idle(); > } while (curstate != MULTI_STOP_EXIT); > > local_irq_restore(flags); > -- > 2.7.4 >