| 1 |
|
| 2 | |
| 3 | * null_blk device driver tracepoints.
|
| 4 | *
|
| 5 | * Copyright (C) 2020 Western Digital Corporation or its affiliates.
|
| 6 |
|
| 7 |
|
| 8 | #undef TRACE_SYSTEM
|
| 9 | #define TRACE_SYSTEM nullb
|
| 10 |
|
| 11 | #if !defined(_TRACE_NULLB_H) || defined(TRACE_HEADER_MULTI_READ)
|
| 12 | #define _TRACE_NULLB_H
|
| 13 |
|
| 14 | #include <linux/tracepoint.h>
|
| 15 | #include <linux/trace_seq.h>
|
| 16 |
|
| 17 | #include "null_blk.h"
|
| 18 |
|
| 19 | const char *nullb_trace_disk_name(struct trace_seq *p, char *name);
|
| 20 |
|
| 21 | #define __print_disk_name(name) nullb_trace_disk_name(p, name)
|
| 22 |
|
| 23 | #ifndef TRACE_HEADER_MULTI_READ
|
| 24 | static inline void __assign_disk_name(char *name, struct gendisk *disk)
|
| 25 | {
|
| 26 | if (disk)
|
| 27 | memcpy(name, disk->disk_name, DISK_NAME_LEN);
|
| 28 | else
|
| 29 | memset(name, 0, DISK_NAME_LEN);
|
| 30 | }
|
| 31 | #endif
|
| 32 |
|
| 33 | TRACE_EVENT(nullb_zone_op,
|
| 34 | TP_PROTO(struct nullb_cmd *cmd, unsigned int zone_no,
|
| 35 | unsigned int zone_cond),
|
| 36 | TP_ARGS(cmd, zone_no, zone_cond),
|
| 37 | TP_STRUCT__entry(
|
| 38 | __array(char, disk, DISK_NAME_LEN)
|
| 39 | |
| 40 | * __field() uses is_signed_type(). is_signed_type() does not
|
| 41 | * support bitwise types. Use __field_struct() instead because
|
| 42 | * it does not use is_signed_type().
|
| 43 |
|
| 44 | __field_struct(enum req_op, op)
|
| 45 | __field(unsigned int, zone_no)
|
| 46 | __field(unsigned int, zone_cond)
|
| 47 | ),
|
| 48 | TP_fast_assign(
|
| 49 | __entry->op = req_op(blk_mq_rq_from_pdu(cmd));
|
| 50 | __entry->zone_no = zone_no;
|
| 51 | __entry->zone_cond = zone_cond;
|
| 52 | __assign_disk_name(__entry->disk,
|
| 53 | blk_mq_rq_from_pdu(cmd)->q->disk);
|
| 54 | ),
|
| 55 | TP_printk("%s req=%-15s zone_no=%u zone_cond=%-10s",
|
| 56 | __print_disk_name(__entry->disk),
|
| 57 | blk_op_str(__entry->op),
|
| 58 | __entry->zone_no,
|
| 59 | blk_zone_cond_str(__entry->zone_cond))
|
| 60 | );
|
| 61 |
|
| 62 | TRACE_EVENT(nullb_report_zones,
|
| 63 | TP_PROTO(struct nullb *nullb, unsigned int nr_zones),
|
| 64 | TP_ARGS(nullb, nr_zones),
|
| 65 | TP_STRUCT__entry(
|
| 66 | __array(char, disk, DISK_NAME_LEN)
|
| 67 | __field(unsigned int, nr_zones)
|
| 68 | ),
|
| 69 | TP_fast_assign(
|
| 70 | __entry->nr_zones = nr_zones;
|
| 71 | __assign_disk_name(__entry->disk, nullb->disk);
|
| 72 | ),
|
| 73 | TP_printk("%s nr_zones=%u",
|
| 74 | __print_disk_name(__entry->disk), __entry->nr_zones)
|
| 75 | );
|
| 76 |
|
| 77 | #endif
|
| 78 |
|
| 79 | #undef TRACE_INCLUDE_PATH
|
| 80 | #define TRACE_INCLUDE_PATH .
|
| 81 | #undef TRACE_INCLUDE_FILE
|
| 82 | #define TRACE_INCLUDE_FILE trace
|
| 83 |
|
| 84 |
|
| 85 | #include <trace/define_trace.h>
|