cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

trace.h (10681B)


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