The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/samples/markers/probe-example.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /* probe-example.c
    2  *
    3  * Connects two functions to marker call sites.
    4  *
    5  * (C) Copyright 2007 Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
    6  *
    7  * This file is released under the GPLv2.
    8  * See the file COPYING for more details.
    9  */
   10 
   11 #include <linux/sched.h>
   12 #include <linux/kernel.h>
   13 #include <linux/module.h>
   14 #include <linux/marker.h>
   15 #include <asm/atomic.h>
   16 
   17 struct probe_data {
   18         const char *name;
   19         const char *format;
   20         marker_probe_func *probe_func;
   21 };
   22 
   23 void probe_subsystem_event(void *probe_data, void *call_data,
   24         const char *format, va_list *args)
   25 {
   26         /* Declare args */
   27         unsigned int value;
   28         const char *mystr;
   29 
   30         /* Assign args */
   31         value = va_arg(*args, typeof(value));
   32         mystr = va_arg(*args, typeof(mystr));
   33 
   34         /* Call printk */
   35         printk(KERN_INFO "Value %u, string %s\n", value, mystr);
   36 
   37         /* or count, check rights, serialize data in a buffer */
   38 }
   39 
   40 atomic_t eventb_count = ATOMIC_INIT(0);
   41 
   42 void probe_subsystem_eventb(void *probe_data, void *call_data,
   43         const char *format, va_list *args)
   44 {
   45         /* Increment counter */
   46         atomic_inc(&eventb_count);
   47 }
   48 
   49 static struct probe_data probe_array[] =
   50 {
   51         {       .name = "subsystem_event",
   52                 .format = "integer %d string %s",
   53                 .probe_func = probe_subsystem_event },
   54         {       .name = "subsystem_eventb",
   55                 .format = MARK_NOARGS,
   56                 .probe_func = probe_subsystem_eventb },
   57 };
   58 
   59 static int __init probe_init(void)
   60 {
   61         int result;
   62         int i;
   63 
   64         for (i = 0; i < ARRAY_SIZE(probe_array); i++) {
   65                 result = marker_probe_register(probe_array[i].name,
   66                                 probe_array[i].format,
   67                                 probe_array[i].probe_func, &probe_array[i]);
   68                 if (result)
   69                         printk(KERN_INFO "Unable to register probe %s\n",
   70                                 probe_array[i].name);
   71         }
   72         return 0;
   73 }
   74 
   75 static void __exit probe_fini(void)
   76 {
   77         int i;
   78 
   79         for (i = 0; i < ARRAY_SIZE(probe_array); i++)
   80                 marker_probe_unregister(probe_array[i].name,
   81                         probe_array[i].probe_func, &probe_array[i]);
   82         printk(KERN_INFO "Number of event b : %u\n",
   83                         atomic_read(&eventb_count));
   84         marker_synchronize_unregister();
   85 }
   86 
   87 module_init(probe_init);
   88 module_exit(probe_fini);
   89 
   90 MODULE_LICENSE("GPL");
   91 MODULE_AUTHOR("Mathieu Desnoyers");
   92 MODULE_DESCRIPTION("SUBSYSTEM Probe");

Cache object: 19958149a1a548df506b73ff42f0a68b


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.