Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp2593251ybl; Thu, 29 Aug 2019 10:12:10 -0700 (PDT) X-Google-Smtp-Source: APXvYqxOc3jdAQX9HAZZYA20ksAGVhvq9bR2pdQjeYFhxXPDAsGyTgXlbJ2sa9mBbEPx2hGR70KB X-Received: by 2002:a65:638c:: with SMTP id h12mr9156782pgv.436.1567098730240; Thu, 29 Aug 2019 10:12:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1567098730; cv=none; d=google.com; s=arc-20160816; b=st0e0z3XIw9alJ3Hdui4hTLED3AcbVo3RB7qabJpEWH0bYYDSU/b1QBFKUTpSKha5M iBoa1pJ2gVy60N/D50tu/QW9lKYmekRIWLa+0WtEqZHihjigWEmwv8r06VWagiwtQuzW vv7w0afeYlnTsefPpNKX8ES6yA+CqDYeLsvbose1wL/qgTYD5XUXcy+RauvoznoiMo0G mBnjgK2YTXOZIP0UqYXpDLSp3qwU4VfhvQQ1bC3N0ftSzFriq657azbPex5Wdgp5403n xLmlK/2701aNskNgP3DLszlftElO376ba5JUYgtN+HPGCwsAx++Zd3Vi1a+cX3PK/23t LEYA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=HpNYDE1F3tP7xvZy6HHQgQLZGRxzmgxL5p1Yz/TyyDk=; b=KtTfx0rLFGAGXACXkx40bBdTprZBotrU6HBxwtqS0lQXAh9KguZC6OcUDfnBinyYrz EU/s1DWu9UdTGuXJNLzCt1FrJUMKJBMqm58yTsW4y3DWuyyLYNFFxcMbcnS6WX+HiQ6e hHgbDJIw8FvyhY8d2/wg74lBZAQ07aSpt63aa1bopZ1cmxzncU1wRgOJmd8pbCYltwFj GdAMmjVR9l9sAdg61+fuafLlEY2fIjSGV2cb5B1uP2WRHlISiZX7CL7uqXHdlz+urfN5 sSQwH0GdY9jxADDVWxKO8oWsOOG0ZpOiV2/2a664LovhlgGTLgJuPcfYbZWEMwcSoTVw KxnQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b5si2418394plz.51.2019.08.29.10.11.54; Thu, 29 Aug 2019 10:12:10 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727899AbfH2RK0 (ORCPT + 99 others); Thu, 29 Aug 2019 13:10:26 -0400 Received: from mail-wm1-f67.google.com ([209.85.128.67]:53664 "EHLO mail-wm1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726739AbfH2RK0 (ORCPT ); Thu, 29 Aug 2019 13:10:26 -0400 Received: by mail-wm1-f67.google.com with SMTP id 10so4502255wmp.3 for ; Thu, 29 Aug 2019 10:10:25 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HpNYDE1F3tP7xvZy6HHQgQLZGRxzmgxL5p1Yz/TyyDk=; b=krinNXqi6tsfS8peQYdBHFAgmKdll1R6FlHPQg2gxwwYHZCUGg7EcOWyDa/zPci9nX PL5CRcdTOELlbDHXpMwgJQv/04htOARDgy2YGp2AZLs4a1Vn8ArN0pDl6IcO2LBJxY70 Ul4TAhCLnIadtVXvgFu+A1DaLjYRbQsKzYuG8+XR4Gk+5XK0UOXIo9+S7YLR6CAKz5Nz Ckkji5uR0D0vC8Z2kiSqd1YJa7tKJbrGb+yM9C2jzDbaX0tlG4/Rlcgahmqxptt44T5h 82awHxz7FOtyGmsApFtDIXQrkkZrcfEbt4o1EENm0iarv2GwrZ5Y4NziBfMom6AfcuF8 NWXg== X-Gm-Message-State: APjAAAVOrctnIXH8WTYfYm/oUTN0qRDX0ubDTPPIhHwYvLZXPTy2MAH8 cB9KxCqdOd502BQdK01pO0ZN1kIdBLA= X-Received: by 2002:a1c:8083:: with SMTP id b125mr5664275wmd.100.1567098624277; Thu, 29 Aug 2019 10:10:24 -0700 (PDT) Received: from green.intra.ispras.ru (bran.ispras.ru. [83.149.199.196]) by smtp.googlemail.com with ESMTPSA id g26sm2210892wmh.32.2019.08.29.10.10.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 29 Aug 2019 10:10:23 -0700 (PDT) From: Denis Efremov To: linux-kernel@vger.kernel.org, cocci@systeme.lip6.fr Cc: Denis Efremov , Julia Lawall , Gilles Muller , Nicolas Palix , Michal Marek , Markus Elfring , Joe Perches , Rasmus Villemoes Subject: [PATCH v2] scripts: coccinelle: check for !(un)?likely usage Date: Thu, 29 Aug 2019 20:10:13 +0300 Message-Id: <20190829171013.22956-1-efremov@linux.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190825130536.14683-1-efremov@linux.com> References: <20190825130536.14683-1-efremov@linux.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch adds coccinelle script for detecting !likely and !unlikely usage. These notations are confusing. It's better to replace !likely(x) with unlikely(!x) and !unlikely(x) with likely(!x) for readability. The rule transforms !likely(x) to unlikely(!x) based on this logic: !likely(x) iff !__builtin_expect(!!(x), 1) iff __builtin_expect(!!!(x), 0) iff unlikely(!x) For !unlikely(x) to likely(!x): !unlikely(x) iff !__builtin_expect(!!(x), 0) iff __builtin_expect(!!!(x), 1) iff likely(!x) Signed-off-by: Denis Efremov Cc: Julia Lawall Cc: Gilles Muller Cc: Nicolas Palix Cc: Michal Marek Cc: Markus Elfring Cc: Joe Perches Cc: Rasmus Villemoes --- scripts/coccinelle/misc/neg_unlikely.cocci | 89 ++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 scripts/coccinelle/misc/neg_unlikely.cocci diff --git a/scripts/coccinelle/misc/neg_unlikely.cocci b/scripts/coccinelle/misc/neg_unlikely.cocci new file mode 100644 index 000000000000..9aac0a7ff042 --- /dev/null +++ b/scripts/coccinelle/misc/neg_unlikely.cocci @@ -0,0 +1,89 @@ +// SPDX-License-Identifier: GPL-2.0-only +/// Use unlikely(!x) instead of !likely(x) and vice versa. +/// Notations !unlikely(x) and !likely(x) are confusing. +// +// Confidence: High +// Copyright: (C) 2019 Denis Efremov, ISPRAS. +// Options: --no-includes --include-headers + +virtual patch +virtual context +virtual org +virtual report + +//---------------------------------------------------------- +// For context mode +//---------------------------------------------------------- + +@depends on context disable unlikely@ +expression E; +@@ + +*! \( likely \| unlikely \) (E) + +//---------------------------------------------------------- +// For patch mode +//---------------------------------------------------------- + +@depends on patch disable unlikely@ +expression E; +@@ + +( +-!likely(!E) ++unlikely(E) +| +-!likely(E) ++unlikely(!E) +| +-!unlikely(!E) ++likely(E) +| +-!unlikely(E) ++likely(!E) +) + +//---------------------------------------------------------- +// For org and report mode +//---------------------------------------------------------- + +@r1 depends on (org || report) disable unlikely@ +expression E; +position p; +@@ + +!likely@p(E) + +@r2 depends on (org || report) disable unlikely@ +expression E; +position p; +@@ + +!unlikely@p(E) + +@script:python depends on org && r1@ +p << r1.p; +@@ + +coccilib.org.print_todo(p[0], "unlikely(!x) is more readable than !likely(x)") + +@script:python depends on org && r2@ +p << r2.p; +@@ + +coccilib.org.print_todo(p[0], "likely(!x) is more readable than !unlikely(x)") + +@script:python depends on report && r1@ +p << r1.p; +@@ + +coccilib.report.print_report(p[0], + "unlikely(!x) is more readable than !likely(x)") + +@script:python depends on report && r2@ +p << r2.p; +@@ + +coccilib.report.print_report(p[0], + "likely(!x) is more readable than !unlikely(x)") + -- 2.21.0