1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #undef TRACE_SYSTEM 3*4882a593Smuzhiyun #define TRACE_SYSTEM kyber 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #if !defined(_TRACE_KYBER_H) || defined(TRACE_HEADER_MULTI_READ) 6*4882a593Smuzhiyun #define _TRACE_KYBER_H 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #include <linux/blkdev.h> 9*4882a593Smuzhiyun #include <linux/tracepoint.h> 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #define DOMAIN_LEN 16 12*4882a593Smuzhiyun #define LATENCY_TYPE_LEN 8 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun TRACE_EVENT(kyber_latency, 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun TP_PROTO(struct request_queue *q, const char *domain, const char *type, 17*4882a593Smuzhiyun unsigned int percentile, unsigned int numerator, 18*4882a593Smuzhiyun unsigned int denominator, unsigned int samples), 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun TP_ARGS(q, domain, type, percentile, numerator, denominator, samples), 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun TP_STRUCT__entry( 23*4882a593Smuzhiyun __field( dev_t, dev ) 24*4882a593Smuzhiyun __array( char, domain, DOMAIN_LEN ) 25*4882a593Smuzhiyun __array( char, type, LATENCY_TYPE_LEN ) 26*4882a593Smuzhiyun __field( u8, percentile ) 27*4882a593Smuzhiyun __field( u8, numerator ) 28*4882a593Smuzhiyun __field( u8, denominator ) 29*4882a593Smuzhiyun __field( unsigned int, samples ) 30*4882a593Smuzhiyun ), 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun TP_fast_assign( 33*4882a593Smuzhiyun __entry->dev = disk_devt(dev_to_disk(kobj_to_dev(q->kobj.parent))); 34*4882a593Smuzhiyun strlcpy(__entry->domain, domain, sizeof(__entry->domain)); 35*4882a593Smuzhiyun strlcpy(__entry->type, type, sizeof(__entry->type)); 36*4882a593Smuzhiyun __entry->percentile = percentile; 37*4882a593Smuzhiyun __entry->numerator = numerator; 38*4882a593Smuzhiyun __entry->denominator = denominator; 39*4882a593Smuzhiyun __entry->samples = samples; 40*4882a593Smuzhiyun ), 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun TP_printk("%d,%d %s %s p%u %u/%u samples=%u", 43*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), __entry->domain, 44*4882a593Smuzhiyun __entry->type, __entry->percentile, __entry->numerator, 45*4882a593Smuzhiyun __entry->denominator, __entry->samples) 46*4882a593Smuzhiyun ); 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun TRACE_EVENT(kyber_adjust, 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun TP_PROTO(struct request_queue *q, const char *domain, 51*4882a593Smuzhiyun unsigned int depth), 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun TP_ARGS(q, domain, depth), 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun TP_STRUCT__entry( 56*4882a593Smuzhiyun __field( dev_t, dev ) 57*4882a593Smuzhiyun __array( char, domain, DOMAIN_LEN ) 58*4882a593Smuzhiyun __field( unsigned int, depth ) 59*4882a593Smuzhiyun ), 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun TP_fast_assign( 62*4882a593Smuzhiyun __entry->dev = disk_devt(dev_to_disk(kobj_to_dev(q->kobj.parent))); 63*4882a593Smuzhiyun strlcpy(__entry->domain, domain, sizeof(__entry->domain)); 64*4882a593Smuzhiyun __entry->depth = depth; 65*4882a593Smuzhiyun ), 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun TP_printk("%d,%d %s %u", 68*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), __entry->domain, 69*4882a593Smuzhiyun __entry->depth) 70*4882a593Smuzhiyun ); 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun TRACE_EVENT(kyber_throttled, 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun TP_PROTO(struct request_queue *q, const char *domain), 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun TP_ARGS(q, domain), 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun TP_STRUCT__entry( 79*4882a593Smuzhiyun __field( dev_t, dev ) 80*4882a593Smuzhiyun __array( char, domain, DOMAIN_LEN ) 81*4882a593Smuzhiyun ), 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun TP_fast_assign( 84*4882a593Smuzhiyun __entry->dev = disk_devt(dev_to_disk(kobj_to_dev(q->kobj.parent))); 85*4882a593Smuzhiyun strlcpy(__entry->domain, domain, sizeof(__entry->domain)); 86*4882a593Smuzhiyun ), 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun TP_printk("%d,%d %s", MAJOR(__entry->dev), MINOR(__entry->dev), 89*4882a593Smuzhiyun __entry->domain) 90*4882a593Smuzhiyun ); 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun #define _TRACE_KYBER_H 93*4882a593Smuzhiyun #endif /* _TRACE_KYBER_H */ 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun /* This part must be outside protection */ 96*4882a593Smuzhiyun #include <trace/define_trace.h> 97