at v5.3 2.6 kB view raw
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 16PyMODINIT_FUNC initperf_trace_context(void); 17#else 18#define _PyCapsule_GetPointer(arg1, arg2) \ 19 PyCapsule_GetPointer((arg1), (arg2)) 20 21PyMODINIT_FUNC PyInit_perf_trace_context(void); 22#endif 23 24static 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 39static 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 55static 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 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 81#if PY_MAJOR_VERSION < 3 82PyMODINIT_FUNC initperf_trace_context(void) 83{ 84 (void) Py_InitModule("perf_trace_context", ContextMethods); 85} 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