From: Markus Elfring <elfring@xxxxxxxxxxxxxxxxxxxxx> Date: Fri, 2 Feb 2024 09:48:11 +0100 A wrapper macro is available since the commit 0a31bd5f2bbb6473ef9d24f0063ca91cfa678b64 ("KMEM_CACHE(): simplify slab cache creation"). Provide design options for the adjustment of affected source code by the means of the semantic patch language (Coccinelle software). Signed-off-by: Markus Elfring <elfring@xxxxxxxxxxxxxxxxxxxxx> --- v2: * The reference for the previous commit was adjusted in the patch description. * A constraint was added for the metavariable “text” also based on information in a hint by Julia Lawall from 2018-02-17. [Cocci] Clarification for scripted SmPL constraints https://lore.kernel.org/cocci/alpine.DEB.2.20.1802171531330.2205@hadrien/ scripts/coccinelle/api/use_KMEM_CACHE.cocci | 53 +++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 scripts/coccinelle/api/use_KMEM_CACHE.cocci diff --git a/scripts/coccinelle/api/use_KMEM_CACHE.cocci b/scripts/coccinelle/api/use_KMEM_CACHE.cocci new file mode 100644 index 000000000000..e158e4c7c1d1 --- /dev/null +++ b/scripts/coccinelle/api/use_KMEM_CACHE.cocci @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: GPL-2.0 +/// Simplify a function call by using a known wrapper macro. +// +// Keywords: wrapper macro conversion cache creation +// Confidence: High +// Options: --no-includes --include-headers + +virtual context, patch, report, org + +@initialize:python@ +@@ +def is_equal(text, id): + return True if text[1:-1] == id else False + +@depends on context disable sizeof_type_expr@ +expression alignment, flags; +identifier id; +constant char[] text: script:python(id) { is_equal(text, id) }; +@@ +*kmem_cache_create(text, sizeof(struct id), alignment, flags, NULL) + +@depends on patch disable sizeof_type_expr@ +expression alignment, flags; +identifier id; +constant char[] text: script:python(id) { is_equal(text, id) }; +@@ +-kmem_cache_create ++KMEM_CACHE + ( +-text, sizeof(struct + id +-), alignment + , flags +-, NULL + ) + +@x depends on org || report disable sizeof_type_expr@ +expression alignment, flags; +identifier id; +constant char[] text: script:python(id) { is_equal(text, id) }; +position p; +@@ + kmem_cache_create@p(text, sizeof(struct id), alignment, flags, NULL) + +@script:python depends on org@ +p << x.p; +@@ +coccilib.org.print_todo(p[0], "WARNING: opportunity for KMEM_CACHE()") + +@script:python depends on report@ +p << x.p; +@@ +coccilib.report.print_report(p[0], "WARNING: opportunity for KMEM_CACHE()") -- 2.43.0