treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156
[linux-block.git] / tools / perf / scripts / python / Perf-Trace-Util / Context.c
CommitLineData
1a59d1b8 1// SPDX-License-Identifier: GPL-2.0-or-later
7e4b21b8 2/*
133dc4c3 3 * Context.c. Python interfaces for perf script.
7e4b21b8
TZ
4 *
5 * Copyright (C) 2010 Tom Zanussi <tzanussi@gmail.com>
7e4b21b8
TZ
6 */
7
8#include <Python.h>
9#include "../../../perf.h"
10#include "../../../util/trace-event.h"
11
66dfdff0
12#if PY_MAJOR_VERSION < 3
13#define _PyCapsule_GetPointer(arg1, arg2) \
14 PyCObject_AsVoidPtr(arg1)
15
7e4b21b8 16PyMODINIT_FUNC initperf_trace_context(void);
66dfdff0
17#else
18#define _PyCapsule_GetPointer(arg1, arg2) \
19 PyCapsule_GetPointer((arg1), (arg2))
20
21PyMODINIT_FUNC PyInit_perf_trace_context(void);
22#endif
7e4b21b8 23
316c7136 24static PyObject *perf_trace_context_common_pc(PyObject *obj, PyObject *args)
7e4b21b8
TZ
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
66dfdff0 33 scripting_context = _PyCapsule_GetPointer(context, NULL);
7e4b21b8
TZ
34 retval = common_pc(scripting_context);
35
36 return Py_BuildValue("i", retval);
37}
38
316c7136 39static PyObject *perf_trace_context_common_flags(PyObject *obj,
7e4b21b8
TZ
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
66dfdff0 49 scripting_context = _PyCapsule_GetPointer(context, NULL);
7e4b21b8
TZ
50 retval = common_flags(scripting_context);
51
52 return Py_BuildValue("i", retval);
53}
54
316c7136 55static PyObject *perf_trace_context_common_lock_depth(PyObject *obj,
7e4b21b8
TZ
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
66dfdff0 65 scripting_context = _PyCapsule_GetPointer(context, NULL);
7e4b21b8
TZ
66 retval = common_lock_depth(scripting_context);
67
68 return Py_BuildValue("i", retval);
69}
70
71static 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
66dfdff0 81#if PY_MAJOR_VERSION < 3
7e4b21b8
TZ
82PyMODINIT_FUNC initperf_trace_context(void)
83{
84 (void) Py_InitModule("perf_trace_context", ContextMethods);
85}
66dfdff0
86#else
87PyMODINIT_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