Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp521049pxb; Wed, 3 Mar 2021 08:47:47 -0800 (PST) X-Google-Smtp-Source: ABdhPJxhoFadEHvFNI61+plgfQzfulrA9PAG0oAdqOUBSF6N2X2U90ZqHGspQeqVkrYoyaX+i5j5 X-Received: by 2002:a17:907:3d01:: with SMTP id gm1mr20168552ejc.214.1614790067542; Wed, 03 Mar 2021 08:47:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614790067; cv=none; d=google.com; s=arc-20160816; b=zNxjRJN3RbemlAn6vI7eC1pNopwAb4QqkIjCyWmugJkHjKxJhhQHlKfd6UZkRIALht lpkRlGi71ZKbcfADud8EE47VXubiIyfIJzLM8WUTJ0Iv5XYo9OyqYbCEi8gmwH+G4UVa Uq/jOdyQo+1fh5BnFJVX7NnWI9nUv19LxiyAgjUYd3IK4X4LRxD0/Iu1tgx5JWIf46yM 0gJg4rD0fEqFUTRajPStaRjW5LhHK6V1Z8mTxamImpXdCrAY6Jp+Tb7IeasjvA6c6+qG ShEjqAJ3CE483k4hD82BlPOMT1I51Osi+UqoKehJVNJdgPIlyv6CbNMcUwI0yTBoub6V 0jlA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Hpm130IB7aMLOYHX1SZb2w7fOAuWTduEQZ7t6gPc9+k=; b=Jh8snFQ76i+m5rRyC6cUSh1uXgsVj8J2Yfy2QVCSRD/1DRt/WLblhfmXZ40zmwBpSu UANUyavKXHMph6MhyNLeIP935aRFhQJa3GzSzPJnim1sVbm0+K+Lvj1q6+LjTIsO5wk2 WJ4/u4xAjPMdlmn+4BQsmTLZrXzFjlfwWCN6mK2ZmRfyjMRbzW9YMtKrz/If6C6MZRLb 3WorZ7DyIlHs9vSXKL8exVWBeQY/s46dA/w3d/RhfbNtbK/iHlZaWaM+LwxHkVFScdrc co/2KEJU0UHb/I3KGyLLm51m7lOICqIEJHe8NnaVh4/XpnMD6LlXjT1CdWuB3w0Rgrox f/+A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=lnwPc+7r; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c1si15104783edq.252.2021.03.03.08.46.55; Wed, 03 Mar 2021 08:47:47 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=lnwPc+7r; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347691AbhCBALT (ORCPT + 99 others); Mon, 1 Mar 2021 19:11:19 -0500 Received: from mail.kernel.org ([198.145.29.99]:40750 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239764AbhCASWt (ORCPT ); Mon, 1 Mar 2021 13:22:49 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 534046508C; Mon, 1 Mar 2021 17:29:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1614619772; bh=pR2Wf12ndzZyMM682FQWwGSa7r86gB75fsD0D2tWh2Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lnwPc+7rlYAi9cGeq/QHmSzsdVwZkBg0USjeb3jOQDQ2BJDPQd/KPx9Zi4nQ46mtc QLixNyNjHo8ZshHmzyaM3j/WQeiqqJCeTAQ+Lk84OKFqzGQMxkzSzttl9YWXyFgQEe oQRaMYNQH3pHvxvMIkVDxd6Pal36oPMEL1BPEFFc= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Frederic Weisbecker , "Peter Zijlstra (Intel)" , Ingo Molnar Subject: [PATCH 5.10 575/663] entry: Explicitly flush pending rcuog wakeup before last rescheduling point Date: Mon, 1 Mar 2021 17:13:43 +0100 Message-Id: <20210301161210.304558118@linuxfoundation.org> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210301161141.760350206@linuxfoundation.org> References: <20210301161141.760350206@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Frederic Weisbecker commit 47b8ff194c1fd73d58dc339b597d466fe48c8958 upstream. Following the idle loop model, cleanly check for pending rcuog wakeup before the last rescheduling point on resuming to user mode. This way we can avoid to do it from rcu_user_enter() with the last resort self-IPI hack that enforces rescheduling. Signed-off-by: Frederic Weisbecker Signed-off-by: Peter Zijlstra (Intel) Signed-off-by: Ingo Molnar Cc: stable@vger.kernel.org Link: https://lkml.kernel.org/r/20210131230548.32970-5-frederic@kernel.org Signed-off-by: Greg Kroah-Hartman --- kernel/entry/common.c | 7 +++++++ kernel/rcu/tree.c | 12 +++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) --- a/kernel/entry/common.c +++ b/kernel/entry/common.c @@ -174,6 +174,10 @@ static unsigned long exit_to_user_mode_l * enabled above. */ local_irq_disable_exit_to_user(); + + /* Check if any of the above work has queued a deferred wakeup */ + rcu_nocb_flush_deferred_wakeup(); + ti_work = READ_ONCE(current_thread_info()->flags); } @@ -187,6 +191,9 @@ static void exit_to_user_mode_prepare(st lockdep_assert_irqs_disabled(); + /* Flush pending rcuog wakeup before the last need_resched() check */ + rcu_nocb_flush_deferred_wakeup(); + if (unlikely(ti_work & EXIT_TO_USER_MODE_WORK)) ti_work = exit_to_user_mode_loop(regs, ti_work); --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -699,13 +699,15 @@ noinstr void rcu_user_enter(void) lockdep_assert_irqs_disabled(); /* - * We may be past the last rescheduling opportunity in the entry code. - * Trigger a self IPI that will fire and reschedule once we resume to - * user/guest mode. + * Other than generic entry implementation, we may be past the last + * rescheduling opportunity in the entry code. Trigger a self IPI + * that will fire and reschedule once we resume in user/guest mode. */ instrumentation_begin(); - if (do_nocb_deferred_wakeup(rdp) && need_resched()) - irq_work_queue(this_cpu_ptr(&late_wakeup_work)); + if (!IS_ENABLED(CONFIG_GENERIC_ENTRY) || (current->flags & PF_VCPU)) { + if (do_nocb_deferred_wakeup(rdp) && need_resched()) + irq_work_queue(this_cpu_ptr(&late_wakeup_work)); + } instrumentation_end(); rcu_eqs_enter(true);