From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mta1.migadu.com (out-235.mta1.migadu.com [95.215.58.235]) (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 E010B217704 for ; Sun, 6 Sep 2026 17:10:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.235 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788714654; cv=none; b=Qn6Os4vAAo02fjtTNXyDEJ54gxHIcEtNLXEK0M2HuwRd946DsyaUFRv9M/OC12+1MxnrbakaBO+g4BfBSztnZO0NtABlUsGOrj5CPkXRngEkZe9yMu4f60mZVVe276WdOjeJ0GybCDTlUfhxi9g/z880QPG6LytELvD2OHkRark= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788714654; c=relaxed/simple; bh=uhIsSL8uAPCL9XFxrlzbBIUvS1+f1cED469hgoP/HY4=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version:Content-Type; b=YeuBNGcNRknaaylFKm83dzZtxTEfyLR0AHOdkIgYCyIT4bG6Guu7e4whe6fNEG1Hu8LnXAfan57I0CB9H1PlyOotRJXuBiXJhxiZClkIkbtnPjCaRPJhNp5toA1dkA6eLQKxOSAH8MmnG4BzZ13eKLGsV4j3ESaZPDHlOrQuorQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=aDOejnep; arc=none smtp.client-ip=95.215.58.235 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="aDOejnep" X-Envelope-To: linux-kernel@vger.kernel.org DKIM-Signature: a=rsa-sha256; bh=uhIsSL8uAPCL9XFxrlzbBIUvS1+f1cED469hgoP/HY4=; c=simple/simple; d=linux.dev; h=from:to:subject:date:message-id:mime-version:content-type; s=key1; t=1788714649; v=1; x=1789319449; b=aDOejnep06KU67Dx9YIzkSmox/de6aphd+eZKUExPOyEzK6n4i/M7IFPtgvk+TRBF42HAuIe RVG+EhJ2oyMMrw7grRRi0kPqxBmiW05PApbNNfX1k7yGXJTiVnfC2q9vbozlMmPH+0Rc0rVVP99 KOs+KB/kmCA9yY+6hecKNFQE= X-Envelope-To: linux-kernel@vger.kernel.org Received: by mta11.migadu.com with ESMTPS id ae97c8c60dec1d97; Sun, 06 Sep 2026 17:10:49 +0000 X-Mizu-Trace-ID: ae97c8c60dec1d97 X-Migadu-Flow: FLOW_OUT From: wen.yang@linux.dev To: Gabriele Monaco Cc: Nam Cao , linux-trace-kernel@vger.kernel.org, linux-kernel@vger.kernel.org, Wen Yang Subject: [PATCH v5 0/5] rv/reactors: fix lockdep warning and add tests Date: Mon, 7 Sep 2026 01:10:36 +0800 Message-Id: X-Mailer: git-send-email 2.25.1 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=UTF-8 Content-Transfer-Encoding: 8bit From: Wen Yang We occasionally hit a lockdep "Invalid wait context" warning in production when a reactor callback is preempted by a timer interrupt. On interrupt exit the scheduler takes rq->__lock (LD_WAIT_SPIN) while rv_react() still holds its wait-type-override map, which declared LD_WAIT_FREE. On any kernel where the task context has preemption enabled (not just CONFIG_PREEMPT_RT) this triggers a spurious lockdep report: [ BUG: Invalid wait context ] 1 lock held by kunit_try_catch/209: #0: (rv_react_map-wait-type-override){+.+.}-{1:1} kunit_try_catch/209 is trying to lock: ffff8a743ed3e8a0 (&rq->__lock){-...}-{2:2} This series fixes the wait type (patch 1), makes reactor registration failures propagate (patch 2), adds support for module-based reactors (patch 3), and adds KUnit/kselftest coverage (patch 4-5). Changes in v5: - Patch 1: the locking rules no longer go to Documentation/trace/rv/monitor_synthesis.rst, which is not about reactors (Gabriele); they are documented in code comments. Functional code unchanged. - Patch 2: unchanged - Patch 3: redesigned. v4 only exported the registration helpers, which is harmless while all in-tree reactors are built-in, but would let a loudable reactor module be unloaded while a monitor still refereances its react() callback. Per the suggestion in commit 3d3800b4f7 ("rv: Remove rv_reactor's reference counter"). A new selftest (patch 5) exercises it. - Patch 4: The test callback is kept busy for two timer ticks so the test also passes with HZ < 200. - Patch 5: a selftest module that registers a reactor exercises the module pinni g end to end: rmmod must fail while a monitor is attached. v4: https://lore.kernel.org/lkml/cover.1787854397.git.wen.yang@linux.dev/ v3: https://lore.kernel.org/lkml/cover.1786294920.git.wen.yang@linux.dev/ v2: https://lore.kernel.org/lkml/cover.1785695669.git.wen.yang@linux.dev/ v1: https://lore.kernel.org/lkml/cover.1781541556.git.wen.yang@linux.dev/ Wen Yang (5): rv/reactors: use LD_WAIT_SPIN as the reactor lockdep wait type rv/reactors: propagate rv_register_reactor() error from reactor init rv/reactors: export rv_register_reactor() and rv_unregister_reactor() rv/reactors: add KUnit tests for reactor registration and dispatch selftests/verification: Test loadable module-based reactor include/linux/rv.h | 3 + kernel/trace/rv/Kconfig | 12 ++ kernel/trace/rv/Makefile | 1 + kernel/trace/rv/reactor_panic.c | 3 +- kernel/trace/rv/reactor_printk.c | 3 +- kernel/trace/rv/rv.c | 5 + kernel/trace/rv/rv_reactors.c | 48 ++++++-- kernel/trace/rv/rv_reactors_kunit.c | 110 ++++++++++++++++++ tools/testing/selftests/verification/Makefile | 1 + tools/testing/selftests/verification/config | 2 + .../test.d/rv_reactor_loadable.tc | 46 ++++++++ .../verification/test_modules/Makefile | 16 +++ .../test_modules/rv_test_reactor.c | 37 ++++++ 13 files changed, 276 insertions(+), 11 deletions(-) create mode 100644 kernel/trace/rv/rv_reactors_kunit.c create mode 100644 tools/testing/selftests/verification/test.d/rv_reactor_loadable.tc create mode 100644 tools/testing/selftests/verification/test_modules/Makefile create mode 100644 tools/testing/selftests/verification/test_modules/rv_test_reactor.c base-commit: 785095112f4198de49760552374f364043c8dbdf -- 2.25.1