Received: by 2002:ab2:710b:0:b0:1ef:a325:1205 with SMTP id z11csp1434951lql; Tue, 12 Mar 2024 18:28:16 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCWrZ8b3ogSO6g7TXwUbeGkLP/9VVgsKTKBW8yoz0iUYSpW+7u0WHXp2vILy/9YdWgEa88sSKBqD06JzVyFZmq33vg5qsMuvRVhEvY22zg== X-Google-Smtp-Source: AGHT+IHtvDVqSnjAtNOaI//9E4vBWaBzk9KQof5lpzlQXYgCdn/J83+Ys2geWPBCbbOu7Kyjnc74 X-Received: by 2002:a17:902:f544:b0:1dd:75c6:faa6 with SMTP id h4-20020a170902f54400b001dd75c6faa6mr2242237plf.6.1710293296491; Tue, 12 Mar 2024 18:28:16 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1710293296; cv=pass; d=google.com; s=arc-20160816; b=L0gYEG9KWUxlkDXClq0rxdZMFlru5d9KGV3i6Tbq0wgdfYBOn0SZdED8dhkVHJov8f vacTgheDc+spODiFubcghCFIqzP7clyKfVdmMMVx/pR/M4ow0bTqKEUPjgtmwlAkwXNZ 32aIYfClpqiMw5yBevpgbjCm5DbHjTkEeKmtc9mvqsmh746RcdddjB7GjTwnY0j7P+4s KUDMaGIa/MFIS+3Zs7EhQOKSrIBNquIQGoaZOGoanZmKo1zr83MMEViFKjCKdI9ODu2k qLoT6Jm3A7acO4zMvV8cLdLp9vTGPXnFcnptsg7DR9RUnCJE9MV5dgYpmafJ3IfERGn1 b43A== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=/FazbUMp2++JK4V9me5cdA/Vo7sBxJTMKGEWaWEVy5s=; fh=M2d0eEwkotGwrCl/QH/u/fnmeLJn9ZwWPiMveRgwy+8=; b=yyg5ErqlyiIvF8MG6dB3dfw36ssg7M9K/uouxx+AgYF2ACJBZEutmyOuj57jtwIfNw ZZ4oODNbQltQQ9lPHdNV74qM7lf+coMyGNRi3CupTrZ59nIPMRGxGhm9mpofDZSU+EkI 6CCHX+EZY0Qi8K/4eovd8a3BQq4jD8R0Usg5HfzU1UO6Bdv7ibNSSLKShETLAeBz0L5a TS33PISrfnFSY8US7kpFDOrqEzKhmAdQWPGgkLJw0rlo//rlwrYU6gj7r2s6bqC5SfUQ +gXZQH5RDqHGQhmC1Zl6zJlaiKXXv8r+/RIGej/BI/3FNLi+/lC3YNAy+p3x7wrR6I2d PSQg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@joelfernandes.org header.s=google header.b="YnbbJR/y"; arc=pass (i=1 spf=pass spfdomain=joelfernandes.org dkim=pass dkdomain=joelfernandes.org); spf=pass (google.com: domain of linux-kernel+bounces-101011-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-101011-linux.lists.archive=gmail.com@vger.kernel.org" Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id jf5-20020a170903268500b001dd6bd1ba2dsi7617954plb.193.2024.03.12.18.28.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Mar 2024 18:28:16 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-101011-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@joelfernandes.org header.s=google header.b="YnbbJR/y"; arc=pass (i=1 spf=pass spfdomain=joelfernandes.org dkim=pass dkdomain=joelfernandes.org); spf=pass (google.com: domain of linux-kernel+bounces-101011-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-101011-linux.lists.archive=gmail.com@vger.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 sv.mirrors.kernel.org (Postfix) with ESMTPS id DEEDB282C9D for ; Wed, 13 Mar 2024 01:27:46 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id CFF15B664; Wed, 13 Mar 2024 01:25:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=joelfernandes.org header.i=@joelfernandes.org header.b="YnbbJR/y" Received: from mail-qv1-f50.google.com (mail-qv1-f50.google.com [209.85.219.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 670CA1B971 for ; Wed, 13 Mar 2024 01:25:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.50 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710293131; cv=none; b=F+0FikpRQaMkc3ZGMXM90cVSmj3UZSVn8k2sXb/nS/henNC/tLEuS8/Plnu5jg+XAkHcnQPSSMf64W66u8YNJO4PAYAoyXyxTnejesZx4/937vN/FwStqRYFA3UPHEAzmK4wHu7saLe5kFbwJXQl91wfqP8UsK384yJ7j2FwP80= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710293131; c=relaxed/simple; bh=jY7DsCgc8BB+eH2jvyxI0sUw6W9MrUx/z0pU0qLpZHQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=f8Y4+r6TzOZsguFe+Z03eY0Km55JqZCFyVqKpgrNHZ5PU9bo9o4UfBS9ml08Kw8gtdDfvAus02z3W0Dd1jNhrEUSxiFMdB5tglxVxLAGlKO/ahJlRMEdOvt2FxN+B3pdMDDAP9EzlgKk81QeV7v5c6CwhynMXyBDzah+4uQK9hg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=joelfernandes.org; spf=pass smtp.mailfrom=joelfernandes.org; dkim=pass (1024-bit key) header.d=joelfernandes.org header.i=@joelfernandes.org header.b=YnbbJR/y; arc=none smtp.client-ip=209.85.219.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=joelfernandes.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=joelfernandes.org Received: by mail-qv1-f50.google.com with SMTP id 6a1803df08f44-690ddcd97dbso13295126d6.2 for ; Tue, 12 Mar 2024 18:25:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joelfernandes.org; s=google; t=1710293127; x=1710897927; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/FazbUMp2++JK4V9me5cdA/Vo7sBxJTMKGEWaWEVy5s=; b=YnbbJR/ypd+L/vsTzyQCw6ygrYRH+IQyvyTCDb6z+XMZHUddwixix3YLDCh5nT/oFo QpOYbe5XPwMtYSIFctVrOwP8oCt23YWDs54tQX1e/0bMwsM8kBG5eVxqirP+e1QTPBgz ifL+tkvRfS/beR1J9uexS0h1lWLjbHpO8Xoxs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710293127; x=1710897927; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/FazbUMp2++JK4V9me5cdA/Vo7sBxJTMKGEWaWEVy5s=; b=R3AQylqaJt+X9Ad6gu7KkX+o2N6/pshpeuDhv1Ya14zQ77unZ0xWm3pHFd0WoKCMFk dMjyuiT8uNZORORhfkZeM7XJVSLxF+UamF5BWVaGy6jC3k6qZrX/zkHnPpbS5fRG5HD/ Zq5zChxA+wGzDjfbi8isyBoHpWoG+xXDyrpwTCU4txnqOXOWgal2ccCBKsN0RZHVaWEC TUi1521Ksas2fdeYfn1OeYlG+7xWjP4gpMoUFUZVZIbSeT3y4tRZZc/uVPSDk/732ukO O9SOH93k7Ncw05cCzekYIbCPhpUlolqrjAA4XTrSuG8G1PwMvhlOYzeOb0r4u0TX/A1K oNIw== X-Gm-Message-State: AOJu0YxaTAfN/zVuFYjvo1wMEiwo9d/h8RoT30vG6gemCkaieGyq7KvZ ldkAsqfsI0N/u0VLN8YaEglVIzXJSnQwQwZGx7Q9TwpWYi9Pu5L+Hk09Tgwn92Y0aRsGuxqJUqd y X-Received: by 2002:ad4:4e06:0:b0:690:c733:f027 with SMTP id dl6-20020ad44e06000000b00690c733f027mr2130618qvb.53.1710293127086; Tue, 12 Mar 2024 18:25:27 -0700 (PDT) Received: from joelbox2.. (c-98-249-43-138.hsd1.va.comcast.net. [98.249.43.138]) by smtp.gmail.com with ESMTPSA id u9-20020a05621411a900b00690314356a4sm4162132qvv.80.2024.03.12.18.25.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Mar 2024 18:25:26 -0700 (PDT) From: "Joel Fernandes (Google)" To: linux-kernel@vger.kernel.org, Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Daniel Bristot de Oliveira , Valentin Schneider Cc: Suleiman Souhlal , Youssef Esmat , David Vernet , Thomas Gleixner , "Paul E . McKenney" , joseph.salisbury@canonical.com, Luca Abeni , Tommaso Cucinotta , Vineeth Pillai , Shuah Khan , Phil Auld , "Joel Fernandes (Google)" Subject: [PATCH v2 11/15] sched/deadline: Mark DL server as unthrottled before enqueue Date: Tue, 12 Mar 2024 21:24:47 -0400 Message-Id: <20240313012451.1693807-12-joel@joelfernandes.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240313012451.1693807-1-joel@joelfernandes.org> References: <20240313012451.1693807-1-joel@joelfernandes.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit The DL server may not have had its timer started if start_dl_timer() returns 0 (say the zero-laxity time has already passed). In such cases, mark the DL task which is about to be enqueued as not throttled and cancel any previous timers, then do the enqueue. This fixes the following crash: [ 9.263331] kernel BUG at kernel/sched/deadline.c:1765! [ 9.282382] Call Trace: [ 9.282767] [ 9.283086] ? __die_body+0x62/0xb0 [ 9.283602] ? die+0x9b/0xc0 [ 9.284036] ? do_trap+0xa3/0x170 [ 9.284528] ? enqueue_dl_entity+0x45e/0x460 [ 9.285158] ? enqueue_dl_entity+0x45e/0x460 [ 9.285791] ? handle_invalid_op+0x65/0x80 [ 9.286392] ? enqueue_dl_entity+0x45e/0x460 [ 9.287021] ? exc_invalid_op+0x2f/0x40 [ 9.287585] ? asm_exc_invalid_op+0x16/0x20 [ 9.288200] ? find_later_rq+0x120/0x120 [ 9.288775] ? fair_server_init+0x40/0x40 [ 9.289364] ? enqueue_dl_entity+0x45e/0x460 [ 9.289989] ? find_later_rq+0x120/0x120 [ 9.290564] dl_task_timer+0x1d7/0x2f0 [ 9.291120] ? find_later_rq+0x120/0x120 [ 9.291695] __run_hrtimer+0x73/0x1b0 [ 9.292238] hrtimer_interrupt+0x216/0x2c0 [ 9.292841] __sysvec_apic_timer_interrupt+0x53/0x140 [ 9.293581] sysvec_apic_timer_interrupt+0x2d/0x80 [ 9.294285] asm_sysvec_apic_timer_interrupt+0x16/0x20 The crash can easily be reproduced by adding a 100ms delay as follows: +int delay_inject_count; + static void enqueue_dl_entity(struct sched_dl_entity *dl_se, int flags) { @@ -1827,6 +1830,12 @@ enqueue_dl_entity(struct sched_dl_entity *dl_se, int flags) setup_new_dl_entity(dl_se); } + // 100ms delay every 20 enqueues. + if (delay_inject_count++ > 20) { + mdelay(100); + delay_inject_count = 0; + } + /* * If we are still throttled, eg. we got replenished but are a * zero-laxity task and still got to wait, don't enqueue. Signed-off-by: Joel Fernandes (Google) --- kernel/sched/deadline.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index 5adfc15803c3..1d54231fbaa6 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c @@ -1949,6 +1949,18 @@ enqueue_dl_entity(struct sched_dl_entity *dl_se, int flags) if (dl_se->dl_throttled && start_dl_timer(dl_se)) return; + /* + * We're about to enqueue, make sure we're not ->dl_throttled! + * In case the timer was not started, say because the 0-lax time + * has passed, mark as not throttled and mark unarmed. + * Also cancel earlier timers, since letting those run is pointless. + */ + if (dl_se->dl_throttled) { + hrtimer_try_to_cancel(&dl_se->dl_timer); + dl_se->dl_defer_armed = 0; + dl_se->dl_throttled = 0; + } + __enqueue_dl_entity(dl_se); } -- 2.34.1