From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (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 0E3BAF9C0 for ; Thu, 12 Feb 2026 20:35:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770928526; cv=none; b=NGvWhxWCmTm4T6JZ1vGpIsAuD6MqokpC5V/c759zu0rn6vN/JykMv3L0i9Kgq1FE+9ZpClI0I+FB0IIw/LLcL2Xyz7nLzFhvlKVYdN8Na+pAxw+Bmc1x8W8SP7+apznxNeCGIk+SNYcfkXUkzzgbRApealp4aHNmRxJHqvDkHOE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770928526; c=relaxed/simple; bh=R83M+9zkJpGynEne5+3eef+dMCgnVfeKCpxfMglq3/o=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=mtGOCAT1i2K1ZsHlsE+j1kN4pzPJPqkafhuLu4WkJQaGV6X1O/O2KCW9HLXHpdwhOj1y5Wj0OWsbXqDkCpK8ZReqYJnNV98zxfX5Z7nEEIWvHHOxQUz30wnlhaSu2nbIoL2Xu2o3uvXF3CfskowIg2ybPpC2pyDfIyTXrNoXVQY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=C781fn0I; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="C781fn0I" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-4801c2fae63so1943635e9.2 for ; Thu, 12 Feb 2026 12:35:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770928523; x=1771533323; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=zpAacTP5JLo7sAlB5AFXoAjI6I/GwJuLqWVWUd/B78k=; b=C781fn0IzlmGZT2sW01QHxV5BG+0s3iF57+sTDExbFT8gdB5WFbdMjrE7PvQOepJIa 2u433ewe523SQ0bzLp3b9ESPerA1MeergNUemw+GkV8JrUNdqmrvc/OtAACZe4leuQdn 3lxISYiNkFEaa/bYiXhrvDVtPAw259Rqr0DSWO9GjhM309i0iDwhd8cYBWvfBfJt/SN4 GtzhfM0aiUomNffoEhcZhFWywJ1gTVkCKaG9VLwXoRBRm9PkrK7u9KGdsDf4BM2K9BC0 zQKnexmkwFVXI3Qhe3mKhiGIudjyBMMBmG0Yg9A9+tcCGNGuCbLx8rVj7IP9yBzGm49o /s/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770928523; x=1771533323; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=zpAacTP5JLo7sAlB5AFXoAjI6I/GwJuLqWVWUd/B78k=; b=bxrOln14a3ZUEpQ1clYldCuhO5wFGr/2rikjXP/7sy2A5gyYHqC//ExsXC8QKSZoJ8 +7YaoWQyZ9R2Pnv2wxbIDbdwbnqDU1tLyeOpu+TTyofCpuDl7xj2Xi9Zto6kMNEGsabH TNCrx/etr/nNDL3LqkUuFPorJ8dLZz7FAwvhLpQtunIf0NXEb9OvAWW1spYoXe8Uv5AN 4531M8O+Xx94JliWNCFyplf9dlnETDLWmRxAkFuKTPfzs9EWrPBcgJcW9WUByptvx8tf Z/cuCsc3eviMrQZ8V4XiA9Ipgju0lLsy5E/irHhUWzBDVOTmef4ag0/do1CHe1biipDs EqkA== X-Gm-Message-State: AOJu0YxwWtm1PwnzdRSYue8ZBS+rPae5XE+9TlI8lDSNMtKqAZklwWXC CeEAyOeIxas+YZYTt1oQj4Pv+UM+4RgXIoadcHnqIB2VB/6npDPQWfRtdM2ZTg== X-Gm-Gg: AZuq6aIqCSPmzfxeP4gH+fSbUL8TOMxkVF09726T6J+dTaHLbZ94ERnnF1aM+G+Ivv2 CMZZyXCfw7gYxE/gWzxW5AodORPt1pFReeC7jsqmF5epX7ui1LFEtg5RGu/Gce/w8GznLfxrhUi hXGb+Jkpu4UbG0rNmp1IZodQ2Jwiee6EQg3GsN7g8+au9hLdn2/ahTDFpZ4MWnr9ofoDBO0fMK9 ++a0iu4/FTNen2ACA7s5qK4bXlJyfDY+dCCLDg6qLoKS/IwtczA2UvpP3capNVC0zWUIcTfFQK2 +vrHCSOAxyTHe7t/GhE0WTlTrl50n43GzezIncvNWqX9cusHxesDQgdv5KhddDjl+6+IO+bS1GU ZwS9oDHcoklKV9O90Ctg9PZgaDeBmBSrJbnn02IYSFe6ftcKBrM3CilwIbbuE3Qf640m74mHz/8 8RIb2oocIn3oAp5NDktzpVCtVc5nInXt64tPj0co5sXomGHZO9CnuQJJ5P2Rwg X-Received: by 2002:a05:600c:1547:b0:477:afc5:fb02 with SMTP id 5b1f17b1804b1-483710858c8mr5321985e9.21.1770928523148; Thu, 12 Feb 2026 12:35:23 -0800 (PST) Received: from rozandragon.chello.ie (188-141-5-72.dynamic.upc.ie. [188.141.5.72]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48370ac3564sm6408855e9.5.2026.02.12.12.35.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Feb 2026 12:35:22 -0800 (PST) From: David Carlier To: Tejun Heo , Andrea Righi Cc: linux-kernel@vger.kernel.org, David Carlier Subject: [PATCH 3/3] scx_userland: fix restart and stats thread lifecycle bugs Date: Thu, 12 Feb 2026 20:35:19 +0000 Message-ID: <20260212203519.15091-1-devnexen@gmail.com> X-Mailer: git-send-email 2.51.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Fix three issues in scx_userland's restart path: - exit_req is not reset on restart, causing sched_main_loop() to exit immediately without doing any scheduling work. - stats_printer thread handle is local to spawn_stats_thread(), making it impossible to join from main(). Promote it to file scope. - The stats thread continues reading skel->bss after the skeleton is destroyed on restart, causing a use-after-free. Join the stats thread before destroying the skeleton to ensure it has exited. Signed-off-by: David Carlier --- tools/sched_ext/scx_userland.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/sched_ext/scx_userland.c b/tools/sched_ext/scx_userland.c index 10b31020f44f..63f89b35d999 100644 --- a/tools/sched_ext/scx_userland.c +++ b/tools/sched_ext/scx_userland.c @@ -54,6 +54,7 @@ static bool verbose; static volatile int exit_req; static int enqueued_fd, dispatched_fd; +static pthread_t stats_printer; static struct scx_userland *skel; static struct bpf_link *ops_link; @@ -319,8 +320,6 @@ static void *run_stats_printer(void *arg) static int spawn_stats_thread(void) { - pthread_t stats_printer; - return pthread_create(&stats_printer, NULL, run_stats_printer, NULL); } @@ -375,6 +374,7 @@ static void pre_bootstrap(int argc, char **argv) static void bootstrap(char *comm) { + exit_req = 0; skel = SCX_OPS_OPEN(userland_ops, scx_userland); skel->rodata->num_possible_cpus = libbpf_num_possible_cpus(); @@ -428,6 +428,7 @@ int main(int argc, char **argv) exit_req = 1; bpf_link__destroy(ops_link); + pthread_join(stats_printer, NULL); ecode = UEI_REPORT(skel, uei); scx_userland__destroy(skel); -- 2.51.0