113 lines · 2.4 KB · Text
RawDownload
// SPDX-License-Identifier: GPL-2.0-only/// Make sure pm_runtime_* calls do not unnecessarily use IS_ERR_VALUE///// Keywords: pm_runtime// Confidence: Medium// Copyright (C) 2013 Texas Instruments Incorporated -// URL: https://coccinelle.gitlabpages.inria.fr/website// Options: --include-headers virtual patchvirtual contextvirtual orgvirtual report //----------------------------------------------------------//  Detection//---------------------------------------------------------- @runtime_bad_err_handle exists@expression ret;position p;@@(ret@p = \(pm_runtime_idle\|	pm_runtime_suspend\|	pm_runtime_autosuspend\|	pm_runtime_resume\|	pm_request_idle\|	pm_request_resume\|	pm_request_autosuspend\|	pm_runtime_get\|	pm_runtime_get_sync\|	pm_runtime_put\|	pm_runtime_put_autosuspend\|	pm_runtime_put_sync\|	pm_runtime_put_sync_suspend\|	pm_runtime_put_sync_autosuspend\|	pm_runtime_set_active\|	pm_schedule_suspend\|	pm_generic_runtime_suspend\|	pm_generic_runtime_resume\)(...);...IS_ERR_VALUE(ret)...) //----------------------------------------------------------//  For context mode//---------------------------------------------------------- @depends on context@identifier pm_runtime_api;expression ret;position runtime_bad_err_handle.p;@@(ret@p = pm_runtime_api(...);...* IS_ERR_VALUE(ret)...) //----------------------------------------------------------//  For patch mode//---------------------------------------------------------- @depends on patch@identifier pm_runtime_api;expression ret;position runtime_bad_err_handle.p;@@(ret@p = pm_runtime_api(...);...- IS_ERR_VALUE(ret)+ ret < 0...) //----------------------------------------------------------//  For org and report mode//---------------------------------------------------------- @r depends on (org || report) exists@position p1, p2;identifier pm_runtime_api;expression ret;position runtime_bad_err_handle.p;@@(ret@p = pm_runtime_api@p1(...);...IS_ERR_VALUE@p2(ret)...) @script:python depends on org@p1 << r.p1;p2 << r.p2;pm_runtime_api << r.pm_runtime_api;@@ cocci.print_main(pm_runtime_api,p1)cocci.print_secs("IS_ERR_VALUE",p2) @script:python depends on report@p1 << r.p1;p2 << r.p2;pm_runtime_api << r.pm_runtime_api;@@ msg = "%s returns < 0 as error. Unnecessary IS_ERR_VALUE at line %s" % (pm_runtime_api, p2[0].line)coccilib.report.print_report(p1[0],msg)