1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun #undef TRACE_SYSTEM 4*4882a593Smuzhiyun #define TRACE_SYSTEM hyperv 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #if !defined(_HV_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) 7*4882a593Smuzhiyun #define _HV_TRACE_H 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #include <linux/tracepoint.h> 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun DECLARE_EVENT_CLASS(vmbus_hdr_msg, 12*4882a593Smuzhiyun TP_PROTO(const struct vmbus_channel_message_header *hdr), 13*4882a593Smuzhiyun TP_ARGS(hdr), 14*4882a593Smuzhiyun TP_STRUCT__entry(__field(unsigned int, msgtype)), 15*4882a593Smuzhiyun TP_fast_assign(__entry->msgtype = hdr->msgtype;), 16*4882a593Smuzhiyun TP_printk("msgtype=%u", __entry->msgtype) 17*4882a593Smuzhiyun ); 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun DEFINE_EVENT(vmbus_hdr_msg, vmbus_on_msg_dpc, 20*4882a593Smuzhiyun TP_PROTO(const struct vmbus_channel_message_header *hdr), 21*4882a593Smuzhiyun TP_ARGS(hdr) 22*4882a593Smuzhiyun ); 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun DEFINE_EVENT(vmbus_hdr_msg, vmbus_on_message, 25*4882a593Smuzhiyun TP_PROTO(const struct vmbus_channel_message_header *hdr), 26*4882a593Smuzhiyun TP_ARGS(hdr) 27*4882a593Smuzhiyun ); 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun TRACE_EVENT(vmbus_onoffer, 30*4882a593Smuzhiyun TP_PROTO(const struct vmbus_channel_offer_channel *offer), 31*4882a593Smuzhiyun TP_ARGS(offer), 32*4882a593Smuzhiyun TP_STRUCT__entry( 33*4882a593Smuzhiyun __field(u32, child_relid) 34*4882a593Smuzhiyun __field(u8, monitorid) 35*4882a593Smuzhiyun __field(u16, is_ddc_int) 36*4882a593Smuzhiyun __field(u32, connection_id) 37*4882a593Smuzhiyun __array(char, if_type, 16) 38*4882a593Smuzhiyun __array(char, if_instance, 16) 39*4882a593Smuzhiyun __field(u16, chn_flags) 40*4882a593Smuzhiyun __field(u16, mmio_mb) 41*4882a593Smuzhiyun __field(u16, sub_idx) 42*4882a593Smuzhiyun ), 43*4882a593Smuzhiyun TP_fast_assign(__entry->child_relid = offer->child_relid; 44*4882a593Smuzhiyun __entry->monitorid = offer->monitorid; 45*4882a593Smuzhiyun __entry->is_ddc_int = offer->is_dedicated_interrupt; 46*4882a593Smuzhiyun __entry->connection_id = offer->connection_id; 47*4882a593Smuzhiyun export_guid(__entry->if_type, &offer->offer.if_type); 48*4882a593Smuzhiyun export_guid(__entry->if_instance, &offer->offer.if_instance); 49*4882a593Smuzhiyun __entry->chn_flags = offer->offer.chn_flags; 50*4882a593Smuzhiyun __entry->mmio_mb = offer->offer.mmio_megabytes; 51*4882a593Smuzhiyun __entry->sub_idx = offer->offer.sub_channel_index; 52*4882a593Smuzhiyun ), 53*4882a593Smuzhiyun TP_printk("child_relid 0x%x, monitorid 0x%x, is_dedicated %d, " 54*4882a593Smuzhiyun "connection_id 0x%x, if_type %pUl, if_instance %pUl, " 55*4882a593Smuzhiyun "chn_flags 0x%x, mmio_megabytes %d, sub_channel_index %d", 56*4882a593Smuzhiyun __entry->child_relid, __entry->monitorid, 57*4882a593Smuzhiyun __entry->is_ddc_int, __entry->connection_id, 58*4882a593Smuzhiyun __entry->if_type, __entry->if_instance, 59*4882a593Smuzhiyun __entry->chn_flags, __entry->mmio_mb, 60*4882a593Smuzhiyun __entry->sub_idx 61*4882a593Smuzhiyun ) 62*4882a593Smuzhiyun ); 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun TRACE_EVENT(vmbus_onoffer_rescind, 65*4882a593Smuzhiyun TP_PROTO(const struct vmbus_channel_rescind_offer *offer), 66*4882a593Smuzhiyun TP_ARGS(offer), 67*4882a593Smuzhiyun TP_STRUCT__entry(__field(u32, child_relid)), 68*4882a593Smuzhiyun TP_fast_assign(__entry->child_relid = offer->child_relid), 69*4882a593Smuzhiyun TP_printk("child_relid 0x%x", __entry->child_relid) 70*4882a593Smuzhiyun ); 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun TRACE_EVENT(vmbus_onopen_result, 73*4882a593Smuzhiyun TP_PROTO(const struct vmbus_channel_open_result *result), 74*4882a593Smuzhiyun TP_ARGS(result), 75*4882a593Smuzhiyun TP_STRUCT__entry( 76*4882a593Smuzhiyun __field(u32, child_relid) 77*4882a593Smuzhiyun __field(u32, openid) 78*4882a593Smuzhiyun __field(u32, status) 79*4882a593Smuzhiyun ), 80*4882a593Smuzhiyun TP_fast_assign(__entry->child_relid = result->child_relid; 81*4882a593Smuzhiyun __entry->openid = result->openid; 82*4882a593Smuzhiyun __entry->status = result->status; 83*4882a593Smuzhiyun ), 84*4882a593Smuzhiyun TP_printk("child_relid 0x%x, openid %d, status %d", 85*4882a593Smuzhiyun __entry->child_relid, __entry->openid, __entry->status 86*4882a593Smuzhiyun ) 87*4882a593Smuzhiyun ); 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun TRACE_EVENT(vmbus_ongpadl_created, 90*4882a593Smuzhiyun TP_PROTO(const struct vmbus_channel_gpadl_created *gpadlcreated), 91*4882a593Smuzhiyun TP_ARGS(gpadlcreated), 92*4882a593Smuzhiyun TP_STRUCT__entry( 93*4882a593Smuzhiyun __field(u32, child_relid) 94*4882a593Smuzhiyun __field(u32, gpadl) 95*4882a593Smuzhiyun __field(u32, status) 96*4882a593Smuzhiyun ), 97*4882a593Smuzhiyun TP_fast_assign(__entry->child_relid = gpadlcreated->child_relid; 98*4882a593Smuzhiyun __entry->gpadl = gpadlcreated->gpadl; 99*4882a593Smuzhiyun __entry->status = gpadlcreated->creation_status; 100*4882a593Smuzhiyun ), 101*4882a593Smuzhiyun TP_printk("child_relid 0x%x, gpadl 0x%x, creation_status %d", 102*4882a593Smuzhiyun __entry->child_relid, __entry->gpadl, __entry->status 103*4882a593Smuzhiyun ) 104*4882a593Smuzhiyun ); 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun TRACE_EVENT(vmbus_ongpadl_torndown, 107*4882a593Smuzhiyun TP_PROTO(const struct vmbus_channel_gpadl_torndown *gpadltorndown), 108*4882a593Smuzhiyun TP_ARGS(gpadltorndown), 109*4882a593Smuzhiyun TP_STRUCT__entry(__field(u32, gpadl)), 110*4882a593Smuzhiyun TP_fast_assign(__entry->gpadl = gpadltorndown->gpadl), 111*4882a593Smuzhiyun TP_printk("gpadl 0x%x", __entry->gpadl) 112*4882a593Smuzhiyun ); 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun TRACE_EVENT(vmbus_onversion_response, 115*4882a593Smuzhiyun TP_PROTO(const struct vmbus_channel_version_response *response), 116*4882a593Smuzhiyun TP_ARGS(response), 117*4882a593Smuzhiyun TP_STRUCT__entry( 118*4882a593Smuzhiyun __field(u8, ver) 119*4882a593Smuzhiyun ), 120*4882a593Smuzhiyun TP_fast_assign(__entry->ver = response->version_supported; 121*4882a593Smuzhiyun ), 122*4882a593Smuzhiyun TP_printk("version_supported %d", __entry->ver) 123*4882a593Smuzhiyun ); 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun TRACE_EVENT(vmbus_request_offers, 126*4882a593Smuzhiyun TP_PROTO(int ret), 127*4882a593Smuzhiyun TP_ARGS(ret), 128*4882a593Smuzhiyun TP_STRUCT__entry(__field(int, ret)), 129*4882a593Smuzhiyun TP_fast_assign(__entry->ret = ret), 130*4882a593Smuzhiyun TP_printk("sending ret %d", __entry->ret) 131*4882a593Smuzhiyun ); 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun TRACE_EVENT(vmbus_open, 134*4882a593Smuzhiyun TP_PROTO(const struct vmbus_channel_open_channel *msg, int ret), 135*4882a593Smuzhiyun TP_ARGS(msg, ret), 136*4882a593Smuzhiyun TP_STRUCT__entry( 137*4882a593Smuzhiyun __field(u32, child_relid) 138*4882a593Smuzhiyun __field(u32, openid) 139*4882a593Smuzhiyun __field(u32, gpadlhandle) 140*4882a593Smuzhiyun __field(u32, target_vp) 141*4882a593Smuzhiyun __field(u32, offset) 142*4882a593Smuzhiyun __field(int, ret) 143*4882a593Smuzhiyun ), 144*4882a593Smuzhiyun TP_fast_assign( 145*4882a593Smuzhiyun __entry->child_relid = msg->child_relid; 146*4882a593Smuzhiyun __entry->openid = msg->openid; 147*4882a593Smuzhiyun __entry->gpadlhandle = msg->ringbuffer_gpadlhandle; 148*4882a593Smuzhiyun __entry->target_vp = msg->target_vp; 149*4882a593Smuzhiyun __entry->offset = msg->downstream_ringbuffer_pageoffset; 150*4882a593Smuzhiyun __entry->ret = ret; 151*4882a593Smuzhiyun ), 152*4882a593Smuzhiyun TP_printk("sending child_relid 0x%x, openid %d, " 153*4882a593Smuzhiyun "gpadlhandle 0x%x, target_vp 0x%x, offset 0x%x, ret %d", 154*4882a593Smuzhiyun __entry->child_relid, __entry->openid, 155*4882a593Smuzhiyun __entry->gpadlhandle, __entry->target_vp, 156*4882a593Smuzhiyun __entry->offset, __entry->ret 157*4882a593Smuzhiyun ) 158*4882a593Smuzhiyun ); 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun TRACE_EVENT(vmbus_close_internal, 161*4882a593Smuzhiyun TP_PROTO(const struct vmbus_channel_close_channel *msg, int ret), 162*4882a593Smuzhiyun TP_ARGS(msg, ret), 163*4882a593Smuzhiyun TP_STRUCT__entry( 164*4882a593Smuzhiyun __field(u32, child_relid) 165*4882a593Smuzhiyun __field(int, ret) 166*4882a593Smuzhiyun ), 167*4882a593Smuzhiyun TP_fast_assign( 168*4882a593Smuzhiyun __entry->child_relid = msg->child_relid; 169*4882a593Smuzhiyun __entry->ret = ret; 170*4882a593Smuzhiyun ), 171*4882a593Smuzhiyun TP_printk("sending child_relid 0x%x, ret %d", __entry->child_relid, 172*4882a593Smuzhiyun __entry->ret) 173*4882a593Smuzhiyun ); 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun TRACE_EVENT(vmbus_establish_gpadl_header, 176*4882a593Smuzhiyun TP_PROTO(const struct vmbus_channel_gpadl_header *msg, int ret), 177*4882a593Smuzhiyun TP_ARGS(msg, ret), 178*4882a593Smuzhiyun TP_STRUCT__entry( 179*4882a593Smuzhiyun __field(u32, child_relid) 180*4882a593Smuzhiyun __field(u32, gpadl) 181*4882a593Smuzhiyun __field(u16, range_buflen) 182*4882a593Smuzhiyun __field(u16, rangecount) 183*4882a593Smuzhiyun __field(int, ret) 184*4882a593Smuzhiyun ), 185*4882a593Smuzhiyun TP_fast_assign( 186*4882a593Smuzhiyun __entry->child_relid = msg->child_relid; 187*4882a593Smuzhiyun __entry->gpadl = msg->gpadl; 188*4882a593Smuzhiyun __entry->range_buflen = msg->range_buflen; 189*4882a593Smuzhiyun __entry->rangecount = msg->rangecount; 190*4882a593Smuzhiyun __entry->ret = ret; 191*4882a593Smuzhiyun ), 192*4882a593Smuzhiyun TP_printk("sending child_relid 0x%x, gpadl 0x%x, range_buflen %d " 193*4882a593Smuzhiyun "rangecount %d, ret %d", 194*4882a593Smuzhiyun __entry->child_relid, __entry->gpadl, 195*4882a593Smuzhiyun __entry->range_buflen, __entry->rangecount, __entry->ret 196*4882a593Smuzhiyun ) 197*4882a593Smuzhiyun ); 198*4882a593Smuzhiyun 199*4882a593Smuzhiyun TRACE_EVENT(vmbus_establish_gpadl_body, 200*4882a593Smuzhiyun TP_PROTO(const struct vmbus_channel_gpadl_body *msg, int ret), 201*4882a593Smuzhiyun TP_ARGS(msg, ret), 202*4882a593Smuzhiyun TP_STRUCT__entry( 203*4882a593Smuzhiyun __field(u32, msgnumber) 204*4882a593Smuzhiyun __field(u32, gpadl) 205*4882a593Smuzhiyun __field(int, ret) 206*4882a593Smuzhiyun ), 207*4882a593Smuzhiyun TP_fast_assign( 208*4882a593Smuzhiyun __entry->msgnumber = msg->msgnumber; 209*4882a593Smuzhiyun __entry->gpadl = msg->gpadl; 210*4882a593Smuzhiyun __entry->ret = ret; 211*4882a593Smuzhiyun ), 212*4882a593Smuzhiyun TP_printk("sending msgnumber %d, gpadl 0x%x, ret %d", 213*4882a593Smuzhiyun __entry->msgnumber, __entry->gpadl, __entry->ret 214*4882a593Smuzhiyun ) 215*4882a593Smuzhiyun ); 216*4882a593Smuzhiyun 217*4882a593Smuzhiyun TRACE_EVENT(vmbus_teardown_gpadl, 218*4882a593Smuzhiyun TP_PROTO(const struct vmbus_channel_gpadl_teardown *msg, int ret), 219*4882a593Smuzhiyun TP_ARGS(msg, ret), 220*4882a593Smuzhiyun TP_STRUCT__entry( 221*4882a593Smuzhiyun __field(u32, child_relid) 222*4882a593Smuzhiyun __field(u32, gpadl) 223*4882a593Smuzhiyun __field(int, ret) 224*4882a593Smuzhiyun ), 225*4882a593Smuzhiyun TP_fast_assign( 226*4882a593Smuzhiyun __entry->child_relid = msg->child_relid; 227*4882a593Smuzhiyun __entry->gpadl = msg->gpadl; 228*4882a593Smuzhiyun __entry->ret = ret; 229*4882a593Smuzhiyun ), 230*4882a593Smuzhiyun TP_printk("sending child_relid 0x%x, gpadl 0x%x, ret %d", 231*4882a593Smuzhiyun __entry->child_relid, __entry->gpadl, __entry->ret 232*4882a593Smuzhiyun ) 233*4882a593Smuzhiyun ); 234*4882a593Smuzhiyun 235*4882a593Smuzhiyun TRACE_EVENT(vmbus_negotiate_version, 236*4882a593Smuzhiyun TP_PROTO(const struct vmbus_channel_initiate_contact *msg, int ret), 237*4882a593Smuzhiyun TP_ARGS(msg, ret), 238*4882a593Smuzhiyun TP_STRUCT__entry( 239*4882a593Smuzhiyun __field(u32, ver) 240*4882a593Smuzhiyun __field(u32, target_vcpu) 241*4882a593Smuzhiyun __field(int, ret) 242*4882a593Smuzhiyun __field(u64, int_page) 243*4882a593Smuzhiyun __field(u64, mon_page1) 244*4882a593Smuzhiyun __field(u64, mon_page2) 245*4882a593Smuzhiyun ), 246*4882a593Smuzhiyun TP_fast_assign( 247*4882a593Smuzhiyun __entry->ver = msg->vmbus_version_requested; 248*4882a593Smuzhiyun __entry->target_vcpu = msg->target_vcpu; 249*4882a593Smuzhiyun __entry->int_page = msg->interrupt_page; 250*4882a593Smuzhiyun __entry->mon_page1 = msg->monitor_page1; 251*4882a593Smuzhiyun __entry->mon_page2 = msg->monitor_page2; 252*4882a593Smuzhiyun __entry->ret = ret; 253*4882a593Smuzhiyun ), 254*4882a593Smuzhiyun TP_printk("sending vmbus_version_requested %d, target_vcpu 0x%x, " 255*4882a593Smuzhiyun "pages %llx:%llx:%llx, ret %d", 256*4882a593Smuzhiyun __entry->ver, __entry->target_vcpu, __entry->int_page, 257*4882a593Smuzhiyun __entry->mon_page1, __entry->mon_page2, __entry->ret 258*4882a593Smuzhiyun ) 259*4882a593Smuzhiyun ); 260*4882a593Smuzhiyun 261*4882a593Smuzhiyun TRACE_EVENT(vmbus_release_relid, 262*4882a593Smuzhiyun TP_PROTO(const struct vmbus_channel_relid_released *msg, int ret), 263*4882a593Smuzhiyun TP_ARGS(msg, ret), 264*4882a593Smuzhiyun TP_STRUCT__entry( 265*4882a593Smuzhiyun __field(u32, child_relid) 266*4882a593Smuzhiyun __field(int, ret) 267*4882a593Smuzhiyun ), 268*4882a593Smuzhiyun TP_fast_assign( 269*4882a593Smuzhiyun __entry->child_relid = msg->child_relid; 270*4882a593Smuzhiyun __entry->ret = ret; 271*4882a593Smuzhiyun ), 272*4882a593Smuzhiyun TP_printk("sending child_relid 0x%x, ret %d", 273*4882a593Smuzhiyun __entry->child_relid, __entry->ret 274*4882a593Smuzhiyun ) 275*4882a593Smuzhiyun ); 276*4882a593Smuzhiyun 277*4882a593Smuzhiyun TRACE_EVENT(vmbus_send_tl_connect_request, 278*4882a593Smuzhiyun TP_PROTO(const struct vmbus_channel_tl_connect_request *msg, 279*4882a593Smuzhiyun int ret), 280*4882a593Smuzhiyun TP_ARGS(msg, ret), 281*4882a593Smuzhiyun TP_STRUCT__entry( 282*4882a593Smuzhiyun __array(char, guest_id, 16) 283*4882a593Smuzhiyun __array(char, host_id, 16) 284*4882a593Smuzhiyun __field(int, ret) 285*4882a593Smuzhiyun ), 286*4882a593Smuzhiyun TP_fast_assign( 287*4882a593Smuzhiyun export_guid(__entry->guest_id, &msg->guest_endpoint_id); 288*4882a593Smuzhiyun export_guid(__entry->host_id, &msg->host_service_id); 289*4882a593Smuzhiyun __entry->ret = ret; 290*4882a593Smuzhiyun ), 291*4882a593Smuzhiyun TP_printk("sending guest_endpoint_id %pUl, host_service_id %pUl, " 292*4882a593Smuzhiyun "ret %d", 293*4882a593Smuzhiyun __entry->guest_id, __entry->host_id, __entry->ret 294*4882a593Smuzhiyun ) 295*4882a593Smuzhiyun ); 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun TRACE_EVENT(vmbus_send_modifychannel, 298*4882a593Smuzhiyun TP_PROTO(const struct vmbus_channel_modifychannel *msg, 299*4882a593Smuzhiyun int ret), 300*4882a593Smuzhiyun TP_ARGS(msg, ret), 301*4882a593Smuzhiyun TP_STRUCT__entry( 302*4882a593Smuzhiyun __field(u32, child_relid) 303*4882a593Smuzhiyun __field(u32, target_vp) 304*4882a593Smuzhiyun __field(int, ret) 305*4882a593Smuzhiyun ), 306*4882a593Smuzhiyun TP_fast_assign( 307*4882a593Smuzhiyun __entry->child_relid = msg->child_relid; 308*4882a593Smuzhiyun __entry->target_vp = msg->target_vp; 309*4882a593Smuzhiyun __entry->ret = ret; 310*4882a593Smuzhiyun ), 311*4882a593Smuzhiyun TP_printk("binding child_relid 0x%x to target_vp 0x%x, ret %d", 312*4882a593Smuzhiyun __entry->child_relid, __entry->target_vp, __entry->ret 313*4882a593Smuzhiyun ) 314*4882a593Smuzhiyun ); 315*4882a593Smuzhiyun 316*4882a593Smuzhiyun DECLARE_EVENT_CLASS(vmbus_channel, 317*4882a593Smuzhiyun TP_PROTO(const struct vmbus_channel *channel), 318*4882a593Smuzhiyun TP_ARGS(channel), 319*4882a593Smuzhiyun TP_STRUCT__entry(__field(u32, relid)), 320*4882a593Smuzhiyun TP_fast_assign(__entry->relid = channel->offermsg.child_relid), 321*4882a593Smuzhiyun TP_printk("relid 0x%x", __entry->relid) 322*4882a593Smuzhiyun ); 323*4882a593Smuzhiyun 324*4882a593Smuzhiyun DEFINE_EVENT(vmbus_channel, vmbus_chan_sched, 325*4882a593Smuzhiyun TP_PROTO(const struct vmbus_channel *channel), 326*4882a593Smuzhiyun TP_ARGS(channel) 327*4882a593Smuzhiyun ); 328*4882a593Smuzhiyun 329*4882a593Smuzhiyun DEFINE_EVENT(vmbus_channel, vmbus_setevent, 330*4882a593Smuzhiyun TP_PROTO(const struct vmbus_channel *channel), 331*4882a593Smuzhiyun TP_ARGS(channel) 332*4882a593Smuzhiyun ); 333*4882a593Smuzhiyun 334*4882a593Smuzhiyun DEFINE_EVENT(vmbus_channel, vmbus_on_event, 335*4882a593Smuzhiyun TP_PROTO(const struct vmbus_channel *channel), 336*4882a593Smuzhiyun TP_ARGS(channel) 337*4882a593Smuzhiyun ); 338*4882a593Smuzhiyun 339*4882a593Smuzhiyun #undef TRACE_INCLUDE_PATH 340*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH . 341*4882a593Smuzhiyun #undef TRACE_INCLUDE_FILE 342*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE hv_trace 343*4882a593Smuzhiyun #endif /* _HV_TRACE_H */ 344*4882a593Smuzhiyun 345*4882a593Smuzhiyun /* This part must be outside protection */ 346*4882a593Smuzhiyun #include <trace/define_trace.h> 347