17e4b21b8STom Zanussi /* 2133dc4c3SIngo Molnar * Context.c. Python interfaces for perf script. 37e4b21b8STom Zanussi * 47e4b21b8STom Zanussi * Copyright (C) 2010 Tom Zanussi <[email protected]> 57e4b21b8STom Zanussi * 67e4b21b8STom Zanussi * This program is free software; you can redistribute it and/or modify 77e4b21b8STom Zanussi * it under the terms of the GNU General Public License as published by 87e4b21b8STom Zanussi * the Free Software Foundation; either version 2 of the License, or 97e4b21b8STom Zanussi * (at your option) any later version. 107e4b21b8STom Zanussi * 117e4b21b8STom Zanussi * This program is distributed in the hope that it will be useful, 127e4b21b8STom Zanussi * but WITHOUT ANY WARRANTY; without even the implied warranty of 137e4b21b8STom Zanussi * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 147e4b21b8STom Zanussi * GNU General Public License for more details. 157e4b21b8STom Zanussi * 167e4b21b8STom Zanussi * You should have received a copy of the GNU General Public License 177e4b21b8STom Zanussi * along with this program; if not, write to the Free Software 187e4b21b8STom Zanussi * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 197e4b21b8STom Zanussi * 207e4b21b8STom Zanussi */ 217e4b21b8STom Zanussi 227e4b21b8STom Zanussi #include <Python.h> 237e4b21b8STom Zanussi #include "../../../perf.h" 247e4b21b8STom Zanussi #include "../../../util/trace-event.h" 257e4b21b8STom Zanussi 26*66dfdff0SJaroslav Škarvada #if PY_MAJOR_VERSION < 3 27*66dfdff0SJaroslav Škarvada #define _PyCapsule_GetPointer(arg1, arg2) \ 28*66dfdff0SJaroslav Škarvada PyCObject_AsVoidPtr(arg1) 29*66dfdff0SJaroslav Škarvada 307e4b21b8STom Zanussi PyMODINIT_FUNC initperf_trace_context(void); 31*66dfdff0SJaroslav Škarvada #else 32*66dfdff0SJaroslav Škarvada #define _PyCapsule_GetPointer(arg1, arg2) \ 33*66dfdff0SJaroslav Škarvada PyCapsule_GetPointer((arg1), (arg2)) 34*66dfdff0SJaroslav Škarvada 35*66dfdff0SJaroslav Škarvada PyMODINIT_FUNC PyInit_perf_trace_context(void); 36*66dfdff0SJaroslav Škarvada #endif 377e4b21b8STom Zanussi 38316c7136SArnaldo Carvalho de Melo static PyObject *perf_trace_context_common_pc(PyObject *obj, PyObject *args) 397e4b21b8STom Zanussi { 407e4b21b8STom Zanussi static struct scripting_context *scripting_context; 417e4b21b8STom Zanussi PyObject *context; 427e4b21b8STom Zanussi int retval; 437e4b21b8STom Zanussi 447e4b21b8STom Zanussi if (!PyArg_ParseTuple(args, "O", &context)) 457e4b21b8STom Zanussi return NULL; 467e4b21b8STom Zanussi 47*66dfdff0SJaroslav Škarvada scripting_context = _PyCapsule_GetPointer(context, NULL); 487e4b21b8STom Zanussi retval = common_pc(scripting_context); 497e4b21b8STom Zanussi 507e4b21b8STom Zanussi return Py_BuildValue("i", retval); 517e4b21b8STom Zanussi } 527e4b21b8STom Zanussi 53316c7136SArnaldo Carvalho de Melo static PyObject *perf_trace_context_common_flags(PyObject *obj, 547e4b21b8STom Zanussi PyObject *args) 557e4b21b8STom Zanussi { 567e4b21b8STom Zanussi static struct scripting_context *scripting_context; 577e4b21b8STom Zanussi PyObject *context; 587e4b21b8STom Zanussi int retval; 597e4b21b8STom Zanussi 607e4b21b8STom Zanussi if (!PyArg_ParseTuple(args, "O", &context)) 617e4b21b8STom Zanussi return NULL; 627e4b21b8STom Zanussi 63*66dfdff0SJaroslav Škarvada scripting_context = _PyCapsule_GetPointer(context, NULL); 647e4b21b8STom Zanussi retval = common_flags(scripting_context); 657e4b21b8STom Zanussi 667e4b21b8STom Zanussi return Py_BuildValue("i", retval); 677e4b21b8STom Zanussi } 687e4b21b8STom Zanussi 69316c7136SArnaldo Carvalho de Melo static PyObject *perf_trace_context_common_lock_depth(PyObject *obj, 707e4b21b8STom Zanussi PyObject *args) 717e4b21b8STom Zanussi { 727e4b21b8STom Zanussi static struct scripting_context *scripting_context; 737e4b21b8STom Zanussi PyObject *context; 747e4b21b8STom Zanussi int retval; 757e4b21b8STom Zanussi 767e4b21b8STom Zanussi if (!PyArg_ParseTuple(args, "O", &context)) 777e4b21b8STom Zanussi return NULL; 787e4b21b8STom Zanussi 79*66dfdff0SJaroslav Škarvada scripting_context = _PyCapsule_GetPointer(context, NULL); 807e4b21b8STom Zanussi retval = common_lock_depth(scripting_context); 817e4b21b8STom Zanussi 827e4b21b8STom Zanussi return Py_BuildValue("i", retval); 837e4b21b8STom Zanussi } 847e4b21b8STom Zanussi 857e4b21b8STom Zanussi static PyMethodDef ContextMethods[] = { 867e4b21b8STom Zanussi { "common_pc", perf_trace_context_common_pc, METH_VARARGS, 877e4b21b8STom Zanussi "Get the common preempt count event field value."}, 887e4b21b8STom Zanussi { "common_flags", perf_trace_context_common_flags, METH_VARARGS, 897e4b21b8STom Zanussi "Get the common flags event field value."}, 907e4b21b8STom Zanussi { "common_lock_depth", perf_trace_context_common_lock_depth, 917e4b21b8STom Zanussi METH_VARARGS, "Get the common lock depth event field value."}, 927e4b21b8STom Zanussi { NULL, NULL, 0, NULL} 937e4b21b8STom Zanussi }; 947e4b21b8STom Zanussi 95*66dfdff0SJaroslav Škarvada #if PY_MAJOR_VERSION < 3 967e4b21b8STom Zanussi PyMODINIT_FUNC initperf_trace_context(void) 977e4b21b8STom Zanussi { 987e4b21b8STom Zanussi (void) Py_InitModule("perf_trace_context", ContextMethods); 997e4b21b8STom Zanussi } 100*66dfdff0SJaroslav Škarvada #else 101*66dfdff0SJaroslav Škarvada PyMODINIT_FUNC PyInit_perf_trace_context(void) 102*66dfdff0SJaroslav Škarvada { 103*66dfdff0SJaroslav Škarvada static struct PyModuleDef moduledef = { 104*66dfdff0SJaroslav Škarvada PyModuleDef_HEAD_INIT, 105*66dfdff0SJaroslav Škarvada "perf_trace_context", /* m_name */ 106*66dfdff0SJaroslav Škarvada "", /* m_doc */ 107*66dfdff0SJaroslav Škarvada -1, /* m_size */ 108*66dfdff0SJaroslav Škarvada ContextMethods, /* m_methods */ 109*66dfdff0SJaroslav Škarvada NULL, /* m_reload */ 110*66dfdff0SJaroslav Škarvada NULL, /* m_traverse */ 111*66dfdff0SJaroslav Škarvada NULL, /* m_clear */ 112*66dfdff0SJaroslav Škarvada NULL, /* m_free */ 113*66dfdff0SJaroslav Škarvada }; 114*66dfdff0SJaroslav Škarvada return PyModule_Create(&moduledef); 115*66dfdff0SJaroslav Škarvada } 116*66dfdff0SJaroslav Škarvada #endif 117