linux/drivers/s390/cio/trace.h
<<
>>
Prefs
   1/*
   2 * Tracepoint header for the s390 Common I/O layer (CIO)
   3 *
   4 * Copyright IBM Corp. 2015
   5 * Author(s): Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
   6 */
   7
   8#include <linux/kernel.h>
   9#include <asm/crw.h>
  10#include <uapi/asm/chpid.h>
  11#include <uapi/asm/schid.h>
  12#include "cio.h"
  13#include "orb.h"
  14
  15#undef TRACE_SYSTEM
  16#define TRACE_SYSTEM s390
  17
  18#if !defined(_TRACE_S390_CIO_H) || defined(TRACE_HEADER_MULTI_READ)
  19#define _TRACE_S390_CIO_H
  20
  21#include <linux/tracepoint.h>
  22
  23DECLARE_EVENT_CLASS(s390_class_schib,
  24        TP_PROTO(struct subchannel_id schid, struct schib *schib, int cc),
  25        TP_ARGS(schid, schib, cc),
  26        TP_STRUCT__entry(
  27                __field(u8, cssid)
  28                __field(u8, ssid)
  29                __field(u16, schno)
  30                __field(u16, devno)
  31                __field_struct(struct schib, schib)
  32                __field(int, cc)
  33        ),
  34        TP_fast_assign(
  35                __entry->cssid = schid.cssid;
  36                __entry->ssid = schid.ssid;
  37                __entry->schno = schid.sch_no;
  38                __entry->devno = schib->pmcw.dev;
  39                __entry->schib = *schib;
  40                __entry->cc = cc;
  41        ),
  42        TP_printk("schid=%x.%x.%04x cc=%d ena=%d st=%d dnv=%d dev=%04x "
  43                  "lpm=0x%02x pnom=0x%02x lpum=0x%02x pim=0x%02x pam=0x%02x "
  44                  "pom=0x%02x chpids=%016llx",
  45                  __entry->cssid, __entry->ssid, __entry->schno, __entry->cc,
  46                  __entry->schib.pmcw.ena, __entry->schib.pmcw.st,
  47                  __entry->schib.pmcw.dnv, __entry->schib.pmcw.dev,
  48                  __entry->schib.pmcw.lpm, __entry->schib.pmcw.pnom,
  49                  __entry->schib.pmcw.lpum, __entry->schib.pmcw.pim,
  50                  __entry->schib.pmcw.pam, __entry->schib.pmcw.pom,
  51                  *((u64 *) __entry->schib.pmcw.chpid)
  52        )
  53);
  54
  55/**
  56 * s390_cio_stsch -  Store Subchannel instruction (STSCH) was performed
  57 * @schid: Subchannel ID
  58 * @schib: Subchannel-Information block
  59 * @cc: Condition code
  60 */
  61DEFINE_EVENT(s390_class_schib, s390_cio_stsch,
  62        TP_PROTO(struct subchannel_id schid, struct schib *schib, int cc),
  63        TP_ARGS(schid, schib, cc)
  64);
  65
  66/**
  67 * s390_cio_msch -  Modify Subchannel instruction (MSCH) was performed
  68 * @schid: Subchannel ID
  69 * @schib: Subchannel-Information block
  70 * @cc: Condition code
  71 */
  72DEFINE_EVENT(s390_class_schib, s390_cio_msch,
  73        TP_PROTO(struct subchannel_id schid, struct schib *schib, int cc),
  74        TP_ARGS(schid, schib, cc)
  75);
  76
  77/**
  78 * s390_cio_tsch - Test Subchannel instruction (TSCH) was performed
  79 * @schid: Subchannel ID
  80 * @irb: Interruption-Response Block
  81 * @cc: Condition code
  82 */
  83TRACE_EVENT(s390_cio_tsch,
  84        TP_PROTO(struct subchannel_id schid, struct irb *irb, int cc),
  85        TP_ARGS(schid, irb, cc),
  86        TP_STRUCT__entry(
  87                __field(u8, cssid)
  88                __field(u8, ssid)
  89                __field(u16, schno)
  90                __field_struct(struct irb, irb)
  91                __field(int, cc)
  92        ),
  93        TP_fast_assign(
  94                __entry->cssid = schid.cssid;
  95                __entry->ssid = schid.ssid;
  96                __entry->schno = schid.sch_no;
  97                __entry->irb = *irb;
  98                __entry->cc = cc;
  99        ),
 100        TP_printk("schid=%x.%x.%04x cc=%d dcc=%d pno=%d fctl=0x%x actl=0x%x "
 101                  "stctl=0x%x dstat=0x%x cstat=0x%x",
 102                  __entry->cssid, __entry->ssid, __entry->schno, __entry->cc,
 103                  scsw_cc(&__entry->irb.scsw), scsw_pno(&__entry->irb.scsw),
 104                  scsw_fctl(&__entry->irb.scsw), scsw_actl(&__entry->irb.scsw),
 105                  scsw_stctl(&__entry->irb.scsw),
 106                  scsw_dstat(&__entry->irb.scsw), scsw_cstat(&__entry->irb.scsw)
 107        )
 108);
 109
 110/**
 111 * s390_cio_tpi - Test Pending Interruption instruction (TPI) was performed
 112 * @addr: Address of the I/O interruption code or %NULL
 113 * @cc: Condition code
 114 */
 115TRACE_EVENT(s390_cio_tpi,
 116        TP_PROTO(struct tpi_info *addr, int cc),
 117        TP_ARGS(addr, cc),
 118        TP_STRUCT__entry(
 119                __field(int, cc)
 120                __field_struct(struct tpi_info, tpi_info)
 121                __field(u8, cssid)
 122                __field(u8, ssid)
 123                __field(u16, schno)
 124        ),
 125        TP_fast_assign(
 126                __entry->cc = cc;
 127                if (cc != 0)
 128                        memset(&__entry->tpi_info, 0, sizeof(struct tpi_info));
 129                else if (addr)
 130                        __entry->tpi_info = *addr;
 131                else {
 132                        memcpy(&__entry->tpi_info, &S390_lowcore.subchannel_id,
 133                               sizeof(struct tpi_info));
 134                }
 135                __entry->cssid = __entry->tpi_info.schid.cssid;
 136                __entry->ssid = __entry->tpi_info.schid.ssid;
 137                __entry->schno = __entry->tpi_info.schid.sch_no;
 138        ),
 139        TP_printk("schid=%x.%x.%04x cc=%d a=%d isc=%d type=%d",
 140                  __entry->cssid, __entry->ssid, __entry->schno, __entry->cc,
 141                  __entry->tpi_info.adapter_IO, __entry->tpi_info.isc,
 142                  __entry->tpi_info.type
 143        )
 144);
 145
 146/**
 147 * s390_cio_ssch - Start Subchannel instruction (SSCH) was performed
 148 * @schid: Subchannel ID
 149 * @orb: Operation-Request Block
 150 * @cc: Condition code
 151 */
 152TRACE_EVENT(s390_cio_ssch,
 153        TP_PROTO(struct subchannel_id schid, union orb *orb, int cc),
 154        TP_ARGS(schid, orb, cc),
 155        TP_STRUCT__entry(
 156                __field(u8, cssid)
 157                __field(u8, ssid)
 158                __field(u16, schno)
 159                __field_struct(union orb, orb)
 160                __field(int, cc)
 161        ),
 162        TP_fast_assign(
 163                __entry->cssid = schid.cssid;
 164                __entry->ssid = schid.ssid;
 165                __entry->schno = schid.sch_no;
 166                __entry->orb = *orb;
 167                __entry->cc = cc;
 168        ),
 169        TP_printk("schid=%x.%x.%04x cc=%d", __entry->cssid, __entry->ssid,
 170                  __entry->schno, __entry->cc
 171        )
 172);
 173
 174DECLARE_EVENT_CLASS(s390_class_schid,
 175        TP_PROTO(struct subchannel_id schid, int cc),
 176        TP_ARGS(schid, cc),
 177        TP_STRUCT__entry(
 178                __field(u8, cssid)
 179                __field(u8, ssid)
 180                __field(u16, schno)
 181                __field(int, cc)
 182        ),
 183        TP_fast_assign(
 184                __entry->cssid = schid.cssid;
 185                __entry->ssid = schid.ssid;
 186                __entry->schno = schid.sch_no;
 187                __entry->cc = cc;
 188        ),
 189        TP_printk("schid=%x.%x.%04x cc=%d", __entry->cssid, __entry->ssid,
 190                  __entry->schno, __entry->cc
 191        )
 192);
 193
 194/**
 195 * s390_cio_csch - Clear Subchannel instruction (CSCH) was performed
 196 * @schid: Subchannel ID
 197 * @cc: Condition code
 198 */
 199DEFINE_EVENT(s390_class_schid, s390_cio_csch,
 200        TP_PROTO(struct subchannel_id schid, int cc),
 201        TP_ARGS(schid, cc)
 202);
 203
 204/**
 205 * s390_cio_hsch - Halt Subchannel instruction (HSCH) was performed
 206 * @schid: Subchannel ID
 207 * @cc: Condition code
 208 */
 209DEFINE_EVENT(s390_class_schid, s390_cio_hsch,
 210        TP_PROTO(struct subchannel_id schid, int cc),
 211        TP_ARGS(schid, cc)
 212);
 213
 214/**
 215 * s390_cio_xsch - Cancel Subchannel instruction (XSCH) was performed
 216 * @schid: Subchannel ID
 217 * @cc: Condition code
 218 */
 219DEFINE_EVENT(s390_class_schid, s390_cio_xsch,
 220        TP_PROTO(struct subchannel_id schid, int cc),
 221        TP_ARGS(schid, cc)
 222);
 223
 224/**
 225 * s390_cio_rsch - Resume Subchannel instruction (RSCH) was performed
 226 * @schid: Subchannel ID
 227 * @cc: Condition code
 228 */
 229DEFINE_EVENT(s390_class_schid, s390_cio_rsch,
 230        TP_PROTO(struct subchannel_id schid, int cc),
 231        TP_ARGS(schid, cc)
 232);
 233
 234/**
 235 * s390_cio_rchp - Reset Channel Path (RCHP) instruction was performed
 236 * @chpid: Channel-Path Identifier
 237 * @cc: Condition code
 238 */
 239TRACE_EVENT(s390_cio_rchp,
 240        TP_PROTO(struct chp_id chpid, int cc),
 241        TP_ARGS(chpid, cc),
 242        TP_STRUCT__entry(
 243                __field(u8, cssid)
 244                __field(u8, id)
 245                __field(int, cc)
 246        ),
 247        TP_fast_assign(
 248                __entry->cssid = chpid.cssid;
 249                __entry->id = chpid.id;
 250                __entry->cc = cc;
 251        ),
 252        TP_printk("chpid=%x.%02x cc=%d", __entry->cssid, __entry->id,
 253                  __entry->cc
 254        )
 255);
 256
 257#define CHSC_MAX_REQUEST_LEN            64
 258#define CHSC_MAX_RESPONSE_LEN           64
 259
 260/**
 261 * s390_cio_chsc - Channel Subsystem Call (CHSC) instruction was performed
 262 * @chsc: CHSC block
 263 * @cc: Condition code
 264 */
 265TRACE_EVENT(s390_cio_chsc,
 266        TP_PROTO(struct chsc_header *chsc, int cc),
 267        TP_ARGS(chsc, cc),
 268        TP_STRUCT__entry(
 269                __field(int, cc)
 270                __field(u16, code)
 271                __field(u16, rcode)
 272                __array(u8, request, CHSC_MAX_REQUEST_LEN)
 273                __array(u8, response, CHSC_MAX_RESPONSE_LEN)
 274        ),
 275        TP_fast_assign(
 276                __entry->cc = cc;
 277                __entry->code = chsc->code;
 278                memcpy(&entry->request, chsc,
 279                       min_t(u16, chsc->length, CHSC_MAX_REQUEST_LEN));
 280                chsc = (struct chsc_header *) ((char *) chsc + chsc->length);
 281                __entry->rcode = chsc->code;
 282                memcpy(&entry->response, chsc,
 283                       min_t(u16, chsc->length, CHSC_MAX_RESPONSE_LEN));
 284        ),
 285        TP_printk("code=0x%04x cc=%d rcode=0x%04x", __entry->code,
 286                  __entry->cc, __entry->rcode)
 287);
 288
 289/**
 290 * s390_cio_interrupt - An I/O interrupt occurred
 291 * @tpi_info: Address of the I/O interruption code
 292 */
 293TRACE_EVENT(s390_cio_interrupt,
 294        TP_PROTO(struct tpi_info *tpi_info),
 295        TP_ARGS(tpi_info),
 296        TP_STRUCT__entry(
 297                __field_struct(struct tpi_info, tpi_info)
 298                __field(u8, cssid)
 299                __field(u8, ssid)
 300                __field(u16, schno)
 301        ),
 302        TP_fast_assign(
 303                __entry->tpi_info = *tpi_info;
 304                __entry->cssid = __entry->tpi_info.schid.cssid;
 305                __entry->ssid = __entry->tpi_info.schid.ssid;
 306                __entry->schno = __entry->tpi_info.schid.sch_no;
 307        ),
 308        TP_printk("schid=%x.%x.%04x isc=%d type=%d",
 309                  __entry->cssid, __entry->ssid, __entry->schno,
 310                  __entry->tpi_info.isc, __entry->tpi_info.type
 311        )
 312);
 313
 314/**
 315 * s390_cio_adapter_int - An adapter interrupt occurred
 316 * @tpi_info: Address of the I/O interruption code
 317 */
 318TRACE_EVENT(s390_cio_adapter_int,
 319        TP_PROTO(struct tpi_info *tpi_info),
 320        TP_ARGS(tpi_info),
 321        TP_STRUCT__entry(
 322                __field_struct(struct tpi_info, tpi_info)
 323        ),
 324        TP_fast_assign(
 325                __entry->tpi_info = *tpi_info;
 326        ),
 327        TP_printk("isc=%d", __entry->tpi_info.isc)
 328);
 329
 330/**
 331 * s390_cio_stcrw - Store Channel Report Word (STCRW) was performed
 332 * @crw: Channel Report Word
 333 * @cc: Condition code
 334 */
 335TRACE_EVENT(s390_cio_stcrw,
 336        TP_PROTO(struct crw *crw, int cc),
 337        TP_ARGS(crw, cc),
 338        TP_STRUCT__entry(
 339                __field_struct(struct crw, crw)
 340                __field(int, cc)
 341        ),
 342        TP_fast_assign(
 343                __entry->crw = *crw;
 344                __entry->cc = cc;
 345        ),
 346        TP_printk("cc=%d slct=%d oflw=%d chn=%d rsc=%d anc=%d erc=0x%x "
 347                  "rsid=0x%x",
 348                  __entry->cc, __entry->crw.slct, __entry->crw.oflw,
 349                  __entry->crw.chn, __entry->crw.rsc,  __entry->crw.anc,
 350                  __entry->crw.erc, __entry->crw.rsid
 351        )
 352);
 353
 354#endif /* _TRACE_S390_CIO_H */
 355
 356/* This part must be outside protection */
 357#undef TRACE_INCLUDE_PATH
 358#define TRACE_INCLUDE_PATH .
 359
 360#undef TRACE_INCLUDE_FILE
 361#define TRACE_INCLUDE_FILE trace
 362
 363#include <trace/define_trace.h>
 364