Print this page
    
NEX-16712 NFS dtrace providers do not support per-share filtering
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
Reviewed by: Yuri Pankon <yuri.pankov@nexenta.com>
NEX-15555 SMB2 async redesign
NEX-15061 smtorture smb2.lock.cancel.cancel is failed
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Roman Strashkin <roman.strashkin@nexenta.com>
Also follow-up change to:
 NEX-1643 dtrace provider for smbsrv (remove "done2" probes,
 which don't make sense with the new async design)
NEX-15555 SMB2 async redesign
NEX-15061 smtorture smb2.lock.cancel.cancel is failed
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Roman Strashkin <roman.strashkin@nexenta.com>
Also follow-up change to:
 NEX-1643 dtrace provider for smbsrv (remove "done2" probes,
 which don't make sense with the new async design)
NEX-1643 dtrace provider for smbsrv
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
    
      
        | Split | 
	Close | 
      
      | Expand all | 
      | Collapse all | 
    
    
          --- old/usr/src/uts/common/sys/sdt.h
          +++ new/usr/src/uts/common/sys/sdt.h
   1    1  /*
   2    2   * CDDL HEADER START
   3    3   *
   4    4   * The contents of this file are subject to the terms of the
   5    5   * Common Development and Distribution License (the "License").
   6    6   * You may not use this file except in compliance with the License.
   7    7   *
   8    8   * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9    9   * or http://www.opensolaris.org/os/licensing.
  10   10   * See the License for the specific language governing permissions
  11   11   * and limitations under the License.
  12   12   *
  13   13   * When distributing Covered Code, include this CDDL HEADER in each
  
    | 
      ↓ open down ↓ | 
    13 lines elided | 
    
      ↑ open up ↑ | 
  
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  /*
  22   22   * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
  23   23   * Copyright (c) 2013 by Delphix. All rights reserved.
       24 + * Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
  24   25   */
  25   26  
  26   27  #ifndef _SYS_SDT_H
  27   28  #define _SYS_SDT_H
  28   29  
  29   30  #include <sys/stdint.h>
  30   31  
  31   32  #ifdef  __cplusplus
  32   33  extern "C" {
  33   34  #endif
  34   35  
  35   36  #ifndef _KERNEL
  36   37  
  37   38  #define DTRACE_PROBE(provider, name) {                                  \
  38   39          extern void __dtrace_##provider##___##name(void);               \
  39   40          __dtrace_##provider##___##name();                               \
  40   41  }
  41   42  
  42   43  #define DTRACE_PROBE1(provider, name, arg1) {                           \
  43   44          extern void __dtrace_##provider##___##name(unsigned long);      \
  44   45          __dtrace_##provider##___##name((unsigned long)arg1);            \
  45   46  }
  46   47  
  47   48  #define DTRACE_PROBE2(provider, name, arg1, arg2) {                     \
  48   49          extern void __dtrace_##provider##___##name(unsigned long,       \
  49   50              unsigned long);                                             \
  50   51          __dtrace_##provider##___##name((unsigned long)arg1,             \
  51   52              (unsigned long)arg2);                                       \
  52   53  }
  53   54  
  54   55  #define DTRACE_PROBE3(provider, name, arg1, arg2, arg3) {               \
  55   56          extern void __dtrace_##provider##___##name(unsigned long,       \
  56   57              unsigned long, unsigned long);                              \
  57   58          __dtrace_##provider##___##name((unsigned long)arg1,             \
  58   59              (unsigned long)arg2, (unsigned long)arg3);                  \
  59   60  }
  60   61  
  61   62  #define DTRACE_PROBE4(provider, name, arg1, arg2, arg3, arg4) {         \
  62   63          extern void __dtrace_##provider##___##name(unsigned long,       \
  63   64              unsigned long, unsigned long, unsigned long);               \
  64   65          __dtrace_##provider##___##name((unsigned long)arg1,             \
  65   66              (unsigned long)arg2, (unsigned long)arg3,                   \
  66   67              (unsigned long)arg4);                                       \
  67   68  }
  68   69  
  69   70  #define DTRACE_PROBE5(provider, name, arg1, arg2, arg3, arg4, arg5) {   \
  70   71          extern void __dtrace_##provider##___##name(unsigned long,       \
  71   72              unsigned long, unsigned long, unsigned long, unsigned long);\
  72   73          __dtrace_##provider##___##name((unsigned long)arg1,             \
  73   74              (unsigned long)arg2, (unsigned long)arg3,                   \
  74   75              (unsigned long)arg4, (unsigned long)arg5);                  \
  75   76  }
  76   77  
  77   78  #else /* _KERNEL */
  78   79  
  79   80  #define DTRACE_PROBE(name)      {                                       \
  80   81          extern void __dtrace_probe_##name(void);                        \
  81   82          __dtrace_probe_##name();                                        \
  82   83  }
  83   84  
  84   85  #define DTRACE_PROBE1(name, type1, arg1) {                              \
  85   86          extern void __dtrace_probe_##name(uintptr_t);                   \
  86   87          __dtrace_probe_##name((uintptr_t)(arg1));                       \
  87   88  }
  88   89  
  89   90  #define DTRACE_PROBE2(name, type1, arg1, type2, arg2) {                 \
  90   91          extern void __dtrace_probe_##name(uintptr_t, uintptr_t);        \
  91   92          __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2));    \
  92   93  }
  93   94  
  94   95  #define DTRACE_PROBE3(name, type1, arg1, type2, arg2, type3, arg3) {    \
  95   96          extern void __dtrace_probe_##name(uintptr_t, uintptr_t, uintptr_t); \
  96   97          __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2),     \
  97   98              (uintptr_t)(arg3));                                         \
  98   99  }
  99  100  
 100  101  #define DTRACE_PROBE4(name, type1, arg1, type2, arg2,                   \
 101  102      type3, arg3, type4, arg4) {                                         \
 102  103          extern void __dtrace_probe_##name(uintptr_t, uintptr_t,         \
 103  104              uintptr_t, uintptr_t);                                      \
 104  105          __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2),     \
 105  106              (uintptr_t)(arg3), (uintptr_t)(arg4));                      \
 106  107  }
 107  108  
 108  109  #define DTRACE_PROBE5(name, type1, arg1, type2, arg2,                   \
 109  110      type3, arg3, type4, arg4, type5, arg5) {                            \
 110  111          extern void __dtrace_probe_##name(uintptr_t, uintptr_t,         \
 111  112              uintptr_t, uintptr_t, uintptr_t);                           \
 112  113          __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2),     \
 113  114              (uintptr_t)(arg3), (uintptr_t)(arg4), (uintptr_t)(arg5));   \
 114  115  }
 115  116  
 116  117  #define DTRACE_PROBE6(name, type1, arg1, type2, arg2,                   \
 117  118      type3, arg3, type4, arg4, type5, arg5, type6, arg6) {               \
 118  119          extern void __dtrace_probe_##name(uintptr_t, uintptr_t,         \
 119  120              uintptr_t, uintptr_t, uintptr_t, uintptr_t);                \
 120  121          __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2),     \
 121  122              (uintptr_t)(arg3), (uintptr_t)(arg4), (uintptr_t)(arg5),    \
 122  123              (uintptr_t)(arg6));                                         \
 123  124  }
 124  125  
 125  126  #define DTRACE_PROBE7(name, type1, arg1, type2, arg2, type3, arg3,      \
 126  127      type4, arg4, type5, arg5, type6, arg6, type7, arg7) {               \
 127  128          extern void __dtrace_probe_##name(uintptr_t, uintptr_t,         \
 128  129              uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);     \
 129  130          __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2),     \
 130  131              (uintptr_t)(arg3), (uintptr_t)(arg4), (uintptr_t)(arg5),    \
 131  132              (uintptr_t)(arg6), (uintptr_t)(arg7));                      \
 132  133  }
 133  134  
 134  135  #define DTRACE_PROBE8(name, type1, arg1, type2, arg2, type3, arg3,      \
 135  136      type4, arg4, type5, arg5, type6, arg6, type7, arg7, type8, arg8) {  \
 136  137          extern void __dtrace_probe_##name(uintptr_t, uintptr_t,         \
 137  138              uintptr_t, uintptr_t, uintptr_t, uintptr_t,                 \
 138  139              uintptr_t, uintptr_t);                                      \
 139  140          __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2),     \
 140  141              (uintptr_t)(arg3), (uintptr_t)(arg4), (uintptr_t)(arg5),    \
 141  142              (uintptr_t)(arg6), (uintptr_t)(arg7), (uintptr_t)(arg8));   \
 142  143  }
 143  144  
 144  145  #define DTRACE_SCHED(name)                                              \
 145  146          DTRACE_PROBE(__sched_##name);
 146  147  
 147  148  #define DTRACE_SCHED1(name, type1, arg1)                                \
 148  149          DTRACE_PROBE1(__sched_##name, type1, arg1);
 149  150  
 150  151  #define DTRACE_SCHED2(name, type1, arg1, type2, arg2)                   \
 151  152          DTRACE_PROBE2(__sched_##name, type1, arg1, type2, arg2);
 152  153  
 153  154  #define DTRACE_SCHED3(name, type1, arg1, type2, arg2, type3, arg3)      \
 154  155          DTRACE_PROBE3(__sched_##name, type1, arg1, type2, arg2, type3, arg3);
 155  156  
 156  157  #define DTRACE_SCHED4(name, type1, arg1, type2, arg2,                   \
 157  158      type3, arg3, type4, arg4)                                           \
 158  159          DTRACE_PROBE4(__sched_##name, type1, arg1, type2, arg2,         \
 159  160              type3, arg3, type4, arg4);
 160  161  
 161  162  #define DTRACE_PROC(name)                                               \
 162  163          DTRACE_PROBE(__proc_##name);
 163  164  
 164  165  #define DTRACE_PROC1(name, type1, arg1)                                 \
 165  166          DTRACE_PROBE1(__proc_##name, type1, arg1);
 166  167  
 167  168  #define DTRACE_PROC2(name, type1, arg1, type2, arg2)                    \
 168  169          DTRACE_PROBE2(__proc_##name, type1, arg1, type2, arg2);
 169  170  
 170  171  #define DTRACE_PROC3(name, type1, arg1, type2, arg2, type3, arg3)       \
 171  172          DTRACE_PROBE3(__proc_##name, type1, arg1, type2, arg2, type3, arg3);
 172  173  
 173  174  #define DTRACE_PROC4(name, type1, arg1, type2, arg2,                    \
 174  175      type3, arg3, type4, arg4)                                           \
 175  176          DTRACE_PROBE4(__proc_##name, type1, arg1, type2, arg2,          \
 176  177              type3, arg3, type4, arg4);
 177  178  
 178  179  #define DTRACE_IO(name)                                                 \
 179  180          DTRACE_PROBE(__io_##name);
 180  181  
 181  182  #define DTRACE_IO1(name, type1, arg1)                                   \
 182  183          DTRACE_PROBE1(__io_##name, type1, arg1);
 183  184  
 184  185  #define DTRACE_IO2(name, type1, arg1, type2, arg2)                      \
 185  186          DTRACE_PROBE2(__io_##name, type1, arg1, type2, arg2);
 186  187  
 187  188  #define DTRACE_IO3(name, type1, arg1, type2, arg2, type3, arg3) \
 188  189          DTRACE_PROBE3(__io_##name, type1, arg1, type2, arg2, type3, arg3);
 189  190  
 190  191  #define DTRACE_IO4(name, type1, arg1, type2, arg2,                      \
 191  192      type3, arg3, type4, arg4)                                           \
 192  193          DTRACE_PROBE4(__io_##name, type1, arg1, type2, arg2,            \
 193  194              type3, arg3, type4, arg4);
 194  195  
 195  196  #define DTRACE_ISCSI_2(name, type1, arg1, type2, arg2)                  \
 196  197          DTRACE_PROBE2(__iscsi_##name, type1, arg1, type2, arg2);
 197  198  
 198  199  #define DTRACE_ISCSI_3(name, type1, arg1, type2, arg2, type3, arg3)     \
 199  200          DTRACE_PROBE3(__iscsi_##name, type1, arg1, type2, arg2, type3, arg3);
 200  201  
 201  202  #define DTRACE_ISCSI_4(name, type1, arg1, type2, arg2,                  \
 202  203      type3, arg3, type4, arg4)                                           \
 203  204          DTRACE_PROBE4(__iscsi_##name, type1, arg1, type2, arg2,         \
 204  205              type3, arg3, type4, arg4);
 205  206  
 206  207  #define DTRACE_ISCSI_5(name, type1, arg1, type2, arg2,                  \
 207  208      type3, arg3, type4, arg4, type5, arg5)                              \
 208  209          DTRACE_PROBE5(__iscsi_##name, type1, arg1, type2, arg2,         \
 209  210              type3, arg3, type4, arg4, type5, arg5);
 210  211  
 211  212  #define DTRACE_ISCSI_6(name, type1, arg1, type2, arg2,                  \
 212  213      type3, arg3, type4, arg4, type5, arg5, type6, arg6)                 \
 213  214          DTRACE_PROBE6(__iscsi_##name, type1, arg1, type2, arg2,         \
 214  215              type3, arg3, type4, arg4, type5, arg5, type6, arg6);
 215  216  
 216  217  #define DTRACE_ISCSI_7(name, type1, arg1, type2, arg2,                  \
 217  218      type3, arg3, type4, arg4, type5, arg5, type6, arg6, type7, arg7)    \
 218  219          DTRACE_PROBE7(__iscsi_##name, type1, arg1, type2, arg2,         \
 219  220              type3, arg3, type4, arg4, type5, arg5, type6, arg6,         \
 220  221              type7, arg7);
 221  222  
 222  223  #define DTRACE_ISCSI_8(name, type1, arg1, type2, arg2,                  \
  
    | 
      ↓ open down ↓ | 
    189 lines elided | 
    
      ↑ open up ↑ | 
  
 223  224      type3, arg3, type4, arg4, type5, arg5, type6, arg6,                 \
 224  225      type7, arg7, type8, arg8)                                           \
 225  226          DTRACE_PROBE8(__iscsi_##name, type1, arg1, type2, arg2,         \
 226  227              type3, arg3, type4, arg4, type5, arg5, type6, arg6,         \
 227  228              type7, arg7, type8, arg8);
 228  229  
 229  230  #define DTRACE_NFSV3_3(name, type1, arg1, type2, arg2,                  \
 230  231      type3, arg3)                                                        \
 231  232          DTRACE_PROBE3(__nfsv3_##name, type1, arg1, type2, arg2,         \
 232  233              type3, arg3);
      234 +
 233  235  #define DTRACE_NFSV3_4(name, type1, arg1, type2, arg2,                  \
 234  236      type3, arg3, type4, arg4)                                           \
 235  237          DTRACE_PROBE4(__nfsv3_##name, type1, arg1, type2, arg2,         \
 236  238              type3, arg3, type4, arg4);
 237  239  
      240 +#define DTRACE_NFSV3_5(name, type1, arg1, type2, arg2,                  \
      241 +    type3, arg3, type4, arg4, type5, arg5)                              \
      242 +        DTRACE_PROBE5(__nfsv3_##name, type1, arg1, type2, arg2,         \
      243 +            type3, arg3, type4, arg4, type5, arg5);
      244 +
 238  245  #define DTRACE_NFSV4_1(name, type1, arg1) \
 239  246          DTRACE_PROBE1(__nfsv4_##name, type1, arg1);
 240  247  
 241  248  #define DTRACE_NFSV4_2(name, type1, arg1, type2, arg2) \
 242  249          DTRACE_PROBE2(__nfsv4_##name, type1, arg1, type2, arg2);
 243  250  
 244  251  #define DTRACE_NFSV4_3(name, type1, arg1, type2, arg2, type3, arg3) \
 245  252          DTRACE_PROBE3(__nfsv4_##name, type1, arg1, type2, arg2, type3, arg3);
 246  253  
 247      -#define DTRACE_SMB_1(name, type1, arg1) \
 248      -        DTRACE_PROBE1(__smb_##name, type1, arg1);
      254 +/*
      255 + * The SMB probes are done a little differently from the other probes
      256 + * in this file for the benefit of the libfksmbsrv USDT provider.
      257 + * See: lib/smbsrv/libfksmbsrv/common/sys/sdt.h
      258 + */
      259 +#define DTRACE_SMB_START(name, type1, arg1) \
      260 +        DTRACE_PROBE1(__smb_##name##__start, type1, arg1);
      261 +#define DTRACE_SMB_DONE(name, type1, arg1) \
      262 +        DTRACE_PROBE1(__smb_##name##__done, type1, arg1);
 249  263  
 250      -#define DTRACE_SMB_2(name, type1, arg1, type2, arg2) \
 251      -        DTRACE_PROBE2(__smb_##name, type1, arg1, type2, arg2);
      264 +#define DTRACE_SMB2_START(name, type1, arg1) \
      265 +        DTRACE_PROBE1(__smb2_##name##__start, type1, arg1);
      266 +#define DTRACE_SMB2_DONE(name, type1, arg1) \
      267 +        DTRACE_PROBE1(__smb2_##name##__done, type1, arg1);
 252  268  
 253  269  #define DTRACE_IP(name)                                         \
 254  270          DTRACE_PROBE(__ip_##name);
 255  271  
 256  272  #define DTRACE_IP1(name, type1, arg1)                                   \
 257  273          DTRACE_PROBE1(__ip_##name, type1, arg1);
 258  274  
 259  275  #define DTRACE_IP2(name, type1, arg1, type2, arg2)                      \
 260  276          DTRACE_PROBE2(__ip_##name, type1, arg1, type2, arg2);
 261  277  
 262  278  #define DTRACE_IP3(name, type1, arg1, type2, arg2, type3, arg3) \
 263  279          DTRACE_PROBE3(__ip_##name, type1, arg1, type2, arg2, type3, arg3);
 264  280  
 265  281  #define DTRACE_IP4(name, type1, arg1, type2, arg2,                      \
 266  282      type3, arg3, type4, arg4)                                           \
 267  283          DTRACE_PROBE4(__ip_##name, type1, arg1, type2, arg2,            \
 268  284              type3, arg3, type4, arg4);
 269  285  
 270  286  #define DTRACE_IP5(name, type1, arg1, type2, arg2,                      \
 271  287      type3, arg3, type4, arg4, type5, arg5)                              \
 272  288          DTRACE_PROBE5(__ip_##name, type1, arg1, type2, arg2,            \
 273  289              type3, arg3, type4, arg4, type5, arg5);
 274  290  
 275  291  #define DTRACE_IP6(name, type1, arg1, type2, arg2,                      \
 276  292      type3, arg3, type4, arg4, type5, arg5, type6, arg6)                 \
 277  293          DTRACE_PROBE6(__ip_##name, type1, arg1, type2, arg2,            \
 278  294              type3, arg3, type4, arg4, type5, arg5, type6, arg6);
 279  295  
 280  296  #define DTRACE_IP7(name, type1, arg1, type2, arg2, type3, arg3,         \
 281  297      type4, arg4, type5, arg5, type6, arg6, type7, arg7)                 \
 282  298          DTRACE_PROBE7(__ip_##name, type1, arg1, type2, arg2,            \
 283  299              type3, arg3, type4, arg4, type5, arg5, type6, arg6,         \
 284  300              type7, arg7);
 285  301  
 286  302  #define DTRACE_TCP(name)                                                \
 287  303          DTRACE_PROBE(__tcp_##name);
 288  304  
 289  305  #define DTRACE_TCP1(name, type1, arg1)                                  \
 290  306          DTRACE_PROBE1(__tcp_##name, type1, arg1);
 291  307  
 292  308  #define DTRACE_TCP2(name, type1, arg1, type2, arg2)                     \
 293  309          DTRACE_PROBE2(__tcp_##name, type1, arg1, type2, arg2);
 294  310  
 295  311  #define DTRACE_TCP3(name, type1, arg1, type2, arg2, type3, arg3)        \
 296  312          DTRACE_PROBE3(__tcp_##name, type1, arg1, type2, arg2, type3, arg3);
 297  313  
 298  314  #define DTRACE_TCP4(name, type1, arg1, type2, arg2,                     \
 299  315      type3, arg3, type4, arg4)                                           \
 300  316          DTRACE_PROBE4(__tcp_##name, type1, arg1, type2, arg2,           \
 301  317              type3, arg3, type4, arg4);
 302  318  
 303  319  #define DTRACE_TCP5(name, type1, arg1, type2, arg2,                     \
 304  320      type3, arg3, type4, arg4, type5, arg5)                              \
 305  321          DTRACE_PROBE5(__tcp_##name, type1, arg1, type2, arg2,           \
 306  322              type3, arg3, type4, arg4, type5, arg5);
 307  323  
 308  324  #define DTRACE_TCP6(name, type1, arg1, type2, arg2,                     \
 309  325      type3, arg3, type4, arg4, type5, arg5, type6, arg6)                 \
 310  326          DTRACE_PROBE6(__tcp_##name, type1, arg1, type2, arg2,           \
 311  327              type3, arg3, type4, arg4, type5, arg5, type6, arg6);
 312  328  
 313  329  #define DTRACE_UDP(name)                                                \
 314  330          DTRACE_PROBE(__udp_##name);
 315  331  
 316  332  #define DTRACE_UDP1(name, type1, arg1)                                  \
 317  333          DTRACE_PROBE1(__udp_##name, type1, arg1);
 318  334  
 319  335  #define DTRACE_UDP2(name, type1, arg1, type2, arg2)                     \
 320  336          DTRACE_PROBE2(__udp_##name, type1, arg1, type2, arg2);
 321  337  
 322  338  #define DTRACE_UDP3(name, type1, arg1, type2, arg2, type3, arg3)        \
 323  339          DTRACE_PROBE3(__udp_##name, type1, arg1, type2, arg2, type3, arg3);
 324  340  
 325  341  #define DTRACE_UDP4(name, type1, arg1, type2, arg2,                     \
 326  342      type3, arg3, type4, arg4)                                           \
 327  343          DTRACE_PROBE4(__udp_##name, type1, arg1, type2, arg2,           \
 328  344              type3, arg3, type4, arg4);
 329  345  
 330  346  #define DTRACE_UDP5(name, type1, arg1, type2, arg2,                     \
 331  347      type3, arg3, type4, arg4, type5, arg5)                              \
 332  348          DTRACE_PROBE5(__udp_##name, type1, arg1, type2, arg2,           \
 333  349              type3, arg3, type4, arg4, type5, arg5);
 334  350  
 335  351  
 336  352  #define DTRACE_SYSEVENT2(name, type1, arg1, type2, arg2)                \
 337  353          DTRACE_PROBE2(__sysevent_##name, type1, arg1, type2, arg2);
 338  354  
 339  355  #define DTRACE_XPV(name)                                                \
 340  356          DTRACE_PROBE(__xpv_##name);
 341  357  
 342  358  #define DTRACE_XPV1(name, type1, arg1)                                  \
 343  359          DTRACE_PROBE1(__xpv_##name, type1, arg1);
 344  360  
 345  361  #define DTRACE_XPV2(name, type1, arg1, type2, arg2)                     \
 346  362          DTRACE_PROBE2(__xpv_##name, type1, arg1, type2, arg2);
 347  363  
 348  364  #define DTRACE_XPV3(name, type1, arg1, type2, arg2, type3, arg3)        \
 349  365          DTRACE_PROBE3(__xpv_##name, type1, arg1, type2, arg2, type3, arg3);
 350  366  
 351  367  #define DTRACE_XPV4(name, type1, arg1, type2, arg2, type3, arg3,        \
 352  368              type4, arg4)                                                \
 353  369          DTRACE_PROBE4(__xpv_##name, type1, arg1, type2, arg2,           \
 354  370              type3, arg3, type4, arg4);
 355  371  
 356  372  #define DTRACE_FC_1(name, type1, arg1) \
 357  373          DTRACE_PROBE1(__fc_##name, type1, arg1);
 358  374  
 359  375  #define DTRACE_FC_2(name, type1, arg1, type2, arg2) \
 360  376          DTRACE_PROBE2(__fc_##name, type1, arg1, type2, arg2);
 361  377  
 362  378  #define DTRACE_FC_3(name, type1, arg1, type2, arg2, type3, arg3) \
 363  379          DTRACE_PROBE3(__fc_##name, type1, arg1, type2, arg2, type3, arg3);
 364  380  
 365  381  #define DTRACE_FC_4(name, type1, arg1, type2, arg2, type3, arg3, type4, arg4) \
 366  382          DTRACE_PROBE4(__fc_##name, type1, arg1, type2, arg2, type3, arg3, \
 367  383              type4, arg4);
 368  384  
 369  385  #define DTRACE_FC_5(name, type1, arg1, type2, arg2, type3, arg3,        \
 370  386              type4, arg4, type5, arg5)                                   \
 371  387          DTRACE_PROBE5(__fc_##name, type1, arg1, type2, arg2, type3, arg3, \
 372  388              type4, arg4, type5, arg5);
 373  389  
 374  390  #define DTRACE_SRP_1(name, type1, arg1)                                 \
 375  391          DTRACE_PROBE1(__srp_##name, type1, arg1);
 376  392  
 377  393  #define DTRACE_SRP_2(name, type1, arg1, type2, arg2)                    \
 378  394          DTRACE_PROBE2(__srp_##name, type1, arg1, type2, arg2);
 379  395  
 380  396  #define DTRACE_SRP_3(name, type1, arg1, type2, arg2, type3, arg3)       \
 381  397          DTRACE_PROBE3(__srp_##name, type1, arg1, type2, arg2, type3, arg3);
 382  398  
 383  399  #define DTRACE_SRP_4(name, type1, arg1, type2, arg2, type3, arg3,       \
 384  400              type4, arg4)                                                \
 385  401          DTRACE_PROBE4(__srp_##name, type1, arg1, type2, arg2,           \
 386  402              type3, arg3, type4, arg4);
 387  403  
 388  404  #define DTRACE_SRP_5(name, type1, arg1, type2, arg2, type3, arg3,       \
 389  405              type4, arg4, type5, arg5)                                   \
 390  406          DTRACE_PROBE5(__srp_##name, type1, arg1, type2, arg2,           \
 391  407              type3, arg3, type4, arg4, type5, arg5);
 392  408  
 393  409  #define DTRACE_SRP_6(name, type1, arg1, type2, arg2, type3, arg3,       \
 394  410              type4, arg4, type5, arg5, type6, arg6)                      \
 395  411          DTRACE_PROBE6(__srp_##name, type1, arg1, type2, arg2,           \
 396  412              type3, arg3, type4, arg4, type5, arg5, type6, arg6);
 397  413  
 398  414  #define DTRACE_SRP_7(name, type1, arg1, type2, arg2, type3, arg3,       \
 399  415              type4, arg4, type5, arg5, type6, arg6, type7, arg7)         \
 400  416          DTRACE_PROBE7(__srp_##name, type1, arg1, type2, arg2,           \
 401  417              type3, arg3, type4, arg4, type5, arg5, type6, arg6, type7, arg7);
 402  418  
 403  419  #define DTRACE_SRP_8(name, type1, arg1, type2, arg2, type3, arg3,       \
 404  420              type4, arg4, type5, arg5, type6, arg6, type7, arg7, type8, arg8) \
 405  421          DTRACE_PROBE8(__srp_##name, type1, arg1, type2, arg2,           \
 406  422              type3, arg3, type4, arg4, type5, arg5, type6, arg6,         \
 407  423              type7, arg7, type8, arg8);
 408  424  
 409  425  /*
 410  426   * The set-error SDT probe is extra static, in that we declare its fake
 411  427   * function literally, rather than with the DTRACE_PROBE1() macro.  This is
 412  428   * necessary so that SET_ERROR() can evaluate to a value, which wouldn't
 413  429   * be possible if it required multiple statements (to declare the function
 414  430   * and then call it).
 415  431   *
 416  432   * SET_ERROR() uses the comma operator so that it can be used without much
 417  433   * additional code.  For example, "return (EINVAL);" becomes
 418  434   * "return (SET_ERROR(EINVAL));".  Note that the argument will be evaluated
 419  435   * twice, so it should not have side effects (e.g. something like:
 420  436   * "return (SET_ERROR(log_error(EINVAL, info)));" would log the error twice).
 421  437   */
 422  438  extern void __dtrace_probe_set__error(uintptr_t);
 423  439  #define SET_ERROR(err) (__dtrace_probe_set__error(err), err)
 424  440  
 425  441  #endif /* _KERNEL */
 426  442  
 427  443  extern const char *sdt_prefix;
 428  444  
 429  445  typedef struct sdt_probedesc {
 430  446          char                    *sdpd_name;     /* name of this probe */
 431  447          unsigned long           sdpd_offset;    /* offset of call in text */
 432  448          struct sdt_probedesc    *sdpd_next;     /* next static probe */
 433  449  } sdt_probedesc_t;
 434  450  
 435  451  #ifdef  __cplusplus
 436  452  }
 437  453  #endif
 438  454  
 439  455  #endif  /* _SYS_SDT_H */
  
    | 
      ↓ open down ↓ | 
    178 lines elided | 
    
      ↑ open up ↑ | 
  
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX