treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156
[linux-block.git] / tools / perf / scripts / python / Perf-Trace-Util / Context.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * Context.c.  Python interfaces for perf script.
4  *
5  * Copyright (C) 2010 Tom Zanussi <tzanussi@gmail.com>
6  */
7
8 #include <Python.h>
9 #include "../../../perf.h"
10 #include "../../../util/trace-event.h"
11
12 #if PY_MAJOR_VERSION < 3
13 #define _PyCapsule_GetPointer(arg1, arg2) \
14   PyCObject_AsVoidPtr(arg1)
15
16 PyMODINIT_FUNC initperf_trace_context(void);
17 #else
18 #define _PyCapsule_GetPointer(arg1, arg2) \
19   PyCapsule_GetPointer((arg1), (arg2))
20
21 PyMODINIT_FUNC PyInit_perf_trace_context(void);
22 #endif
23
24 static PyObject *perf_trace_context_common_pc(PyObject *obj, PyObject *args)
25 {
26         static struct scripting_context *scripting_context;
27         PyObject *context;
28         int retval;
29
30         if (!PyArg_ParseTuple(args, "O", &context))
31                 return NULL;
32
33         scripting_context = _PyCapsule_GetPointer(context, NULL);
34         retval = common_pc(scripting_context);
35
36         return Py_BuildValue("i", retval);
37 }
38
39 static PyObject *perf_trace_context_common_flags(PyObject *obj,
40                                                  PyObject *args)
41 {
42         static struct scripting_context *scripting_context;
43         PyObject *context;
44         int retval;
45
46         if (!PyArg_ParseTuple(args, "O", &context))
47                 return NULL;
48
49         scripting_context = _PyCapsule_GetPointer(context, NULL);
50         retval = common_flags(scripting_context);
51
52         return Py_BuildValue("i", retval);
53 }
54
55 static PyObject *perf_trace_context_common_lock_depth(PyObject *obj,
56                                                       PyObject *args)
57 {
58         static struct scripting_context *scripting_context;
59         PyObject *context;
60         int retval;
61
62         if (!PyArg_ParseTuple(args, "O", &context))
63                 return NULL;
64
65         scripting_context = _PyCapsule_GetPointer(context, NULL);
66         retval = common_lock_depth(scripting_context);
67
68         return Py_BuildValue("i", retval);
69 }
70
71 static PyMethodDef ContextMethods[] = {
72         { "common_pc", perf_trace_context_common_pc, METH_VARARGS,
73           "Get the common preempt count event field value."},
74         { "common_flags", perf_trace_context_common_flags, METH_VARARGS,
75           "Get the common flags event field value."},
76         { "common_lock_depth", perf_trace_context_common_lock_depth,
77           METH_VARARGS, "Get the common lock depth event field value."},
78         { NULL, NULL, 0, NULL}
79 };
80
81 #if PY_MAJOR_VERSION < 3
82 PyMODINIT_FUNC initperf_trace_context(void)
83 {
84         (void) Py_InitModule("perf_trace_context", ContextMethods);
85 }
86 #else
87 PyMODINIT_FUNC PyInit_perf_trace_context(void)
88 {
89         static struct PyModuleDef moduledef = {
90                 PyModuleDef_HEAD_INIT,
91                 "perf_trace_context",   /* m_name */
92                 "",                     /* m_doc */
93                 -1,                     /* m_size */
94                 ContextMethods,         /* m_methods */
95                 NULL,                   /* m_reload */
96                 NULL,                   /* m_traverse */
97                 NULL,                   /* m_clear */
98                 NULL,                   /* m_free */
99         };
100         return PyModule_Create(&moduledef);
101 }
102 #endif