From nobody Wed Feb 11 09:21:24 2026 Received: from out-178.mta1.migadu.com (out-178.mta1.migadu.com [95.215.58.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B8B7638FF01 for ; Tue, 13 Jan 2026 17:41:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768326070; cv=none; b=NWSEsSTNGYo8YnH8sTUzHDdghvOGpc/PlnnnNtFjyyDqmIoDQmb7eL2mV9aMGitsifGZH2d+Oc0yPwdz5YP4Uwj58fo+J3vDozPGw6i/CwTFeHNls4nLQlAwdHRN0Exax4BgKDg/WJnm8o+Nv5zPp0Cm9XnTjnvUVuSeUMm3IkQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768326070; c=relaxed/simple; bh=4tF7C0/K5GxRjUtITWKZmJWWPLvfCUsYLLCaRyb7NvQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Rq6+ps2rqTqfOU3BwFLbvKSeaM1qA3R5FEYuRBxdDjmerLBnWsceb3uw4qHAjCglGRFkzcr+fA1ptEyuFvZ6TphkX8i11vKrNH6kQSJkntOXrCsVN6AWCDW5BuekoeFczMfG4Vck5siRHKhAQnuaf5VAk9du9OouVm6y9zsZnv0= 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=BDTdDvCx; arc=none smtp.client-ip=95.215.58.178 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="BDTdDvCx" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1768326067; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=UpAbv0unuTX33LMuiBZGkHJD131VDi/YMASM/w+rUBE=; b=BDTdDvCxifzsuTK7TT3mndim0/EQ+1qvj8nyVZh8z/Vq5WEw16kp1sBuKTz1f/fSPE8ly0 NYB44u5kaIFKNlFZw3+v+iQbT6uAlsVZ5KXfqRKr4jFmwXA/68GO8tDhBZwRB3BUAQbWsX vx81rvqaqa5e2OTB2QE89A+R572+s8Y= From: wen.yang@linux.dev To: Joel Granados Cc: linux-kernel@vger.kernel.org, Wen Yang Subject: [RFC PATCH 4/4] scripts/coccinelle: add sysctl_table_init.cocci Date: Wed, 14 Jan 2026 01:40:33 +0800 Message-Id: In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: Wen Yang This coccinelle script transforms traditional sysctl table initializations into the new macro-based format using SYSCTL_ENTRY and SYSCTL_RANGE_ENTRY. Suggested-by: Joel Granados Signed-off-by: Wen Yang --- .../coccinelle/api/sysctl_table_init.cocci | 519 ++++++++++++++++++ 1 file changed, 519 insertions(+) create mode 100644 scripts/coccinelle/api/sysctl_table_init.cocci diff --git a/scripts/coccinelle/api/sysctl_table_init.cocci b/scripts/cocci= nelle/api/sysctl_table_init.cocci new file mode 100644 index 000000000000..e2a1ce46329d --- /dev/null +++ b/scripts/coccinelle/api/sysctl_table_init.cocci @@ -0,0 +1,519 @@ +// SPDX-License-Identifier: GPL-2.0-only +/// Convert sysctl table initializations to use SYSCTL_ENTRY and SYSCTL_RA= NGE_ENTRY macros +/// +// Confidence: Medium +// Options: --no-includes --include-headers + +// Virtual rules for different modes +virtual patch +virtual context +virtual report +virtual org + +// =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D +// STRUCT DECLARATIONS with extra1/extra2 - Type-specific rules +// =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D + +// int type +@rule_struct_range_int depends on patch@ +expression E1, E2, E3, E4; +identifier D, I; +@@ +- struct ctl_table I =3D { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(int), +- .mode =3D E2, +- .proc_handler =3D proc_dointvec_minmax, +- .extra1 =3D E3, +- .extra2 =3D E4 +- }; ++ struct ctl_table I =3D SYSCTL_RANGE_ENTRY(E1, &D, int, E2, E3, E4); + +// unsigned int -> uint +@rule_struct_range_uint depends on patch@ +expression E1, E2, E3, E4; +identifier D, I; +@@ +- struct ctl_table I =3D { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(unsigned int), +- .mode =3D E2, +- .proc_handler =3D proc_douintvec_minmax, +- .extra1 =3D E3, +- .extra2 =3D E4 +- }; ++ struct ctl_table I =3D SYSCTL_RANGE_ENTRY(E1, &D, uint, E2, E3, E4); + +// unsigned -> uint +@rule_struct_range_unsigned depends on patch@ +expression E1, E2, E3, E4; +identifier D, I; +@@ +- struct ctl_table I =3D { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(unsigned), +- .mode =3D E2, +- .proc_handler =3D proc_douintvec_minmax, +- .extra1 =3D E3, +- .extra2 =3D E4 +- }; ++ struct ctl_table I =3D SYSCTL_RANGE_ENTRY(E1, &D, uint, E2, E3, E4); + +// long type +@rule_struct_range_long depends on patch@ +expression E1, E2, E3, E4; +identifier D, I; +@@ +- struct ctl_table I =3D { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(long), +- .mode =3D E2, +- .proc_handler =3D proc_dolongvec_minmax, +- .extra1 =3D E3, +- .extra2 =3D E4 +- }; ++ struct ctl_table I =3D SYSCTL_RANGE_ENTRY(E1, &D, long, E2, E3, E4); + +// unsigned long -> ulong +@rule_struct_range_ulong depends on patch@ +expression E1, E2, E3, E4; +identifier D, I; +@@ +- struct ctl_table I =3D { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(unsigned long), +- .mode =3D E2, +- .proc_handler =3D proc_doulongvec_minmax, +- .extra1 =3D E3, +- .extra2 =3D E4 +- }; ++ struct ctl_table I =3D SYSCTL_RANGE_ENTRY(E1, &D, ulong, E2, E3, E4); + +// unsigned char -> u8 +@rule_struct_range_u8 depends on patch@ +expression E1, E2, E3, E4; +identifier D, I; +@@ +- struct ctl_table I =3D { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(unsigned char), +- .mode =3D E2, +- .proc_handler =3D proc_dou8vec_minmax, +- .extra1 =3D E3, +- .extra2 =3D E4 +- }; ++ struct ctl_table I =3D SYSCTL_RANGE_ENTRY(E1, &D, u8, E2, E3, E4); + +// =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D +// STRUCT DECLARATIONS without extra1/extra2 - Type-specific rules +// Only match standard proc_handler: proc_dointvec, proc_douintvec, etc. +// =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D + +// int type +@rule_struct_simple_int depends on patch@ +expression E1, E2; +identifier D, I; +@@ +- struct ctl_table I =3D { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(int), +- .mode =3D E2, +- .proc_handler =3D proc_dointvec +- }; ++ struct ctl_table I =3D SYSCTL_ENTRY(E1, &D, int, E2); + +// unsigned int -> uint +@rule_struct_simple_uint depends on patch@ +expression E1, E2; +identifier D, I; +@@ +- struct ctl_table I =3D { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(unsigned int), +- .mode =3D E2, +- .proc_handler =3D proc_douintvec +- }; ++ struct ctl_table I =3D SYSCTL_ENTRY(E1, &D, uint, E2); + +// unsigned -> uint +@rule_struct_simple_unsigned depends on patch@ +expression E1, E2; +identifier D, I; +@@ +- struct ctl_table I =3D { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(unsigned), +- .mode =3D E2, +- .proc_handler =3D proc_douintvec +- }; ++ struct ctl_table I =3D SYSCTL_ENTRY(E1, &D, uint, E2); + +// long type +@rule_struct_simple_long depends on patch@ +expression E1, E2; +identifier D, I; +@@ +- struct ctl_table I =3D { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(long), +- .mode =3D E2, +- .proc_handler =3D proc_dolongvec +- }; ++ struct ctl_table I =3D SYSCTL_ENTRY(E1, &D, long, E2); + +// unsigned long -> ulong +@rule_struct_simple_ulong depends on patch@ +expression E1, E2; +identifier D, I; +@@ +- struct ctl_table I =3D { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(unsigned long), +- .mode =3D E2, +- .proc_handler =3D proc_doulongvec +- }; ++ struct ctl_table I =3D SYSCTL_ENTRY(E1, &D, ulong, E2); + +// unsigned char -> u8 +@rule_struct_simple_u8 depends on patch@ +expression E1, E2; +identifier D, I; +@@ +- struct ctl_table I =3D { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(unsigned char), +- .mode =3D E2, +- .proc_handler =3D proc_dou8vec +- }; ++ struct ctl_table I =3D SYSCTL_ENTRY(E1, &D, u8, E2); + +// =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D +// ARRAY ELEMENTS with extra1/extra2 - Type-specific rules +// =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D + +// int type +@rule_array_range_int depends on patch@ +expression E1, E2, E3, E4; +identifier D; +@@ +- { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(int), +- .mode =3D E2, +- .proc_handler =3D proc_dointvec_minmax, +- .extra1 =3D E3, +- .extra2 =3D E4 +- } ++ SYSCTL_RANGE_ENTRY(E1, &D, int, E2, E3, E4) + +// unsigned int -> uint +@rule_array_range_uint depends on patch@ +expression E1, E2, E3, E4; +identifier D; +@@ +- { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(unsigned int), +- .mode =3D E2, +- .proc_handler =3D proc_douintvec_minmax, +- .extra1 =3D E3, +- .extra2 =3D E4 +- } ++ SYSCTL_RANGE_ENTRY(E1, &D, uint, E2, E3, E4) + +// unsigned -> uint +@rule_array_range_unsigned depends on patch@ +expression E1, E2, E3, E4; +identifier D; +@@ +- { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(unsigned), +- .mode =3D E2, +- .proc_handler =3D proc_dointvec_minmax, +- .extra1 =3D E3, +- .extra2 =3D E4 +- } ++ SYSCTL_RANGE_ENTRY(E1, &D, uint, E2, E3, E4) + +// long type +@rule_array_range_long depends on patch@ +expression E1, E2, E3, E4; +identifier D; +@@ +- { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(long), +- .mode =3D E2, +- .proc_handler =3D proc_dolongvec_minmax, +- .extra1 =3D E3, +- .extra2 =3D E4 +- } ++ SYSCTL_RANGE_ENTRY(E1, &D, long, E2, E3, E4) + +// unsigned long -> ulong +@rule_array_range_ulong depends on patch@ +expression E1, E2, E3, E4; +identifier D; +@@ +- { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(unsigned long), +- .mode =3D E2, +- .proc_handler =3D proc_doulongvec_minmax, +- .extra1 =3D E3, +- .extra2 =3D E4 +- } ++ SYSCTL_RANGE_ENTRY(E1, &D, ulong, E2, E3, E4) + +// unsigned char -> u8 +@rule_array_range_u8 depends on patch@ +expression E1, E2, E3, E4; +identifier D; +@@ +- { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(unsigned char), +- .mode =3D E2, +- .proc_handler =3D proc_dou8vec_minmax, +- .extra1 =3D E3, +- .extra2 =3D E4 +- } ++ SYSCTL_RANGE_ENTRY(E1, &D, u8, E2, E3, E4) + +// =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D +// ARRAY ELEMENTS without extra1/extra2 - Type-specific rules +// =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D + +// int type +@rule_array_simple_int depends on patch@ +expression E1, E2; +identifier D; +@@ +- { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(int), +- .mode =3D E2, +- .proc_handler =3D proc_dointvec +- } ++ SYSCTL_ENTRY(E1, &D, int, E2) + +// unsigned int -> uint +@rule_array_simple_uint depends on patch@ +expression E1, E2; +identifier D; +@@ +- { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(unsigned int), +- .mode =3D E2, +- .proc_handler =3D proc_douintvec +- } ++ SYSCTL_ENTRY(E1, &D, uint, E2) + +// unsigned -> uint +@rule_array_simple_unsigned depends on patch@ +expression E1, E2; +identifier D; +@@ +- { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(unsigned), +- .mode =3D E2, +- .proc_handler =3D proc_dointvec +- } ++ SYSCTL_ENTRY(E1, &D, uint, E2) + +// long type +@rule_array_simple_long depends on patch@ +expression E1, E2; +identifier D; +@@ +- { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(long), +- .mode =3D E2, +- .proc_handler =3D proc_dolongvec +- } ++ SYSCTL_ENTRY(E1, &D, long, E2) + +// unsigned long -> ulong +@rule_array_simple_ulong depends on patch@ +expression E1, E2; +identifier D; +@@ +- { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(unsigned long), +- .mode =3D E2, +- .proc_handler =3D proc_doulongvec +- } ++ SYSCTL_ENTRY(E1, &D, ulong, E2) + +// unsigned char -> u8 +@rule_array_simple_u8 depends on patch@ +expression E1, E2; +identifier D; +@@ +- { +- .procname =3D E1, +- .data =3D &D, +- .maxlen =3D sizeof(unsigned char), +- .mode =3D E2, +- .proc_handler =3D proc_dou8vec +- } ++ SYSCTL_ENTRY(E1, &D, u8, E2) + +// =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D +// CONTEXT MODE - Generic rule to show all matches +// =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D + +@rule_context_range depends on context@ +expression E1, E2, E3, E4; +identifier D; +identifier H =3D {proc_dointvec_minmax, proc_douintvec_minmax, proc_dolong= vec_minmax, proc_doulongvec_minmax, proc_dou8vec_minmax}; +type T; +@@ +* { +* .procname =3D E1, +* .data =3D &D, +* .maxlen =3D sizeof(T), +* .mode =3D E2, +* .proc_handler =3D H, +* .extra1 =3D E3, +* .extra2 =3D E4 +* } + +@rule_context_simple depends on context@ +expression E1, E2; +identifier D; +identifier H =3D {proc_dointvec, proc_douintvec, proc_dolongvec, proc_doul= ongvec, proc_dou8vec}; +type T; +@@ +* { +* .procname =3D E1, +* .data =3D &D, +* .maxlen =3D sizeof(T), +* .mode =3D E2, +* .proc_handler =3D H +* } + +// =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D +// REPORT MODE - Generic rule to report all matches +// =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D + +@rule_report_range depends on report@ +expression E1, E2, E3, E4; +identifier D; +identifier H =3D {proc_dointvec_minmax, proc_douintvec_minmax, proc_dolong= vec_minmax, proc_doulongvec_minmax, proc_dou8vec_minmax}; +type T; +position p; +@@ +{ + .procname@p =3D E1, + .data =3D &D, + .maxlen =3D sizeof(T), + .mode =3D E2, + .proc_handler =3D H, + .extra1 =3D E3, + .extra2 =3D E4 +} + +@script:python depends on report@ +p << rule_report_range.p; +@@ +msg =3D "INFO: ctl_table initialization can use SYSCTL_RANGE_ENTRY" +coccilib.report.print_report(p[0], msg) + +@rule_report_simple depends on report@ +expression E1, E2; +identifier D; +identifier H =3D {proc_dointvec, proc_douintvec, proc_dolongvec, proc_doul= ongvec, proc_dou8vec}; +type T; +position p; +@@ +{ + .procname@p =3D E1, + .data =3D &D, + .maxlen =3D sizeof(T), + .mode =3D E2, + .proc_handler =3D H +} + +@script:python depends on report@ +p << rule_report_simple.p; +@@ +msg =3D "INFO: ctl_table initialization can use SYSCTL_ENTRY" +coccilib.report.print_report(p[0], msg) + +// =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D +// ORG MODE - Generic rule for org-mode output +// =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D + +@rule_org_range depends on org@ +expression E1, E2, E3, E4; +identifier D; +identifier H =3D {proc_dointvec_minmax, proc_douintvec_minmax, proc_dolong= vec_minmax, proc_doulongvec_minmax, proc_dou8vec_minmax}; +type T; +position p; +@@ +{ + .procname@p =3D E1, + .data =3D &D, + .maxlen =3D sizeof(T), + .mode =3D E2, + .proc_handler =3D H, + .extra1 =3D E3, + .extra2 =3D E4 +} + +@script:python depends on org@ +p << rule_org_range.p; +@@ +msg =3D "INFO: ctl_table initialization can use SYSCTL_RANGE_ENTRY" +coccilib.org.print_todo(p[0], msg) + +@rule_org_simple depends on org@ +expression E1, E2; +identifier D; +identifier H =3D {proc_dointvec, proc_douintvec, proc_dolongvec, proc_doul= ongvec, proc_dou8vec}; +type T; +position p; +@@ +{ + .procname@p =3D E1, + .data =3D &D, + .maxlen =3D sizeof(T), + .mode =3D E2, + .proc_handler =3D H +} + +@script:python depends on org@ +p << rule_org_simple.p; +@@ +msg =3D "INFO: ctl_table initialization can use SYSCTL_ENTRY" +coccilib.org.print_todo(p[0], msg) + --=20 2.25.1