cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

pm_runtime.cocci (2428B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/// Make sure pm_runtime_* calls does not use unnecessary IS_ERR_VALUE
      3///
      4// Keywords: pm_runtime
      5// Confidence: Medium
      6// Copyright (C) 2013 Texas Instruments Incorporated -
      7// URL: http://coccinelle.lip6.fr/
      8// Options: --include-headers
      9
     10virtual patch
     11virtual context
     12virtual org
     13virtual report
     14
     15//----------------------------------------------------------
     16//  Detection
     17//----------------------------------------------------------
     18
     19@runtime_bad_err_handle exists@
     20expression ret;
     21position p;
     22@@
     23(
     24ret@p = \(pm_runtime_idle\|
     25	pm_runtime_suspend\|
     26	pm_runtime_autosuspend\|
     27	pm_runtime_resume\|
     28	pm_request_idle\|
     29	pm_request_resume\|
     30	pm_request_autosuspend\|
     31	pm_runtime_get\|
     32	pm_runtime_get_sync\|
     33	pm_runtime_put\|
     34	pm_runtime_put_autosuspend\|
     35	pm_runtime_put_sync\|
     36	pm_runtime_put_sync_suspend\|
     37	pm_runtime_put_sync_autosuspend\|
     38	pm_runtime_set_active\|
     39	pm_schedule_suspend\|
     40	pm_runtime_barrier\|
     41	pm_generic_runtime_suspend\|
     42	pm_generic_runtime_resume\)(...);
     43...
     44IS_ERR_VALUE(ret)
     45...
     46)
     47
     48//----------------------------------------------------------
     49//  For context mode
     50//----------------------------------------------------------
     51
     52@depends on context@
     53identifier pm_runtime_api;
     54expression ret;
     55position runtime_bad_err_handle.p;
     56@@
     57(
     58ret@p = pm_runtime_api(...);
     59...
     60* IS_ERR_VALUE(ret)
     61...
     62)
     63
     64//----------------------------------------------------------
     65//  For patch mode
     66//----------------------------------------------------------
     67
     68@depends on patch@
     69identifier pm_runtime_api;
     70expression ret;
     71position runtime_bad_err_handle.p;
     72@@
     73(
     74ret@p = pm_runtime_api(...);
     75...
     76- IS_ERR_VALUE(ret)
     77+ ret < 0
     78...
     79)
     80
     81//----------------------------------------------------------
     82//  For org and report mode
     83//----------------------------------------------------------
     84
     85@r depends on (org || report) exists@
     86position p1, p2;
     87identifier pm_runtime_api;
     88expression ret;
     89position runtime_bad_err_handle.p;
     90@@
     91(
     92ret@p = pm_runtime_api@p1(...);
     93...
     94IS_ERR_VALUE@p2(ret)
     95...
     96)
     97
     98@script:python depends on org@
     99p1 << r.p1;
    100p2 << r.p2;
    101pm_runtime_api << r.pm_runtime_api;
    102@@
    103
    104cocci.print_main(pm_runtime_api,p1)
    105cocci.print_secs("IS_ERR_VALUE",p2)
    106
    107@script:python depends on report@
    108p1 << r.p1;
    109p2 << r.p2;
    110pm_runtime_api << r.pm_runtime_api;
    111@@
    112
    113msg = "%s returns < 0 as error. Unecessary IS_ERR_VALUE at line %s" % (pm_runtime_api, p2[0].line)
    114coccilib.report.print_report(p1[0],msg)