Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp3521417pxb; Mon, 24 Jan 2022 11:18:29 -0800 (PST) X-Google-Smtp-Source: ABdhPJz10RCh9d3GZSB5NdJd75E6CgZuI2xBvSNd4LWQzIiKXl8uZjbfRJpqH1949RtcchldHB/w X-Received: by 2002:aa7:961d:0:b0:4ca:b9fc:4f63 with SMTP id q29-20020aa7961d000000b004cab9fc4f63mr589942pfg.7.1643051909045; Mon, 24 Jan 2022 11:18:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643051909; cv=none; d=google.com; s=arc-20160816; b=cgKBzErrkN2edh7GK+dOSadCuaDAVlEZplAZMRB/yqJbuunFKnIjg2obxcb+JU2laK EAHOnhgw6M5eJgZntg6P7RXyAhQb01DLh2+lPpBobAaJUjvdqCUIhKN+0lHunqS+6ecz gON8K5nb39AF4K5mzSpbqemzM31HeSxEuLbrqH+p2QKAygdk9fLxKW3/FwsGkjmbZ5NT fphyzCiP4aKc+rhulm7tRZ5olnUPFu1jamxPk/PEO6LNoiDZDs9Mwq4bQSnwUeib0B+a 5wo0FGqqNmPSlXhYr4uhqIefYHgTnRGGqsfrxqtUOWhS8l8FZKA88LHTTo2I26HHCzk7 xMQA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:references :in-reply-to:subject:cc:to:from; bh=hyu1jTOqKfnvvsWz+7i0bZfVGKcpQdHyH/ncaJjJiqs=; b=PniTk/M2dX3gbfVuNt2VTyUYbm4Og4hVimHsQvW3pg/5iZ4oLC/HQXRADKjcXBGgbv 3LGBKWHSPae+gOartvXDVQcXckIUAdOU/74+GAP3yvSFE4hnFJRwmKdL+fswihknZAva G6unEuLs98szVec812zjXoJ9MOc/3VIBZSfof/RVGNg+/53dxv1sYSXbakmrmHuibPZe xGbRTerUiOyhGr95BMgKw0BCulYcK7enz+PC5vYm9eaUGuBYPavLGLSpLgVUwvwF3o0f bzeL9Zrq2wAnc3yNHIXOnrLbqKilNysKiMTqKru/GaC8xQ24iDzNxJFkq60SwJ9v35mp diJQ== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id x24si12808557plr.88.2022.01.24.11.18.15; Mon, 24 Jan 2022 11:18:29 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243158AbiAXNaC (ORCPT + 99 others); Mon, 24 Jan 2022 08:30:02 -0500 Received: from foss.arm.com ([217.140.110.172]:34318 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243148AbiAXNaB (ORCPT ); Mon, 24 Jan 2022 08:30:01 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 41F41D6E; Mon, 24 Jan 2022 05:30:01 -0800 (PST) Received: from e113632-lin (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id C8D363F774; Mon, 24 Jan 2022 05:29:59 -0800 (PST) From: Valentin Schneider To: Dietmar Eggemann , linux-kernel@vger.kernel.org Cc: John Keeping , Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Steven Rostedt , Ben Segall , Mel Gorman , Daniel Bristot de Oliveira Subject: Re: [PATCH] sched/rt: Plug rt_mutex_setprio() vs push_rt_task() race In-Reply-To: References: <20220120194037.650433-1-valentin.schneider@arm.com> Date: Mon, 24 Jan 2022 13:29:57 +0000 Message-ID: <875yq945yi.mognet@arm.com> MIME-Version: 1.0 Content-Type: text/plain Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 24/01/22 10:37, Dietmar Eggemann wrote: > On 20/01/2022 20:40, Valentin Schneider wrote: > > [...] > >> diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c >> index 7b4f4fbbb404..48fc8c04b038 100644 >> --- a/kernel/sched/rt.c >> +++ b/kernel/sched/rt.c >> @@ -2026,6 +2026,16 @@ static int push_rt_task(struct rq *rq, bool pull) >> return 0; >> >> retry: >> + /* >> + * It's possible that the next_task slipped in of >> + * higher priority than current. If that's the case >> + * just reschedule current. >> + */ >> + if (unlikely(next_task->prio < rq->curr->prio)) { >> + resched_curr(rq); >> + return 0; >> + } > > If we do this before `is_migration_disabled(next_task), shouldn't then > the related condition in push_dl_task() also be moved up? > > if (dl_task(rq->curr) && > dl_time_before(next_task->dl.deadline, rq->curr->dl.deadline) && > rq->curr->nr_cpus_allowed > 1) > > To enforce resched_curr(rq) in the `is_migration_disabled(next_task)` > case there as well? > I'm not sure if we can hit the same issue with DL since DL doesn't have the push irqwork. If there are DL tasks on the rq when current gets demoted, switched_from_dl() won't queue pull_dl_task(). That said, if say we have DL tasks on the rq and demote the current DL task to RT, do we currently have anything that will call resched_curr() (I'm looking at the rt_mutex path)? switched_to_fair() has a resched_curr() (which helps for the RT -> CFS case), I don't see anything that would give us that in switched_from_dl() / switched_to_rt(), or am I missing something? >> + >> if (is_migration_disabled(next_task)) { >> struct task_struct *push_task = NULL; >> int cpu; >> @@ -2033,6 +2043,17 @@ static int push_rt_task(struct rq *rq, bool pull) >> if (!pull || rq->push_busy) >> return 0; >> >> + /* >> + * Per the above priority check, curr is at least RT. If it's >> + * of a higher class than RT, invoking find_lowest_rq() on it >> + * doesn't make sense. >> + * >> + * Note that the stoppers are masqueraded as SCHED_FIFO >> + * (cf. sched_set_stop_task()), so we can't rely on rt_task(). >> + */ >> + if (rq->curr->sched_class != &rt_sched_class) > > s/ != / > / ... since the `unlikely(next_task->prio < rq->curr->prio)` > already filters tasks from lower sched classes (CFS)? > != points out we won't invoke find_lowest_rq() on anything that isn't RT, which makes it a bit clearer IMO, and it's not like either of those comparisons is more expensive than the other :) >> + return 0; >> + > > [...]