mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v5] checkpatch: Check WQ_PERCPU or WQ_UNBOUND presence in alloc_workqueue() users
@ 2026-06-08 12:37 Marco Crivellari
  0 siblings, 0 replies; only message in thread
From: Marco Crivellari @ 2026-06-08 12:37 UTC (permalink / raw)
  To: linux-kernel
  Cc: Andy Whitcroft, Joe Perches, Dwaipayan Ray, Lukas Bulwahn,
	Tejun Heo, Frederic Weisbecker, Sebastian Andrzej Siewior,
	Marco Crivellari, Michal Hocko, Breno Leitao

The workqueue API introduced a new flag, WQ_PERCPU, that has to be used when
WQ_UNBOUND is not present. One of these flags must be present, but not
both of them.

To limit usage mistakes, emit a WARNING if one of the below condition is met:
- alloc_workqueue() is called without WQ_PERCPU nor WQ_UNBOUND
- alloc_workqueue() is called with both WQ_PERCPU and WQ_UNBOUND

Signed-off-by: Marco Crivellari <marco.crivellari@suse.com>
---
Changes in v5:
- Fixed "emit an ERROR" with "emit a WARNING" in the commit log

Link to v4: https://lore.kernel.org/all/20260608083711.76885-1-marco.crivellari@suse.com/

Changes in v4:
- properly align code

Link to v3: https://lore.kernel.org/all/20260605074309.49270-1-marco.crivellari@suse.com/

Changes in v3:
- code aligned to open parens

- ERROR changed with WARN

Link to v2: https://lore.kernel.org/all/20260604154447.381477-1-marco.crivellari@suse.com/

Changes in v2:
- removed $line from the test (Joe Perches)

- devm_alloc_workqueue() regex take into account also (Joe Perches)

- defined() on variables and other improvements (Joe Perches)

Link to v1: https://lore.kernel.org/all/20260603140941.320063-1-marco.crivellari@suse.com/

 scripts/checkpatch.pl | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 0492d6afc9a1..52da2dc4f467 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -7804,8 +7804,31 @@ sub process {
 			ERROR("UNINITIALIZED_PTR_WITH_FREE",
 			      "pointer '$1' with __free attribute should be initialized\n" . $herecurr);
 		}
-	}
 
+# check alloc_workqueue() parameters for WQ_PERCPU and WQ_UNBOUND uses
+		if (defined($stat) &&
+		    $stat =~ /^[ \+]\s*(?:$Lval\s*=\s*)?((?:devm_)?alloc_workqueue)\s*($balanced_parens)/) {
+
+			my $func = $1;
+			my $args = $2;
+			my $has_percpu = $args =~ /\bWQ_PERCPU\b/;
+			my $has_unbound = $args =~ /\bWQ_UNBOUND\b/;
+			my $error_msg;
+
+			if ($has_percpu && $has_unbound) {
+				$error_msg = "$func() should not contain both WQ_PERCPU and WQ_UNBOUND\n";
+			} elsif (!$has_percpu && !$has_unbound) {
+				$error_msg = "$func() must specify either WQ_PERCPU or WQ_UNBOUND\n";
+			}
+
+			if (defined($error_msg)) {
+				my $stmt_cnt = statement_rawlines($stat);
+				my $herectx = get_stat_here($linenr, $stmt_cnt, $here);
+				WARN("ALLOC_WORKQUEUE_FLAGS",
+				     $error_msg . $herectx);
+			}
+		}
+	}
 	# If we have no input at all, then there is nothing to report on
 	# so just keep quiet.
 	if ($#rawlines == -1) {
-- 
2.54.0


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-06-08 12:37 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-06-08 12:37 [PATCH v5] checkpatch: Check WQ_PERCPU or WQ_UNBOUND presence in alloc_workqueue() users Marco Crivellari

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®